我在下面对我的问题进行了英文解释,但这是一个视觉问题,所以如果您不想全部阅读,请查看底部的图片)。
我正在为我的班级构建一个反向波兰符号计算器,我刚刚完成让我的 GUI 上的按钮控件能够将它们的值附加到工作正常的编辑控件,但是插入符号正在做一些奇怪的事情,我可以'找不到任何关于它的信息。
我向编辑控件发送一条自定义消息,它在其中找到控件中当前文本的长度,然后将插入符号放在文本的末尾,这样我就可以添加需要添加的文本(它与ES_RIGHT
),它再次工作得很好,但是当插入符号位于最正确的位置时,它实际上被放置在大多数任意数字的中间。
这似乎只发生在插入符号可以出现的最正确的位置(即插入符号直接位于前一个字符右侧的任何其他位置,因为它应该)并且我尝试使用代码将插入符号一直替换到右侧,使用我的键盘/鼠标放置它,并尝试调整窗口的尺寸,希望它只是我为它定义的宽度的偏移量,导致最后一个位置略微偏离,但问题仍然存在并且它很难读取文本字段中的最后一个字符。
相关代码:
LRESULT CALLBACK EditBoxClass::WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_COMMAND:
break;
case WM_APPEND_EDIT:
/* Get current length of text in the box */
index = new int( GetWindowTextLength (hWnd) );
SetFocus( hWnd );
/* Set the caret to the end of the text in the box */
SendMessage( hWnd, EM_SETSEL, (WPARAM)index, (LPARAM)index );
/* "Replace" the selection (the selection is actually targeting
nothing and just sits at the end of the text in the box)
with the passed in TCHAR* from the button control that
sent the WM_APPEND_EDIT message */
SendMessage( hWnd, EM_REPLACESEL, 0, lParam );
break;
}
return CallWindowProc( EditClassStruct.GetOldProc(), hWnd, msg, wParam, lParam );
}
问题图片: