有否办法禁止窗口响应CTRL+F4,当然是CMDIChildWnd,不能在里面控制,需要通过修改其属性或者其他方法实现

ForApply 2002-03-04 06:25:14
有否办法禁止窗口响应CTRL+F4,当然是CMDIChildWnd,不能在里面控制,需要通过修改其属性或者其他方法实现
...全文
48 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForApply 2002-03-05
  • 打赏
  • 举报
回复
仅能在app中间控制
不能在mainframe,因为他得不到
还有最后这个将执行OnSysCommand
但是键盘消息并没有转换成WM_SYSCOMMAND
好象是直接调用的(OnSysCommand是window基类中定义的消息映射)

yj_3000 2002-03-05
  • 打赏
  • 举报
回复
用SPY++跟踪程序在按ALT+F4后收到的一个消息,好像是SY什么的
在MainFrame里响应她,然后什么也不作,这样可以的,我在对话框程序理成功过
ForApply 2002-03-04
  • 打赏
  • 举报
回复
我用hook键盘当然是可以呀,除了这个方法外也可以截获CWinApp的keydown和keyup,但是这种方法实现起来是非常不自然的,使得程序相关性非常强,所以我不准备用,我是想知道有没有办法直接控制窗口的属性,以达到禁止的目的,静态的方法比较好,就是在创建窗口后限制部分的特性。而不用截获。

btw:ctrl+F4是关闭视图用的,准确的来说接收WM_LBUTTONUP和WM_LBUTTONDOWN消息的是直接发送到激活的视图,然后调用childframe的WM_SYSCOMMAND

fireseed 2002-03-04
  • 打赏
  • 举报
回复
方法如下:
先创建一个DLL,添加下面的代码

extern "C" __declspec(dllexport) LRESULT KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if((wParam==VK_F4) && (( lParam | 0x20000000 ) == lParam))
return 1;
return 0;
}

再在你的CWinApp的InitInstance()函数中添加:
HHOOK hook;
HMODULE hmod;
HOOKPROC pFunc;
hmod=::LoadLibrary("刚作的DLL全路径");
pFunc=(HOOKPROC)::GetProcAddress(hmod,"KeyboardProc");
hook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,pFunc,hmod,0);
FreeLibrary(hmod);
最后别忘了在CWinApp的析构函数中添
UnhookWindowsHookEx(hook);
好了,你的要求达到了!快给分吧
fireseed 2002-03-04
  • 打赏
  • 举报
回复
CTRL+F4是什么呀?是Alt+F4吧?
试试键盘钩子

1,649

社区成员

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

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