2011-07-13 33 views
1

ダイアログボックスにモードの少ないプロパティシートを埋め込みました。私はコントロールの新しいウィンドウクラスを使用しませんでしたが、プロパティシートをダイアログのコンテナの子にしました。 1つのこと以外はすべて正常に動作します。ユーザーがプロパティシートをクリックすると、ダイアログのタイトルバーが青(ACTIVE)からグレー(INACTIVE)に変わります。私はプロパティシートがユーザへのダイアログの一部であるように見えるので、プロパティシートがアクティブなときにダイアログのタイトルバーを青色にしておきたい。プロパティシートにはタイトルバーはありません。アクティブなウィンドウ - タイトルバーの青色/灰色の変更を防ぐ方法

C++のWin32APIなしMFC

質問:

1)プロパティシートがアクティブなときに、ダイアログのタイトルバーの青を保つためにいくつかの方法がありますか?

2)プロパティシートに新しいウィンドウクラスを使用し、そのクラスを使用してコントロールをダイアログに追加した場合の動作は異なりますか?

+1

wParam Trueを使用してダイアログに「WM_NCACTIVATE」を送信できますが、アプリケーションがフォーカスを失うとコンサートの外に出ると思います。 –

+0

@Sertac Akyus:ありがとう!私はそれを完璧にすることはできませんが、私はそれをより良くすることができます。 WM_NCACTIVATE TRUEを実行すると、ダイアログが無効になってプロパティシートが優先され、アクティブになったときにかなりうまく機能します。残りのケースは、別のウィンドウがアクティブになってユーザーがマウスクリックでプロパティシートに戻るときです。私はもちろん、主要なプロパティシートのダイアログで悩むことはできません。 –

+0

プロパティシートから追加コールバックがこのようなものにあった場合はいいでしょう。 –

答えて

3

彼の提案でSertac Akyusに感謝します。

プロパティシートのページの1つが、シートがアクティブなときは常にアクティブであるように見えます。私はプロパティシートのメインダイアログをアクティブにすることができませんでした。したがって、ページのダイアログでWM_ACTIVATEメッセージハンドラを使用して、ページがアクティブになるたびにWM_NCACTIVATE TRUEを使用してメインダイアログのタイトルバーを青に設定することができます。メインダイアログでウィンドウをアクティブにしない限り、WMNCACTIVATE FALSEを使用してメインダイアログのタイトルバーをグレーに設定する必要があります。

ここに私が使用したコードがあります。

case WM_ACTIVATE: 
     switch LOWORD(wParam) 
     { 
     case WA_ACTIVE:     // 1 
     case WA_CLICKACTIVE:   // 2 
      SendMessage (hwndContainer,WM_NCACTIVATE,TRUE,NULL); 
      return true; 
     case WA_INACTIVE: 
      if ((HWND) lParam != hwndContainer) 
      { 
       SendMessage (hwndContainer,WM_NCACTIVATE,FALSE,NULL); 
       return true; 
      }; 
     } 
     break; 

hwndContainerは、プロパティシートを含むダイアログのHWNDです。

私の小さなプロパティシートのコピーをダイアログのデモでご希望の場合は、私に電子メールを送ってください。 [email protected]

関連する問題