4.02 字符串资源
字符串资源
● 添加字符串资源
添加字符串表,在表中增加字符串
● 字符串资源的使用
int LoadString(
HINSTANCE hInstance, //handle to resource module
UINT uID, //字符串ID
LPTSTR IpBuffer, //存放字符串
BUFF int nBufferMax //字符串BUFF长度
);成功返回字符串长度,失败0
char szTitle[256] = { 0 };
LoadString(hIns,IDS_WND,szTitle,256);
加速键资源
● 添加
资源添加加速键表,增加命令 ID 对应的加速键.
● 使用
加载加速键表
HACCEL LoadAccelerators(
HINSTANCE hInstance, //handle to module
LPCTSTR IpTableName //accelerator table name
);返回加速键表句柄
● 翻译加速键
int TranslateAccelerator(
HWND hWnd, //处理消息的窗☐句柄
HACCEL hAcCTable, //加速键表句柄
LPMSG IpMsg //消息
);如果是加速键,返回非零.
// 执行逻辑
TranslateAccelerator(hWnd,hAccel,&nMsg){
if(nMsg.message!WM_KEYDOWN)
return 0;
根据nMsg.wParam(键码值),获知哪些按键被按下 // 假设是CTRL+M
拿着(CTRL+MW)到hAccel(加速键表)中去匹配查找
if(没找到)
return 0;
if(找到){
SendMessage(hWnd,WM_COMMAND,ID_NEW|||1,..); // 因此菜单ID 与 加速键一致 会一同执行
return 1;
}
}
// 一般放在TranslateMessage之前
HACCEL hAccel = LoadAccelerators(hIns,(char*)IDR_ACCELERATOR1);
while(...){
if(!TranslateAccelerator(hWnd,hAccel,&nMsg)){
// 不是加速键 继续翻译
TranslateMessage();
DispatchMessage();
};
}
● 在 COMMAND 中相应消息,消息参数
- wPARAM:
- HIWORD 为 1 表示加速键,为 0 表示菜单.
- LOWORD 为命令 ID.
- lParam:为 O
// 通过高低字节判断是菜单还是加速键
if(HIWORD(wParam) ==0){
... 菜单被点击
}