あなたがCBN_SELCHANGE
通知に対応しているようです。これは、コンボボックスがその編集ボックスにテキストを設定した後に通知されます。
代わりにCBN_SELENDOK
にお答えください。 CBN_SELENDOK
がCBN_SELCHANGE
の前に送信されると、コンボボックスがテキストを設定する前にスタイルを変更する時間が与えられます。
switch (HIWORD(wParam))
{
case CBN_SELENDOK:// CBN_SELCHANGE:
if (SendMessage(hComboBox, CB_GETCURSEL, 0, 0) == 0)
ModifyStyleEx(hComboBox, WS_EX_LAYOUTRTL, 0);
else
ModifyStyleEx(hComboBox, 0, WS_EX_LAYOUTRTL);
break;
default:break;
}
編集:Windowsの10 /効果をフェードインしました。コンボの選択をキーボードで変更した場合、色がフェードアウトしている間も、テキストは引き続き後方に移動します。
ComboBoxには、この問題を引き起こしている可能性のある編集コントロールがあります。 WS_EX_LAYOUTRTL
の代わりにWS_EX_RIGHT | WS_EX_RTLREADING
を使用する方が良いでしょう。これはCBN_SELCHANGE
でも動作します。
case CBN_SELENDOK: //(or CBN_SELCHANGE)
if (SendMessage(hComboBox, CB_GETCURSEL, 0, 0) == 0)
ModifyStyleEx(hComboBox, WS_EX_RIGHT | WS_EX_RTLREADING, 0);
else
ModifyStyleEx(hComboBox, 0, WS_EX_RIGHT | WS_EX_RTLREADING);
break;
**これは答えではありません。それは診断です。答えが「正しく再描画された」場合、ここでの提案は「答え」とみなすべきではありませんが、以前の経験に基づいて何が起こっているのかを証明しています**:InvalidateRect親ウィンドウのウィンドウプロシージャの 'WM_USER + 5'ハンドラのハンドラで()を呼び出し、拡張スタイルを変更した後に' PostMessage(親ウィンドウ、WM_USER + 5、0、0) 'などを呼び出しますか?それは正しく再描画されますか、または反転したままになりますか? – andlabs