4.02 字符串资源

字符串资源

● 添加字符串资源

添加字符串表,在表中增加字符串

● 字符串资源的使用

  1. int LoadString(
  2. HINSTANCE hInstance, //handle to resource module
  3. UINT uID, //字符串ID
  4. LPTSTR IpBuffer, //存放字符串
  5. BUFF int nBufferMax //字符串BUFF长度
  6. );成功返回字符串长度,失败0
  1. char szTitle[256] = { 0 };
  2. LoadString(hIns,IDS_WND,szTitle,256);

加速键资源

● 添加

资源添加加速键表,增加命令 ID 对应的加速键.

● 使用

加载加速键表

  1. HACCEL LoadAccelerators(
  2. HINSTANCE hInstance, //handle to module
  3. LPCTSTR IpTableName //accelerator table name
  4. );返回加速键表句柄

● 翻译加速键

  1. int TranslateAccelerator(
  2. HWND hWnd, //处理消息的窗☐句柄
  3. HACCEL hAcCTable, //加速键表句柄
  4. LPMSG IpMsg //消息
  5. );如果是加速键,返回非零.
  6. // 执行逻辑
  7. TranslateAccelerator(hWnd,hAccel,&nMsg){
  8. if(nMsg.message!WM_KEYDOWN)
  9. return 0;
  10. 根据nMsg.wParam(键码值),获知哪些按键被按下 // 假设是CTRL+M
  11. 拿着(CTRL+MW)到hAccel(加速键表)中去匹配查找
  12. if(没找到)
  13. return 0;
  14. if(找到){
  15. SendMessage(hWnd,WM_COMMAND,ID_NEW|||1,..); // 因此菜单ID 与 加速键一致 会一同执行
  16. return 1;
  17. }
  18. }
  19. // 一般放在TranslateMessage之前
  20. HACCEL hAccel = LoadAccelerators(hIns,(char*)IDR_ACCELERATOR1);
  21. while(...){
  22. if(!TranslateAccelerator(hWnd,hAccel,&nMsg)){
  23. // 不是加速键 继续翻译
  24. TranslateMessage();
  25. DispatchMessage();
  26. };
  27. }

● 在 COMMAND 中相应消息,消息参数

  • wPARAM:
    • HIWORD 为 1 表示加速键,为 0 表示菜单.
    • LOWORD 为命令 ID.
  • lParam:为 O
  1. // 通过高低字节判断是菜单还是加速键
  2. if(HIWORD(wParam) ==0){
  3. ... 菜单被点击
  4. }