主窗口中处理模态子窗口的状态

本文介绍了一个项目的主窗口如何处理用户按下CANCEL键的消息。当接收到该消息时,系统需要关闭当前非模态子窗口并显示上一个子窗口。文章详细解释了通过检查当前活动窗口并根据不同情况采取相应操作的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做的项目,主窗口显示一个界面,然后再创建几个非模态窗口显示,如果用户按键盘的一个cancel键,系统会给主窗口发送一个消息,主窗口需要处理这个消息,关闭当前的非模态子窗口,然后显示上一个子窗口,在主窗口的PreTranslateMessage中捕获到了这个消息,然后调用下面的模块进行了处理

定义了一个 cdialog*pDlg指针来保存当前子窗口的句柄,但是子窗口有时候也会弹出模态子窗口,所以有时候不能直接用pDlg来处理。

/// 处理CANCEL键退出消息, 如果是主窗口或者模态窗口,不处理该消息,返回窗体进行处理,只能检查一层调用 pDlg是当前子窗口 BOOL COTP6100_EthernetDlg::OnDialogCancel() { int iButtonCount; CString csButtonText; HWND hActiveParent; /// 获取当前子窗口的句柄 hActiveParent= ::GetWindow( this->GetActiveWindow()->m_hWnd, GW_OWNER); if ( pDlg!=NULL) { /// 子窗口弹出的模态对话框,交由子窗口处理 if ( hActiveParent==pDlg->m_hWnd ) { return FALSE; } } /// 获取按钮菜单最右边的按钮值 iButtonCount = m_tyFunctionButton.m_ButtonInfo.size()-1; csButtonText= m_tyFunctionButton.m_ButtonInfo[iButtonCount]->szButtonName; /// 子窗口处理 if( csButtonText==_T("返回") ) { PerformProgram( iButtonCount-m_tyFunctionButton.bLeftButtonNum ); //(this->*m_tyFunctionButton.m_ButtonInfo[iButtonCount]->FunAddr)(); return TRUE; } /// “功能、系统信息、关于”三个窗口显示时处理 if ( hActiveParent!=NULL ) //主窗体 { if ( csButtonText==_T("关于")) { this->PostMessage( WM_KEYDOWN, VK_HOME, NULL); return TRUE; } } return FALSE; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值