Я дал объяснение своей проблемы на английском языке ниже, но это визуальная проблема, поэтому, если вы не хотите читать все это, просто посмотрите на картинку внизу).
Я работаю над созданием калькулятора обратного полирования для своего класса, и я только что закончил, чтобы элементы управления кнопками в моем графическом интерфейсе могли добавлять свои значения в элемент управления редактированием, который отлично работает, но курсор делает что-то странное, и я могу' t найти любую информацию о нем.
Я отправляю пользовательское сообщение в элемент управления редактированием, в котором он находит длину текущего текста в элементе управления, а затем помещает курсор в конец текста, чтобы я мог затем добавить текст, который нужно добавить (он выровнен по правому краю с 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 );
}
Изображение проблемы:
index = new int( GetWindowTextLength (hWnd) );
создает указатель на int, который затем просачивается, и, вероятно, в любом случае это не то, что вы хотели. Где декларация дляindex
? - person Adrian McCarthy   schedule 17.11.2015