以下に私の問題を英語で説明しましたが、これは視覚的な問題なので、すべてを読みたくない場合は、一番下の図を見てください)。
私は自分のクラスの逆ポーランド記法電卓の構築に取り組んでおり、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 );
}
問題の写真: