如何把资源中的加速键表,加入到基于对话框的程序中?

leng 2000-08-07 04:38:00
如何把资源中的加速键表,加入到基于对话框的程序中?
请指教!
...全文
169 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonyStd 2000-08-13
  • 打赏
  • 举报
回复
在资源里建立 accelerator table
对话框
定义HACCEL m_hAccel;
OnInitDialog里
LPCTSTR acName=MAKEINTRESOURCE(IDR_ACCELERATOR1);
m_hAccel=LoadAccelerators(AfxGetApp()->m_hInstance,acName);
PreTranslateMessage中加入对 WM_KEYDOWN 和 WM_SYSKEYDOWN 的处理 :

if(pMsg->message ==WM_KEYDOWN||pMsg->message ==WM_SYSKEYDOWN)
{
if(TranslateAccelerator(m_hWnd,m_hAccel,pMsg))
return TRUE;
else
return FALSE;
}
that's ok!!!
boyhill 2000-08-08
  • 打赏
  • 举报
回复
我想了一种方法是这么做的!
通过测试

BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_CHAR)
{
switch(pMsg->wParam)
{
case 'a':
case 'A':
CDialog::OnOK();
break;
}
}

return CDialog::PreTranslateMessage(pMsg);
}
xubin_sh 2000-08-08
  • 打赏
  • 举报
回复
首先,模式对话框肯定不行,因为模式对话框有其自己的的消息循环体系,而不用GetMessage/PeekMessage循环。
非模式对话框用IsDialogMessage来派发消息,你可以在GetMessage之后,IsDialogMessage之前,插入TranslateAccelerator,不过我没试过。


leng 2000-08-07
  • 打赏
  • 举报
回复
haitian99兄:
你的方法是乎不行,我也有用LoadAccelerator函数,但我是在OnInitDialog()中用,但也不行!
haitian99 2000-08-07
  • 打赏
  • 举报
回复
1. 在资源编辑器中,Insert Acclerator
2. 在CWinApp::InitInstance()中
调用
HACCEL LoadAccelerators(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpTableName // address of table-name string
);

我想应该是这样,具体没有调试过. 你如果成功了,请告诉我.
hefeng 2000-08-07
  • 打赏
  • 举报
回复
不太懂你的意思,你能再说得详细些吗?

2,586

社区成员

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

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