0

ダイアログ上にあるコントロール内からダイアログの最小化を決定する方法はありますか?

ダイアログが最小化されたときにON_WM_SIZEType で呼び出されるウィンドウ メッセージを使用しています。SIZE_MINIMIZED

BEGIN_MESSAGE_MAP(CEditT, CEdit)
   ON_WM_SIZE()
END_MESSAGE_MAP()

void CEditT::OnSize(UINT nType, int cx, int cy)
{
   CEdit::OnSize(nType, cx, cy);
   switch(nType)
   {
      case SIZE_MINIMIZED:
         m_backgroundRedraw = TRUE;
   }
}

ただし、ダイアログが最小化されている場合、このメソッドは呼び出されません。コントロールが再び復元されるときに、透明度を使用してコントロールを正しく再描画するために、その最小化を追跡する必要があります。

4

2 に答える 2

0

これはそれほど複雑である必要はありません。ダイアログ レベルで WM_SYSCOMMAND メッセージをトラップする必要があります。そのメッセージは最小化イベントを処理します。次に、そのイベントに応答して、コントロールの公開されたメソッドを呼び出すだけです。

于 2014-10-06T13:38:19.270 に答える
0

最初に、コントロール内から親ダイアログを見つけます

CWnd *parent = GetParent();
HWND hWnd = parent->GetSafeHwnd();  // get its window handle
BOOL dlgMinimized = IsMinimized(hWnd);   // get min. state

API は次のように文書化されています。

BOOL WINAPI IsIconic(
  _In_  HWND hWnd
);

ここを参照してください。

IsMinimized は、windowsx.h で定義されているマクロであり、Microsoft によって文書化されている IsIconic に対応しています。

別の方法をお勧めします。Dialog OnSize() メソッドで SIZE_MAXIMIZED nType をキャッチし、メンバー変数でこの状態を維持します。次に、ダイアログで WM_USER+XXX メッセージ ハンドラーを設定している子から確認して、現在の値で応答することができます。

この時点で、実際に呼び出される子コントロールのコードの一部から SendMessage(WM_USER+XXX,...) を実行して、何らかのタスクを実行できるようにする必要があります。子供との間で送受信されるメッセージを確認するには、spy++ で確認します。

于 2014-10-05T14:55:06.283 に答える