0

有没有办法从对话框上的控件中确定对话框的最小化?

我正在使用当对话框最小化时ON_WM_SIZE应该使用 Type 调用的窗口消息。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 消息处理程序的子项中检查它,以使用当前值进行响应。

此时,您需要从子控件中实际被调用的部分代码中发送消息(WM_USER+XXX,...),以便它可以执行某些任务。要查看向孩子发送/从孩子发送的消息,我会使用 spy++ 进行检查。

于 2014-10-05T14:55:06.283 回答