0

いくつかのコントロールを含むウィンドウがありますが、編集コントロールだけが視覚スタイルを無視しています。原因を突き止めようとしましたが、今のところうまくいきません。これは次のようになります。

エディット コントロールの 3D スタイルが古い

ご覧のとおり、ボタンとリストボックス コントロールには適切な視覚スタイルがあります。ただし、編集コントロールはそうではありません。関係のない一連のコードを変更した後、数日前に適切なスタイルを適用したので、それが可能であることはわかっています。

注意事項:

  • への呼び出しを試みましたがInitCommonControlsInitCommonControlsEx成功しませんでした。
  • 私は編集コントロールに WS_EX_CLIENTEDGE を適用しており、以前は機能していた場合でも、その拡張スタイルを常にオンにしていました。

この問題の追跡に役立つように、できるだけ多くのコードを含めました。

私の TextBox クラス (Component を継承する) から:

protected:

virtual void OnRegistering(CreationParameters& createParams)
{
    // this is passed in as the lpClassName parameter in 
    // CreateWindowEx() and the lpszClassName parameter in WNDCLASSEX
    createParams.BaseClassName = WC_EDIT;

    // passed as the dwStyle parameter in CreateWindowEx()
    createParams.WindowStyles |= ES_AUTOHSCROLL | ES_AUTOVSCROLL; 

    // passed as the dwExStyle parameter in CreateWindowEx()
    createParams.WindowExStyles |= WS_EX_CLIENTEDGE;
}

WM_CTLCOLOREDIT または WM_ERASEBKGND メッセージの処理に関する問題は、これと関係がありますか? それともフォントの扱いの問題?または、他の何か?この時点で 100% アイデアがないからです。

4

1 に答える 1

4

問題は、編集コントロールの色付けに使用していたHBRUSHが、どういうわけか、不可解に初期化されず、であったことでしたNULL。他の人がこれに問題を抱えていることを私は知っているので、ここに私の解決策があります。

この問題は、WM_CTLCOLOREDITがメッセージキューに到着したときに明らかになりました。そのメッセージが到着したときに不適切/誤ったHBRUSHが返された場合、編集コントロールは古い視覚スタイルに戻ります。私のHBRUSHはだったのでNULL、古い視覚スタイルが編集コントロールに適用されました。

于 2013-02-24T02:57:26.843 に答える