如何将无模式对话框设为不激活状态,同时不响应关闭按钮?

NewFree 2003-10-08 10:15:27
如何将无模式对话框设为不激活状态,同时不响应关闭按钮?
我试过将资源中属性"Disable"选上,但那样就屏蔽了鼠标和WM_KEYDOWN消息,我又希望能响应消息,只不过不激活和不响应关闭按钮,我该怎摸办?
...全文
155 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewFree 2003-10-20
  • 打赏
  • 举报
回复
谢谢!,结帖
awant2k 2003-10-19
  • 打赏
  • 举报
回复
我已经测试成功的

case WM_ACTIVATE:
{
BOOL fActive = LOWORD(wParam);
fMinimized = (BOOL) HIWORD(wParam);
HWND hwndPrevious = (HWND) lParam;
// m_hWndMyDialog 为 无模式对话框的hWnd
if(fActive != WA_INACTIVE &&
hwndPrevious &&
hwndPrevious != m_hWndMyDialog)
{
PostMessage(hwndPrevious,WM_ACTIVATE,WPARAM(wParam),
LPARAM(hwndPrevious) );
return 0;
}
}
break;
我已经测试成功的
awant2k 2003-10-19
  • 打赏
  • 举报
回复

case WM_ACTIVATE:
return TRUE;
改为:

case WM_ACTIVATE:
{
BOOL fActive = LOWORD(wParam);
fMinimized = (BOOL) HIWORD(wParam);
HWND hwndPrevious = (HWND) lParam;
// m_hWndMyDialog 为 无模式对话框的hWnd
if(fActive != WA_INACTIVE &&
hwndPrevious &&
hwndPrevious == m_hWndMyDialog)
{
PostMessage(hwndPrevious,WM_ACTIVATE,MAKEWPARAM(0,WA_INACTIVE),
LPARAM(hwndPrevious) );
return 0;
}
}
break;

// case WM_NCACTIVATE:
// if((fActive = LOWORD(wParam))!=FALSE)
// return TRUE;
// break;

参考:
WM_ACTIVATE
The WM_ACTIVATE message is sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated. If the windows use different input queues, the message is sent asynchronously, so the window is activated immediately.

WM_ACTIVATE
fActive = LOWORD(wParam); // activation flag
fMinimized = (BOOL) HIWORD(wParam); // minimized flag
hwndPrevious = (HWND) lParam; // window handle

Parameters
fActive
Value of the low-order word of wParam. Specifies whether the window is being activated or deactivated. This parameter can be one of the following values. Value Meaning
WA_ACTIVE Activated by some method other than a mouse click (for example, by a call to the SetActiveWindow function or by use of the keyboard interface to select the window).
WA_CLICKACTIVE Activated by a mouse click.
WA_INACTIVE Deactivated.


fMinimized
Value of the high-order word of wParam. Specifies the minimized state of the window being activated or deactivated. A nonzero value indicates the window is minimized.
hwndPrevious
Value of lParam. Handle to the window being activated or deactivated, depending on the value of the fActive parameter. If the value of fActive is WA_INACTIVE, hwndPrevious is the handle to the window being activated. If the value of fActive is WA_ACTIVE or WA_CLICKACTIVE, hwndPrevious is the handle to the window being deactivated. This handle can be NULL.
Return Values
If an application processes this message, it should return zero.

NewFree 2003-10-15
  • 打赏
  • 举报
回复
怎么没人回答了呢?
NewFree 2003-10-13
  • 打赏
  • 举报
回复
awant2k(一点通) :

WM_CLOSE按上述方法是有效的,但WM_ACTIVATE按照上面的方法没有效果呀!
NewFree 2003-10-10
  • 打赏
  • 举报
回复
谢谢提示,thanks!
awant2k 2003-10-08
  • 打赏
  • 举报
回复
在 WindowProc 中过滤 WM_ACTIVATE 和 WM_CLOSE

LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{

switch(uMsg)
{
case WM_ACTIVATE:
return TRUE;
......
case WM_CLOSE
{
if(!m_bAllowClose) // 用来是否允许关闭,自己定义
return TRUE;
......
}

}
........
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧