WM_COMMAND 和 WM_LBUTTONDOWN 的区别
INT_PTR CALLBACK DialogProc(HWND hwndDlog, UINT uMsg, WPARAM wParam, LPARAM lparam) {//消息回调函数 switch (uMsg) { case WM_COMMAND: if (LOWORD(wParam) == IDOK) { float left1 = GetDlgItemFlaot(hwndDlog, IDC_LEFT1); float right1 = GetDlgItemFlaot(hwndDlog, IDC_RIGHT1); SetDlgItemFloat(hwndDlog, IDC_RESULT1, left1 + right1); }
if (LOWORD(wParam) == IDCANCEL) { EndDialog(hwndDlog, IDCANCEL); } break; } return FALUSE; }
WM_COMMAND: 来自菜单项,按钮控件或者快捷键等等。
在这里也就是为了接收在页面当中的操作带来的消息,,即解析并匹配出相同的消息并执行对应的操作.
INT_PTR CALLBACK msgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: SetWindowText(hwnd, "简单的"); break; case WM_CLOSE: EndDialog(hwnd, WM_CLOSE); break; case WM_LBUTTONDOWN: { char s[256]; int x = LOWORD(lParam); int y = HIWORD(lParam); sprintf(s, "鼠标左键点击:x:%d,y:%d", x, y); SetWindowText(hwnd, s); } break; } return FALSE; }
这里由于鼠标左键按下而对应的WM_LBUTTONDOWN消息则不属于WM_COMMAND所包含的内容范畴。
可以这样理解,当按下一个确定按钮, 由于这个按钮有对应的ID,所以在响应的时候会到WM_COMMAND中寻找对应的ID产生的消息。
但是当点击鼠标,或者键盘的时候,没有ID与它对应,但是响应的有事件与此对应, 即WM_LBUTTONDOWN。