WM_COMMAND

  1. WM_COMMAND命令使用范围比较广泛
  2. 本章主要详注WM_COMMAND的多种用途

响应菜单

  1. HIWORD(wParam) == 0表示按键消息
  2. LOWORD(wParam) 记录了菜单选项的ID
case WM_COMMAND:
{
    int wmId = LOWORD(wParam);
    if (HIWORD(wParam) == 0) {//确定是菜单消息
    
        switch (wmId)//匹配是哪一个菜单选项,btn也是用这个方法匹配
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        case ID_OPEN_FILE:
            cb_openfile(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
    }
}
break;

响应Accelerators

  1. WM_COMMAND 可用于响应Accelerators设置的监控记录
  2. 需要LoadAccelerators提前声明才行

/*
程序开始处
声明使用某个Accelerators表
*/
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));

/*
捕获LoadAccelerators
HIWORD(wParam) == 1 :表示该消息时 按键消息
LOWORD(wParam) == ID_SELECTALL :表示与Accelerators中的记录ID_SELECTALL 匹配
*/
case WM_COMMAND:
{
    int wmId = LOWORD(wParam);
    if (HIWORD(wParam) == 1 && LOWORD(wParam) == ID_SELECTALL) {
    SendMessageA(hEditWnd, EM_SETSEL, 0,-1);
    }
}
break;

响应特定window的更改操作

  1. 有时候我们需要相应window变动的操作
  2. 比如 edit属性的windows内容更改了
  3. 为了区别多个edit window,我们需要给每个editwindow设置独有的windoid
  4. HIWORD(wParam) == EN_CHANGE 表示这是个window更改消息
  5. LOWORD(wParam) 获取window的id
#define ID_EDITCHILD 1234

/*
我们首先要在 window创建的时候指定windowid
*/
  RECT rc;
  GetClientRect(hWnd, &rc);
  
    //创建edit窗口
  hEditWnd = CreateWindowA((LPCSTR)"Edit",
    NULL,
    WS_CHILDWINDOW | WS_VISIBLE | WS_VSCROLL | 
    ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
    0,
    0,
    rc.right - rc.left,
    rc.bottom - rc.top,
    hWnd,
    (HMENU)ID_EDITCHILD, //这里就是设置windowid的地方
    hinstance,
    NULL);


/*
捕获特定窗口的 change消息
*/
  case WM_COMMAND:
{
if (HIWORD(wParam) == EN_CHANGE && LOWORD(wParam) == ID_EDITCHILD){
    HWND hCurEdit = (HWND)lParam;
    char szBuf[256] = { 0 };
    SendMessageA(hEditWnd, WM_GETTEXT, 256,
      (LPARAM)szBuf);
    OutputDebugStringA(szBuf);
  }
}
break;
Last modification:October 26, 2018
如果觉得我的文章对你有用,请随意赞赏