首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Dialog.DoModel后,怎么知道界面显示完成

2013-01-26 
Dialog.DoModel后,如何知道界面显示完成如题,我需要在界面显示完成后做些事情[解决办法]OnInitDialog中做

Dialog.DoModel后,如何知道界面显示完成
如题,我需要在界面显示完成后做些事情
[解决办法]
OnInitDialog中做对话框最终显示前的初始化工作
[解决办法]
CDialog::OnInitDialog里面:
PostMessage(自定义消息)或者SetTimer
[解决办法]

引用:
引用:CDialog::OnInitDialog里面:
PostMessage(自定义消息)或者SetTimer
发消息能保证是在窗口显示完成后才响应吗?

SetTimer吧,可以根据你的需要延时多少后响应
[解决办法]
OnShowWindow(BOOL bShow,...)
{
if(bShow){ do sth; }
}
[解决办法]
呵呵,还是加个消息判断吧。
[解决办法]
SetTimer()应该可以的
[解决办法]

BOOL CXXXDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  // Set the icon for this dialog.  The framework does this automatically
  //  when the application's main window is not a dialog
  SetIcon(m_hIcon, TRUE);     // Set big icon
  SetIcon(m_hIcon, FALSE);    // Set small icon
  
  // TODO: Add extra initialization here
  ShowWindow(SW_SHOW);
  UpdateWindow();
  
  //这里做在界面显示完成后做的事情 
  
  return TRUE;  // return TRUE  unless you set the focus to a control
}

[解决办法]
IsWindowVisible判断下窗口是否显示了....
[解决办法]
引用:
引用:OnShowWindow(BOOL bShow,...)
{
if(bShow){ do sth; }
}
这个不行。窗口还没显示出来,就已经处理了

这是窗口显示前的最后一个消息了。
这么多人帮你,但都不知道你要做什么处理,你说出来,大家立马就有好办法了。
[解决办法]
timer里判断窗口是不是显示 显示就干活  不显示的话就退出等下一个timer到来...
[解决办法]
楼主的问题,关键不在于“界面已经显示完成”与否,而在于楼主在主线程里执行了一个会中断界面显示的长时间动作

一般来说,不管是在OnInitial还是在OnShow里都可以,因为这些消息几乎是同时处理的
但楼主说在这些函数中处理,会导致“窗口不完整”,那么就可以知道了,楼主必定在这些函数中执行了一个死循环之类的动作,导致主线程卡在了这个函数里,自然也就不能再继续进行消息循环
这个问题的正确解决方法不是找一个“界面显示完成后执行”的函数,因为主线程(窗口线程)的主要功能应该是界面交互。就算你使用settimer等方法,确保窗口完全显示之后执行这个动作,只要这个动作依然占用主线程大量时间,那么你的窗口就依然可能出各种各样的问题——因为你中断了主线程负责的消息循环,而消息循环是绝大多数windows窗口程序必须依赖的东西

热点排行