在一个对话框上单击按钮,然后弹出一个对话框,在这个对话框上做一些工作,完成之后弹出来的对话框自动关毕。
按钮的响应函数:
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);
}
至此弹出来的窗口在工作完成之后会自动关闭的。
窗口自动关闭
最新推荐文章于 2023-10-25 13:48:39 发布