关于VC的dialog框PreTranslateMessage不响应现象及解决办法
来源:互联网 发布:sg是什么意思网络 编辑:程序博客网 时间:2024/04/28 07:13
1.案例情况:
1)dialog动态生成按钮
CButton* pBtn = new CButton();// 定义按钮
CRect rcBtn(10,10,40, 30); //按钮显示位置长30,高20
pBtn->Create("动态按钮", BS_FLAT, rcBtn, this, nBtnID);//nBtnID自定义,如10000
pBtn->ShowWindow(SW_SHOW);
2)重载DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)响应动态生成按钮
LRESULT C**Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(WM_COMMAND==message)
{
this->SetFocus();//设置父窗体焦点,响应按钮
WORD wID = LOWORD(wParam);
if ( nBtnID==wID)
{
//按键处理代码
GetDlgItem(wID)->EnableWindow(FALSE);//使动态按钮灰色
}
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
3)重载PreTranslateMessage(MSG* pMsg) ,实现对数字按键的反应:
BOOL C**Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg-> message == WM_KEYDOWN)
{
switch(pMsg-> wParam)
{
case VK_RETURN://屏蔽回车
{
OnOK();
return TRUE;
}
case VK_ESCAPE://屏蔽Esc
{
OnCancel();
return TRUE;
}
case VK_NUMPAD1://小键盘上数字
{
AfxMessageBox("1");
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
2.现象:在点击动态生成按钮前,按数字1可以响应,但点击动态生成的按钮后就无法响应,按"esc"也不响应退出;
3.分析:可能是由于dialog窗体内控件获得焦点,而使dialog父窗口失去焦点,导致无法截取到按键信息;
4.处理:在点击动态生成的按钮后,通过this->SetFocus();使dialog父窗口获取焦点,这样就可以响应键盘按键,本案例在DefWindowProc中使dialog父窗口重新获取由于点击内部控件而失去的焦点。
- 关于VC的dialog框PreTranslateMessage不响应现象及解决办法
- pretranslatemessage 不响应
- MFC DLL PreTranslateMessage 导致的快捷键不响应的问题?
- MFC中非模态对话框不响应PreTranslateMessage函数的解决方法
- 关于wxPython中的TextCtrl响应失去焦点事件后不能再次编辑或出现不正常现象的解决办法
- OCX控件响应PreTranslateMessage消息的步骤
- ListActivity的onListItemClick不响应的解决办法
- tabhost里不响应onkeydown的解决办法
- Fragment中onActivityResult不响应的解决办法
- 解决jquery Dialog不响应asp.net事件的问题
- Android的dialog控制焦点导致其后Activity不响应
- Android 关于嵌套listView时onItemClick事件不响应的解决办法
- Android 关于嵌套listView时onItemClick事件不响应的解决办法
- Android 关于嵌套listView时onItemClick事件不响应的解决办法
- Android 关于嵌套listView时onItemClick事件不响应的解决办法
- Android 关于嵌套listView时onItemClick事件不响应的解决办法
- UIButton 不响应或延迟响应 UIControlEventTouchDown 事件的解决办法
- 关于PreTranslateMessage
- 移动表到另一表空间命令
- Android 学习笔记
- web容器中实例化spring相关配置说明
- C#.Net用户自定义控件制作教程
- 图灵七月书讯【Cassandra权威指南将在7月末上市】
- 关于VC的dialog框PreTranslateMessage不响应现象及解决办法
- Redis 安装及配置
- C# 数据访问层
- jQuery插件库
- Android FrameWork——ActivityManager框架
- 在VS2008中使用Qt编程
- android开源项目总结
- 网址收藏
- Spring 配置 ——事务:aop:config切入