C++ MFC对话框初始化完成(即所有的控件已经创建完成)后的第一个函数是什么?
可能问题有点说不清楚,意思是:在所有控件都已经创建并初始化完成后。我想要为控件中添加数据,比如说,我要为列表框里面加一行,那么这个AddString()应该写在哪里?就是...
可能问题有点说不清楚,意思是:在所有控件都已经创建并初始化完成后。我想要为控件中添加数据,比如说,我要为列表框里面加一行,那么这个AddString()应该写在哪里?就是说当这个对话框展示给客户的那一瞬间,我要为列表框里面添加一行文本,那么应该在哪个消息响应里面?
展开
5个回答
展开全部
一种情况是加在OnInitDialog或者OnShowWindow里面,效果就是对话框显示出来的时候AddString()动作已经完成了。
另一种情况如果想在对话框显示出来以后延迟一定时间(不知道我有没有理解对)再添加文本,那就要略微复杂一点了,最简单的方法是用定时器,在OnInitDialog或者OnShowWindow里面SetTimer( 1 , 200 , NULL );
然后给对话框添加OnTimer消息,
OnTimer( UINT nIdEvent )
{
if(nIdEvent ==1 )
{
AddString()
KillTimer( 1 );
}
}
这样就实现了显示对话框以后再等200毫秒再添加了一行文本
另一种情况如果想在对话框显示出来以后延迟一定时间(不知道我有没有理解对)再添加文本,那就要略微复杂一点了,最简单的方法是用定时器,在OnInitDialog或者OnShowWindow里面SetTimer( 1 , 200 , NULL );
然后给对话框添加OnTimer消息,
OnTimer( UINT nIdEvent )
{
if(nIdEvent ==1 )
{
AddString()
KillTimer( 1 );
}
}
这样就实现了显示对话框以后再等200毫秒再添加了一行文本
追问
不好意思大神,可能是我没表达清楚,其实是这样,我的意思是逻辑上是先对话框出来,然后AddString(),但是这个肉眼是看不出来的,只是理论上是这样而已,我就是想问这种情况下AddString()应该添加在哪里?是你说的OnShowWindow()吗?
追答
我本来也是以为OnShowWindow可以,但是很遗憾,OnShowWindow发生在显示对话框之前的,也没有PostShowWindow这样的消息,我目前还没有找到这样一个合适的消息。
不过有一个不太完美的东西是OnPaint,确实是在对话框显示出来以后再调用里面的东西的,但是缺点是不光在显示对话框的时候,也会在移动对话框等等情况下调用里面的代码,所以根据实际需求,如果你的addstring确实只需要执行一次并且是在对话框显示的时候执行,那么可以这样做
在onpaint里添加代码
//bShowed初始为false
if( ! bShowed )
{
Addstring()
bShowed = true;
}
展开全部
在OnInitDialog函数里,这个函数在我们的dlg程序中是继承自CDialog并自动加载的,可以做一些界面的配置和初始化工作。请参考。
追问
OnInitDialog()只是对话框刚刚创建出来吧?控件什么的应该还没生成好吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
WM_CREATE消息,或者窗口的initnstance函数中添加即可
追问
WM_CREATE不是对话框刚刚创建出来而已吗?控件什么的应该还没生成好吧?
追答
那你可以去看其他控件是在什么地方写的,在它的后面继续写就OK,一般那些控件的加载就是在Initinstance函数这个里面加载的,先处理的是WM_CREATE消息,然后是Initinstance函数.如果我没有记错的话,你可以直接到对话框的Initinstancve函数中看里面的内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
OnInitDialog 方法 即WM_INITDIALOG 消息的响应函数
追问
OnInitDialog()只是对话框刚刚创建出来吧?控件什么的应该还没生成好吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询