窗口自动关闭

来源:互联网 发布:java写爬虫很复杂吗 编辑:程序博客网 时间:2024/05/23 23:54
在一个对话框上单击按钮,然后弹出一个对话框,在这个对话框上做一些工作,完成之后弹出来的对话框自动关毕。按钮的响应函数:void CDlg1::OnBnClickedButton1(){    int res = 0;    for(int i = 0; i < 1000; i++)    {        for(int j = 0; j < 1000; j++)        {            double d1 = cos(1.28) + sin(3.14) + tan(2.56);            res = res + i;        }    }    CString str;    str.Format(_T("%d"), res);    GetDlgItem(IDC_EDIT1)->SetWindowText(str);    //MessageBox(_T("计算完成"), _T("tip"), MB_OKCANCEL);    //HWND hWnd = ::FindWindow(NULL, _T("CDlg1"));    //if(hWnd != NULL)    //{        // 使用::FindWindow会将弹出来的对话框的标题写死,如果改变标题就找不到窗口,返回的hWnd为NULL        //::PostMessage(hWnd, WM_CREATETIMER, 0, 0);         // 可以采用下面的这种方法,发送消息        ::PostMessage(m_hWnd, WM_CREATETIMER, 0, 0);    //}}CDlg1为单击按钮,弹出来的对话框关联的类,::PostMessage()可以直接将WM_CLOSE发送到CDlg1对话框的窗口上,但是结算的结果也得不到及时的显示就关闭对话框了所以在窗口上响应定时器消息和自定义的消息WM_CREATETIMER用来启动一个定时器,下面是自定义消息有关内容:宏定义必须确保不与其他的ID,或者别的宏相同,这个宏我定义在Resource.h里面#define WM_CREATETIMER                  WM_USER + 8// Dlg1.h文件afx_msg LRESULT OnCreateTimer(WPARAM, LPARAM);// Dlg1.cpp文件LRESULT CDlg1::OnCreateTimer(WPARAM wParam, LPARAM lParam){    SetTimer(0, 1000, NULL);    return 0;}// 响应WM_TIMER,发送WM_CLOSEvoid CDlg1::OnTimer(UINT_PTR nIDEvent){    // TODO: Add your message handler code here and/or call default    //HWND hWnd = ::FindWindow(NULL, _T("CDlg1"));    //if(hWnd != NULL)    //{        //PostMessage(WM_CLOSE);    //}    //此时可以不用FindWindow(),直接发送WM_CLOSE,到本窗口    PostMessage(WM_CLOSE);    CDialogEx::OnTimer(nIDEvent);}至此弹出来的窗口在工作完成之后会自动关闭的。
原创粉丝点击