SendMessage() 和 PostMessage() 正确用法
SendMessage() and PostMessage() proper usage
我在正确使用SendMessage()和PostMessage()时遇到了问题。我正在尝试做的事情是在我的窗口过程中SendMessage(hWnd, WM_USER + 1, 0, 0);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case WM_CREATE:
break;
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case WM_USER:
break;
case WM_USER + 1:
break;
default:
if (grid.ProcessEvent(wmId, wmEvent))
{
SendMessage(hWnd, WM_USER + 1, 0, 0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
我真的不确定为什么它不起作用,也许有人可以帮忙。我确定SendMessage(...)被调用,但它不会影响使用我的参数运行WndProc。
案例标签case WM_USER + 1:
嵌套在内部案例语句中(打开wmId
)。 它需要移出到 switch (message)
case 语句中,因此它与 case WM_COMMAND:
和 case WM_DESTROY:
处于同一嵌套级别。
以上也适用于case WM_USER:
。
SendMessage 被指定为在接收方窗口处理完消息之前不返回 - 它无法执行此操作,因为您在自己的 WndProc 中并自己发送消息。这是您应该使用PostMessage的情况之一。
相关文章:
- 这个指针在c++中的用法
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- 省略号在C++中的所有用法
- () 在 C++ 11 中的特殊而奇怪的用法?
- 构造函数的用法
- 模板类中自动的类用法不完整
- 这里的 = 运算符有什么用法?
- 什么模板用法在阶乘中更好
- 如果可变长度元素的constexpr用法得到<>
- 为什么 setjmp/longjmp 的这种用法是未定义的行为?
- SendMessage 使用 RegisterWindowMessage API 失败
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 中函数中 Const 用法之间的差异
- equal_to模板类C++用法
- PCL 中的 GICP 用法
- SendMessage() 和 PostMessage() 正确用法