gpt4 book ai didi

c++ - 为什么这段代码在运行?

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:05 25 4
gpt4 key购买 nike

我写了下面的 WndProc。它由通知图标使用。我删除了不重要的部分(如默认标签)以获得更好的概览。

当我用鼠标右键单击通知图标时,会出现上下文菜单。当我点击一个item时,我得到相应的TrackPopupMenu返回值并打印出来。但是,TrackPopupMenu 是一个阻塞调用,但是 WndProc 在上下文菜单打开时工作正常。为什么?

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
hMenu = CreatePopupMenu();
AppendMenu(hMenu, MF_STRING, ID_TRAY_EXIT_CONTEXT_MENU_ITEM, displayString);
}
break;
case WM_TRAYICON:
switch (lParam)
{
case WM_RBUTTONUP:
{
POINT curPoint;
GetCursorPos(&curPoint);
UINT clicked = TrackPopupMenu(
hMenu,
TPM_RETURNCMD | TPM_NONOTIFY,
curPoint.x,
curPoint.y,
0,
hWnd,
NULL
);

std::cout << std::to_string(clicked) << std::endl;
}
break;
}
std::cout << lParam << std::endl;
break;
}
return 0;
}

最佳答案

因为 TrackPopupMenu 在执行时会发送消息。也就是说,它有一个消息处理循环,该循环调用 DispatchMessage 以获取发布到线程消息队列的任何新消息,而 DispatchMessage 又会调用您的窗口过程来处理要发送的消息每个窗口。

关于c++ - 为什么这段代码在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28406035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com