我正在尝试使用Win32 API在按钮单击事件上打开已打开的记事本应用程序的“打开文件对话框”。这是代码:
void onButonClicked()
{
HWND hWnd = ::FindWindow(NULL, L"Untitled - Notepad");
HMENU hWndMenu = ::GetMenu(hWnd);
HMENU hWndSubMenu = ::GetSubMenu(hWndMenu, 0);
SendMessage(hWnd, WM_COMMAND, GetMenuItemID(hWndSubMenu, 1), 0);
}
这可以正常工作并打开“打开对话框”。但是它冻结了我的应用程序。如果我尝试用鼠标移动应用程序窗口,它将挂起并在标题栏上显示“Not Responding”。我也尝试过在单独的线程中打开此对话框窗口,但是没有运气。如何解决这个问题?
最佳答案
为了防止程序挂起,可以使用 PostMessage
而不是SendMessage
:
PostMessage(hWnd, WM_COMMAND, GetMenuItemID(hWndSubMenu, 1), 0);
您可能需要进一步研究差异:What is the difference between Send Message and Post Message and how these relate to C# ,WPF and Pure windows programming?
关于c++ - Win32 API:打开对话框窗口后应用程序卡住,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31981066/