代码改变世界

转:MFC 基于对话的程序界面显示完全后立即执行一个函数

2013-01-13 01:54  youxin  阅读(1325)  评论(0编辑  收藏  举报

基本上网上百度来的,和一些帖子里的讨论都是这两个方案。

1.可以在OnInitDialog最后用SetTimer
然后在onTimer里KillTimer,再执行函数


2.也可以在OnInitDialog最后用PostMessage让对话框响应一个函数去执行

但我认为,前者在时间设定上不好敲定,时间长短没有准确依据,如果CPU很忙,可能很长时界面也没显示出来呢。

后者倒是个好方法。

不过,在哪里PostMessage,也有很多说法。
OnInitDialog
OnPaint
int nResponse = dlg.DoModal();语句之后

这三处,经过我实际测试,只有第一处可行。

其它两个会不断的执行影响函数。当然,我小菜,也不知其所以然,呵呵。

还有一种说法是:

首次响应WM_PAINT:消息后就可以了 
方法建一变量初始化为零(i   =   0;),第一次wm_paint之后加一i++ 
WM_PAINT: 
....; 
if(i==0) 

Func(); 
i++; 

响应WM_PAINT消息 
在   ::OnPaint()函数里执行你的函数,刚刚做了一个,你看看: 
void   CModelDlg::OnPaint()   

CPaintDC   dc(this);   //   device   context   for   painting 
ClickFirstLine();//你的函数 
//   Do   not   call   CDialog::OnPaint()   for   painting   messages 
}


void   CModelDlg::ClickFirstLine() 

.... 
.... 
}