MFC对话框利用空闲时间的方法

方法一:

1,
BOOL CMFC_3DSphereApp::InitInstance()
{
 ...

 //////CMFC_3DSphereDlg dlg;
 //////m_pMainWnd = &dlg;
 //////INT_PTR nResponse = dlg.DoModal();
 //////if (nResponse == IDOK)
 //////{
 ////// // TODO: 在此处放置处理何时用“确定”来关闭
 ////// //  对话框的代码
 //////}
 //////else if (nResponse == IDCANCEL)
 //////{
 ////// // TODO: 在此放置处理何时用“取消”来关闭
 ////// //  对话框的代码
 //////}

 //////// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
 ////////  而不是启动应用程序的消息泵。
 //////return FALSE;

 static CMFC_3DSphereDlg dlg;
 dlg.Create(IDD_MFC_3DSPHERE_DIALOG,   NULL);  //IDD_MFC_3DSPHERE_DIALOG是程序主对话框ID
 m_pMainWnd = &dlg;
 return TRUE;
}
2,
AfxGetApp()->PostThreadMessage(WM_QUIT,   0,   0);
3,
#define ID_RENDER     1007
ON_COMMAND(ID_RENDER, OnRender)
4,
BOOL CMFC_3DSphereApp::OnIdle(LONG lCount)
{
 // TODO: 在此添加专用代码和/或调用基类
 /*lCount表示上次有消息和下次有消息之间
 OnIdle被调用的次数
 返回值真则再产生一个空闲消息,
 返回值假则退出
 CWinApp::OnIdle(lCount);
 /*
 OnIdle要处理完才会进行下一个消息
 所以把要处理的功能通过消息机制外包出去
 */
 m_pMainWnd->SendMessage(WM_COMMAND, ID_RENDER);
 return true;
 //(InvalidateRect的消息会被忽略,所以一直返回真)
}
5,
void CMFC_3DSphereDlg::OnRender()
{
 CRect rect(0,0,1,1);
 InvalidateRect(&rect);
}

 

方法二:
1,
dlg.cpp 包含#include <afxpriv.h>

2,
dlg.h
声明
afx_msg LRESULT OnKickIdle(WPARAM wParam, LPARAM ICount);
void OnRender();

3,
#define ID_RENDER     1007
ON_MESSAGE(WM_KICKIDLE , OnKickIdle)
ON_COMMAND(ID_RENDER, OnRender)   

4,
LRESULT CMFC_3DSphereDlg::OnKickIdle(WPARAM wParam, LPARAM ICount)
{
/*
 OnKickIdle要处理完才会进行下一个消息
 所以把要处理的功能通过消息机制外包出去
 */
 SendMessage(WM_COMMAND,IDC_RENDER);
 return 1;
}

5,
void CMFC_3DSphereDlg::OnRender()
{
 CRect rect(0,0,1,1);
 InvalidateRect(&rect);
}

你可能感兴趣的:(command,null,mfc,dialog)