VC 定时自动关闭MessageBox弹出对话框 (2010-12-15 15:28:06)转载▼

简介: 标签: messagebox vc it 分类: VC/MFCvoid CTestDlg::OnOK(){ // TODO: 在此添加控件通知处理程序代码 SetTimer(NULL,2000,NULL);          //设置一个...

标签: messagebox vc it 分类: VC/MFC
void CTestDlg::OnOK()
{
 // TODO: 在此添加控件通知处理程序代码
 SetTimer(NULL,2000,NULL);          //设置一个定时器,2秒后触发
 MessageBox(_T("aaaaa"),_T("B"),MB_YESNO);   //跳出一个标题为B的窗口
 
}
void CTestDlg::OnTimer(UINT_PTR nIDEvent)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 HWND hWnd=::FindWindow(NULL,_T("B"));   //查找标题为B的窗口,返回窗口句柄
 if (hWnd)   //如果窗口句柄存在
 {
  //::SendMessage(hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL);   //关闭这个窗口,如果Messagebox的对话框没有MB_YESNO或者MB_OKCANCEL这样类似的属性,这个也可以实现关闭
  keybd_event(13,0,0,0); //模拟回车键按下
 }
 KillTimer(nIDEvent);   //关闭定时器
 
 CDialog::OnTimer(nIDEvent);

}



第二套方案




下面的程序从5种方法,关闭弹出的MessageBox对话框:

首先,创建定时器和弹出MessageBox:

[cpp]  view plain  copy
  1. void CTestDlg::OnBnClickedButton1()  
  2. {  
  3.     //启动一个定时器,用于自动触发关闭MessageBox对话框  
  4.     SetTimer(1, 1000, NULL);  
  5.   
  6.     //启动一个MessageBox对话框,并检查它的返回值  
  7.     int ret = MessageBox("Hello""MyMessageBox", MB_YESNO);  
  8.     if (ret == IDYES)  
  9.     {  
  10.         TRACE("按钮【YES】被按下\n");  
  11.     }  
  12.     else if(ret == IDNO)  
  13.     {  
  14.         TRACE("按钮【NO】被按下\n");  
  15.     }  
  16. }  

然后,在定时器回调中:

[cpp]  view plain  copy
  1. void CTestDlg::OnTimer(UINT_PTR nIDEvent)  
  2. {  
  3.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
  4.     if (nIDEvent == 1)  
  5.     {  
  6.         HANDLE hWnd = ::FindWindowEx(NULL, NULL, NULL, "MyMessageBox");  
  7.         //HANDLE hWnd = ::GetForegroundWindow();  
  8.         if (hWnd)  
  9.         {  
  10.             TRACE("发现了MyMessageBox窗口\n");  
  11.   
  12.   
  13.             //  
  14.             // 第一种方法:直接发送 WM_CLOSE 消息。  
  15.             //  
  16.             ::SendMessage((HWND)hWnd, WM_CLOSE, NULL, NULL);  
  17.   
  18.   
  19.             //  
  20.             // 第二种方法:  
  21.             //  
  22.             ::EndDialog((HWND)hWnd, IDNO);  
  23.   
  24.   
  25.             //  
  26.             // 第三种方法:模拟窗口消息点击了【IDNO】按钮  
  27.             //  
  28.             HWND h = ::GetDlgItem((HWND)hWnd, IDNO);  
  29.             if(h)  
  30.             {  
  31.                 TRACE("找到了IDNO控件窗口\n");  
  32.                 ::PostMessage((HWND)hWnd, WM_COMMAND, MAKEWPARAM(IDNO, BN_CLICKED), (LPARAM)h);  
  33.             }  
  34.   
  35.   
  36.             //  
  37.             // 第四种方法:模拟鼠标移到了【IDNO】按钮上点击  
  38.             //  
  39.             HWND h = ::GetDlgItem((HWND)hWnd, IDNO);  
  40.             if(h)  
  41.             {  
  42.                 TRACE("找到了IDNO控件窗口\n");  
  43.                 POINT pt;  
  44.                 CRect rc;  
  45.                 ::GetWindowRect(h, &rc);  
  46.                 pt.x = rc.left+10;  
  47.                 pt.y = rc.top+10;  
  48.                 SetCursorPos(pt.x, pt.y);//鼠标移到了【IDNO】按钮上  
  49.   
  50.                 //完成点击  
  51.                 mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0);  
  52.                 mouse_event(MOUSEEVENTF_LEFTUP|MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0);  
  53.             }  
  54.   
  55.             //  
  56.             // 第五种方法:模拟键盘回车关闭对话框  
  57.             //  
  58.             keybd_event(VK_RETURN, 0, 0,0);  
  59.             keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP,0);  
  60.   
  61.         }  
  62.   
  63.     }  
  64.   
  65.     CDialog::OnTimer(nIDEvent);  
  66. }  


目录
相关文章
|
C++ Windows API
VC创建定时关闭的MessageBox
1、第一种方法:用微软提供的官方文档 From : http://support.microsoft.com/kb/181934/en-us/ Generally, when you want to display a message box for a limited amount ...
1028 0
winform 关于Messagebox自动定时关闭
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.
933 0
|
JavaScript 前端开发
定时自动关闭弹出窗口
1.window对象的setTimeOut方法     window对象的setTimeOut方法用于延迟执行某一操作,其语法是:     SetTimeOut(express,secdelay[,language])     其中express是一个字符串,可包含热呵呵对函数、方法或者单个J...
773 0
|
安全
winform关闭窗口 取消关闭操作
医药遇到一个bug就是 关闭窗口 弹出后点击取消 程序还是结束了 于是百度了一下代码 粘贴上就可以取消 ,然后继续对程序的操作。
983 0
Close2Tray将程序关闭到系统栏
经常使用一些大型软件,每次启动时间很长,但又不是时刻在用,那最好的办法是什么?是把它关闭了,下次重新启动吗?还是最小化到任务栏,让任务栏变得非常挤?来使用Close2Tray看看.把它放在系统栏.
|
5月前
|
安全 Windows
开机自动弹出脱机工作对话框?原来是 Virus.Win32.AutoRun.bv 作怪
开机自动弹出脱机工作对话框?原来是 Virus.Win32.AutoRun.bv 作怪
|
JavaScript 前端开发
关闭IE窗口时执行事件
//关闭窗口时自动退出 function  window.onbeforeunload(){  if(event.clientX>360&&event.clientY
652 0

热门文章

最新文章