方法一:
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);
}