怎么让MessageBox 显示一段时间自己关闭呢

时间:2022-10-08 16:55:52
怎么让MessageBox 显示一段时间自己关闭呢,就是给用户一个提示信息,显示几秒种后 自己关闭呢?

10 个解决方案

#1


通过FindWindow,取到Msg的句柄。
然后PostMessage或SendMessage,发送WM_CLOSE消息。

#2


创建一个线程去显示MessageBox,调用线程的后面等待事件,超时后结束线程。
这样试试。

#3


忘了说Timer了,在MessageBox弹出前启动Timer,设定好时间,再按照我在1楼的描述操作即可。

#4


HWND hd = ::FindWindow(_T("MessageBox"),NULL);
::SendMessage(hd,WM_CLOSE,0,0);

这样对不? 怎么没有效果呢

#5


估计是句柄取的不对。
FindWindow第一个参数,要用Messagebox中的caption字符串。

#6


用caption 也获取不到句柄啊
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);

}

void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0);  
CDialog::OnTimer(nIDEvent);
}

#7


还有一种方法就是自己封装一个DIALOGBOX,也可以实现你想要达到的要求。

#8


引用 6 楼 dangyaofei 的回复:
用caption 也获取不到句柄啊
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);

}

void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0); 
CDialog::OnTimer(nIDEvent);
}


sendmessage()可行么?

#9


楼主先确认,句柄取到没有?

#10


实现了,
HWND hd = ::FindWindow(_T("123"),NULL); 
应该写成这样:
HWND hd = ::FindWindow(NULL,_T("123")); 
然后就好了

#1


通过FindWindow,取到Msg的句柄。
然后PostMessage或SendMessage,发送WM_CLOSE消息。

#2


创建一个线程去显示MessageBox,调用线程的后面等待事件,超时后结束线程。
这样试试。

#3


忘了说Timer了,在MessageBox弹出前启动Timer,设定好时间,再按照我在1楼的描述操作即可。

#4


HWND hd = ::FindWindow(_T("MessageBox"),NULL);
::SendMessage(hd,WM_CLOSE,0,0);

这样对不? 怎么没有效果呢

#5


估计是句柄取的不对。
FindWindow第一个参数,要用Messagebox中的caption字符串。

#6


用caption 也获取不到句柄啊
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);

}

void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0);  
CDialog::OnTimer(nIDEvent);
}

#7


还有一种方法就是自己封装一个DIALOGBOX,也可以实现你想要达到的要求。

#8


引用 6 楼 dangyaofei 的回复:
用caption 也获取不到句柄啊
void CTestMessageDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1,2000,0);
::MessageBox(this->m_hWnd,L"123",L"123",MB_OK);

}

void CTestMessageDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hd = ::FindWindow(_T("123"),NULL);
::PostMessage(hd,WM_CLOSE,0,0); 
CDialog::OnTimer(nIDEvent);
}


sendmessage()可行么?

#9


楼主先确认,句柄取到没有?

#10


实现了,
HWND hd = ::FindWindow(_T("123"),NULL); 
应该写成这样:
HWND hd = ::FindWindow(NULL,_T("123")); 
然后就好了