在基于属性页的应用程序中,如何截获ESC和ENTER,使程序不被关闭。
各种方法我都试过了,都不行。
如:
处理CPropertySheet:OnSysCommand( UINT nID, LPARAM lParam )
屏蔽CPropertyPage:OnCancel() 、OnOK()
在某一页面有工作线程,我不想用户按ESC或ENTER退出程序。
但是按ESC或ENTER时,
CPropertySheet:OnSysCommand( UINT nID, LPARAM lParam )
并未触发。(SC_CLOSE)
我重载CPropertyPage:OnCancel() 、OnOK()也不行。
我该如何做?
问题点数:20、回复次数:8Top
1 楼youli(蓝兔子)回复于 2001-01-10 17:39:00 得分 0
看似容易,
请大家快来帮忙!Top
2 楼danial(孤鸿)回复于 2001-01-10 17:47:00 得分 0
在OnCommand中截获你WM_DESTROY消息Top
3 楼youli(蓝兔子)回复于 2001-01-10 18:05:00 得分 0
屏蔽CPropertyPage:OnCancel() 、OnOK(),可它还是向它的父窗口CPropertySheet发送
WM_DESTROY,处理OnDestroy()不能阻止关闭窗口。
我如何才能使按ESC或ENTER不向CPropertySheet发送WM_DESTROY关闭程序。Top
4 楼xiner(叉叉)回复于 2001-01-10 18:24:00 得分 0
PEEKMESSAGE();Top
5 楼Robert2001(Robert2001)回复于 2001-01-11 02:52:00 得分 0
用HOOK
靠 这招真他妈的烂
Top
6 楼vcmfc(【痛苦的虫虫】)回复于 2001-01-11 09:35:00 得分 10
以下这招对点击关闭按钮无效,不过还是可以阻止按ESC或ENTER,代码如下:
BOOL CMyPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
int nCode = HIWORD(wParam);
if(nCode==0)
return true;
return CPropertySheet::OnCommand(wParam, lParam);
}
Top
7 楼wishyouluck(common)回复于 2001-01-11 09:57:00 得分 10
可以试一试OVERRIDE CPropertySheet::PreTranslateMessage(MSG *pmsg):
当 pmsg->message==wm_keydown 时判断是不是,
pmsg->wparam==vk_return || pmsg->wparam==vk_escape
在判断是不是你要屏蔽ESC和ENTER的页面,如果是就直接RETURN,相当于把消息拦截.
不过,我没有试过.只是个建议.Top
8 楼youli(蓝兔子)回复于 2001-01-11 10:00:00 得分 0
to:vcmfc
这样可以解决。一会儿就给你加分。
不过我还是有点疑惑,CPropertyPage:OnCancel() 、OnOK(),都对CPropertySheet作了些什么,即使屏蔽掉,ESC、ENTER还是要关闭CPropertySheet。
按ESC、ENTER,MFC到底都做了些什么。Top




