MFC 中线程中弹出提示框,直到确认才会消失。
时间: 2024-09-23 08:15:21 浏览: 52
在MFC (Microsoft Foundation Classes) 的环境中,如果你想在一个新创建的线程中显示一个消息框,并阻塞主线程直到用户点击确认按钮,可以使用`AfxMessageBox`函数配合`WaitMessage()`函数来实现。以下是一个简单的步骤:
1. 首先,在新线程中调用`AfxBeginThread`启动一个新的线程并传递一个成员函数指针作为线程入口点,这个函数通常会包含消息框的显示:
```cpp
afxThread t(__this_thread); // 使用当前窗口句柄
t.Run(threadFunction); // 线程函数示例
```
2. 线程函数`threadFunction`内,调用`AfxMessageBox`展示消息框,并设置标志表示需要等待确认:
```cpp
void threadFunction(LPVOID lpParam)
{
if (lpParam)
{
CDialog dialog(IDD_YOUR_DIALOG_ID);
dialog.DoModal(); // 显示对话框
// 如果需要等待确认,添加以下代码
MSG msg;
while (::PeekMessage(&msg, NULL, WM_USER + 1, WM_USER + 1, PM_REMOVE))
::TranslateMessage(&msg);
::PostQuitMessage(0); // 退出线程
}
}
```
这里假设IDD_YOUR_DIALOG_ID是你想要使用的对话框资源ID。
3. 在主线程的`OnIdle`、`OnCommand`等消息处理函数中检查是否有退出线程的消息 (`WM_QUIT`),然后调用`AfxEndThread`关闭线程:
```cpp
if (IsDebuggerPresent())
{
MSG msg;
while (:: PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
// 检查是否有退出线程的信号
if (msg.message == WM_QUIT)
break;
}
AfxEndThread(0); // 关闭线程
}
```
阅读全文