c++ - Win32 API : App Freezes after opening dialog window

标签 c++ winapi

我正在尝试使用 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);
}

这工作正常并打开“打开对话框”。但它卡住了我的应用程序。如果我尝试用鼠标移动我的应用程序窗口,它会挂起并在标题栏上显示“无响应”。我也试过在一个单独的线程中打开这个对话框窗口,但没有成功。如何解决这个问题?

最佳答案

您向我们展示的代码看起来像是您想要控制记事本: 它阻塞的原因很简单。 SendMessage 将 WM_COMMAND 消息发送到 NOTEPAD 并等待它被处理。 Notpad 本身接收 WM_COMMAND 消息并显示文件打开对话框并等待用户输入。

这一切都是在 WM_COMMAND 消息的处理中完成的,SendMessage 只会在处理完成后返回。因此,要么用户中止对话框,要么他选择一个文件并打开该文件。

PS:你的问题不够详细,你到底想做什么。

关于c++ - Win32 API : App Freezes after opening dialog window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981066/

相关文章:

c++ - 绘制折线会产生像素化线

php - 如何在 PHP 和 C++ 之间建立通信?

C++ Boost 等待无法识别

c++ - 从单独的函数更改 QVector 变量

winapi - 监视虚拟内存区域 (Win32)

c# - 复制文件Ex "The parameter is invalid"错误

c++ - CORBA 中的编码异常

c++ - 读取指向函数中的变量时出现段错误

c++ - winapi编程中工具栏自定义图标的使用方法

c - Win32 API : process WM_* in tab control's wndproc instead of parent's