使用Win32编写已简单窗口程序,主函数使用DialogBox弹出模式对话框作为主窗口界面,怎样给这个对话框添加加速键表功能支持。INT_PTR __stdcall DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
case(uMsg)
{
case WM_INITDIALOG:
//do something
return TRUE;
}
return TRUE;
}
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE /* hPrevInstance */,LPSTR lpCmdLine,int nCmdShow)
{
HACCEL hAccel = NULL; hAccel = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR_XX));
//How to use this accelerator table on the modal dialog below.
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_XX),NULL,DlgProc);
return 0;
}
{
case(uMsg)
{
case WM_INITDIALOG:
//do something
return TRUE;
}
return TRUE;
}
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE /* hPrevInstance */,LPSTR lpCmdLine,int nCmdShow)
{
HACCEL hAccel = NULL; hAccel = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR_XX));
//How to use this accelerator table on the modal dialog below.
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_XX),NULL,DlgProc);
return 0;
}
解决方案 »
- 谁有mfcs80.lib这个库函数,发给我一下哈
- 我用VC编写一个与手机通信的程序,假设调试运行,断点设置在软件给手机发送AT命令后手机反馈回相关数据处,此时是不是必须将电脑和手机相连保证能够通信否则软件将不能运行到手机反馈回数据的断点处?
- sprintf 中如何在打印数字时加入逗号,像银行的那种如123,456,789.65
- 关于刷新
- 请教VC++高手,如何启动一个已经编译好的EXE程序。
- 请问如何验证代理服务器?
- 这里大侠多,问大家一个与非技术的问题!高分!
- %SystemRoot%==%WinDir%?
- 想从DELPHI转到VC,各位给个意见(UP有分,不够再给)
- 我想把软件中的用户名密码存储到注册表,应该存在那里?
- 关于xtreme toolkit加入xml支持后出现编译错误的问题!
- 用PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0)输入回车为什么不灵?
hAccel = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR_XX));
//How to use this accelerator table on the modal dialog below.
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_XX),NULL,DlgProc);
这样应该可以吧~~
但是要注意再加载资源时,要注意命名~~~
IDR_ACCELERATOR_XX一定要和加速键资源名称一致~~~
还有调用DialogBox弹出模式对话框过程也一定要注意IDD_DIALOG_XX加载定义的名称和DialogBox函数参数MAKEINTRESOURCE里面的参数名相同~~
1.用一个 WH_MSGFILTER钩子,在钩子函数里调用TranslateAccelerator
2.用非模式对话框,在主消息循环里调用TranslateAccelerator(做为主窗口,模式和非模式对话框效果是一样的)
参见
http://support.microsoft.com/default.aspx?scid=kb;en-us;108936
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
if (hwndDlgModeless == (HWND) NULL ||
!IsDialogMessage(hwndDlgModeless, &msg) &&
!TranslateAccelerator(hwndMain, haccel,
&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}