窗口自动关闭

在一个对话框上单击按钮,然后弹出一个对话框,在这个对话框上做一些工作,完成之后弹出来的对话框自动关毕。
按钮的响应函数:
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_CLOSE
void 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);
}

至此弹出来的窗口在工作完成之后会自动关闭的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值