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);
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值