我正在尝试使用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);
您可能需要进一步研究差异:“发送消息”和“发布消息”之间有什么区别,它们与C#,WPF和Pure Windows编程有何关系?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句