防止MDI子窗口切换

Passants 2010-02-02 04:28:26
一个MDI程序,可以有好几个子窗口(childframe),怎样阻止子窗口之间的切换?也就是点击其他子窗口时,被点击的子窗口不会被激活。
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Passants 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fandh 的回复:]
好像可以在onactive里面处理吧
发现不是当前的窗口,那么,就设置当前窗口为active
[/Quote]

似乎不行,我在OnMDIActivate里用SetActiveWindow不起作用。

ChildFrame::OnMDIActivate(BOOL bActivate, CWnd* pActWnd, CWnd* pDeactWnd)
{
if (s_pAlwaysTopWnd)
::SetActiveWindow(s_pAlwaysTopWnd->GetSafeHwnd());
}
jianghandaxue 2010-02-03
  • 打赏
  • 举报
回复
BOOL CatvgisApp::addFrame(int type, CString title, BOOL b_single/* = TRUE*/)
{
// 检查是否已经打开了type相同的窗口,是否正在使用
if(b_single)
{
CMainFrame* mainFrame = (CMainFrame*)GetMainWnd();
CChildFrame* curFrame = NULL;
for(CWnd* wnd = mainFrame->MDIGetActive(); wnd != NULL; wnd = wnd->GetNextWindow())
{
if(wnd->IsKindOf(RUNTIME_CLASS(CChildFrame)))
{
CChildFrame* _cwnd = (CChildFrame*)wnd;
if(_cwnd->type == type)
{
curFrame = _cwnd;
break;
}
}
}
if(curFrame != NULL)
{
curFrame->ActivateFrame(SW_SHOW);
CDocument* doc = curFrame->GetActiveDocument();
if(doc != NULL)
doc->SetTitle(title);
return FALSE;
}
}
}
draculacsdn 2010-02-02
  • 打赏
  • 举报
回复
处理 WM_NCACTIVE 消息
shen_wei 2010-02-02
  • 打赏
  • 举报
回复
这方面没有做过,学习下
fandh 2010-02-02
  • 打赏
  • 举报
回复
好像可以在onactive里面处理吧
发现不是当前的窗口,那么,就设置当前窗口为active

15,979

社区成员

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

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