现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

VC自动关闭弹出的MessageBox对话框的总结

2014-01-06 22:16 工业·编程 ⁄ 共 1932字 ⁄ 字号 暂无评论

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

首先,创建定时器和弹出MessageBox:
void CTestDlg::OnBnClickedButton1() 

    //启动一个定时器,用于自动触发关闭MessageBox对话框 
    SetTimer(1, 1000, NULL); 
 
    //启动一个MessageBox对话框,并检查它的返回值 
    int ret = MessageBox("Hello", "MyMessageBox", MB_YESNO); 
    if (ret == IDYES) 
    { 
        TRACE("按钮【YES】被按下\n"); 
    } 
    else if(ret == IDNO) 
    { 
        TRACE("按钮【NO】被按下\n"); 
    } 

然后,在定时器回调中:
void CTestDlg::OnTimer(UINT_PTR nIDEvent) 

    // TODO: 在此添加消息处理程序代码和/或调用默认值 
    if (nIDEvent == 1) 
    { 
        HANDLE hWnd = ::FindWindowEx(NULL, NULL, NULL, "MyMessageBox"); 
        //HANDLE hWnd = ::GetForegroundWindow(); 
        if (hWnd) 
        { 
            TRACE("发现了MyMessageBox窗口\n"); 
 
 
            // 
            // 第一种方法:直接发送 WM_CLOSE 消息。 
            // 
            ::SendMessage((HWND)hWnd, WM_CLOSE, NULL, NULL); 
 
 
            // 
            // 第二种方法: 
            // 
            ::EndDialog((HWND)hWnd, IDNO); 
 
 
            // 
            // 第三种方法:模拟窗口消息点击了【IDNO】按钮 
            // 
            HWND h = ::GetDlgItem((HWND)hWnd, IDNO); 
            if(h) 
            { 
                TRACE("找到了IDNO控件窗口\n"); 
                ::PostMessage((HWND)hWnd, WM_COMMAND, MAKEWPARAM(IDNO, BN_CLICKED), (LPARAM)h); 
            } 
 
 
            // 
            // 第四种方法:模拟鼠标移到了【IDNO】按钮上点击 
            // 
            HWND h = ::GetDlgItem((HWND)hWnd, IDNO); 
            if(h) 
            { 
                TRACE("找到了IDNO控件窗口\n"); 
                POINT pt; 
                CRect rc; 
                ::GetWindowRect(h, &rc); 
                pt.x = rc.left+10; 
                pt.y = rc.top+10; 
                SetCursorPos(pt.x, pt.y);//鼠标移到了【IDNO】按钮上 
 
                //完成点击 
                mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0); 
                mouse_event(MOUSEEVENTF_LEFTUP|MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0); 
            } 
 
            // 
            // 第五种方法:模拟键盘回车关闭对话框 
            // 
            keybd_event(VK_RETURN, 0, 0,0); 
            keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP,0); 
 
        } 
 
    } 
 
    CDialog::OnTimer(nIDEvent); 

给我留言

留言无头像?