0

Windows 7 で最新の外観を得るために、古いアプリケーションを書き換えています。GUI 要素は、明示的なコード (特別なレイアウト マネージャーなし) を介して作成および移動されます。いくつかの歴史的な理由により、GUI イベントは標準的な方法で処理されませんでした。それらはリダイレクトされました。特に何に焦点を当てるべきかわからない場合、それらを追跡することはかなり困難です。

研磨する必要があるウィンドウの例を次に示します。ダイアログではありません。上部に配置されたクラシカルで大きな窓です。ただし、ダイアログの外観を模倣する必要があります。ウィンドウは、ATL::CWindow に基づく私のクラスWTL::CTabControlT<CControl>である場所を使用します -- 最初に画像を参照してください:CControl

TabControls のあるウィンドウ

写真からはよく見えませんが、赤い矢印の先は静的テキストの灰色の背景を示しています。ただし、タブ自体の背景は白です。

  1. 静的テキストの灰色の背景を引き起こすイベントは何ですか? ですかWM_CTLCOLORSTATIC。または、どこに問題がありますか?タブの背景は白または灰色 (標準の動作) であると予想されますか?
  2. タブのリストボックスも同じ(白)背景にすることを(ビジュアルインターフェイス、ユーザーエクスペリエンスのデザイナーが)推奨していますか?
  3. 外側のウィンドウはCOLOR_3DFACEATL マクロで定義されていますDECLARE_WND_CLASS_EX。タブ ウィンドウの背景をペイントする原因となっているイベントはどれですか?

助けてくれてありがとう、ペトル

4

1 に答える 1

0

タブの周りに欠落している灰色の背景は、WM_ERASEBKGNDメッセージを明示的に処理することで解決されました(リダイレクトによってデフォルトの処理が何らかの理由で妨げられました)。

if (uMsg == WM_ERASEBKGND)
{
    WTL::CDCHandle dc(reinterpret_cast<HDC>(wParam));
    RECT rc;
    GetClientRect(&rc);
    dc.FillRect(&rc, GetWndClassInfo().m_wc.hbrBackground);
    return TRUE;
}

同様に、白いタブの静的テキストの灰色の背景は、TabControlウィンドウので次のように処理WM_CTLCOLORSTATICすることによって白くなりました。ProcessWindowMessage

else if (uMsg == WM_CTLCOLORSTATIC)
    return TRUE;
于 2012-08-28T07:07:26.600 に答える