VC里有没有这样的实现?

qybao 2004-04-08 05:48:38
在Delphi或VB等都有这样的事件,就是窗体刚好显示完时触发的事件,一般为form_active事件(不是form_load或form_create),请问vc里如何实现?我现在希望我的对话框刚好显示出来时做一些事情,因为在OnInitDialog()做会出错的,出错的原因很简单,就是窗体还没显示,希望高手指教,谢谢!
...全文
88 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsgt 2004-04-09
  • 打赏
  • 举报
回复
??

在OnInitDIalog里面取得子控件的RECT怎么会是无效的?
除非你在OnInitDialog里面的CDialog::OnInitDialog前面去取。

对话框的OnInitDialog必须执行基类的OnInitDialog,而这个基类的OnInitDialog恰好就要初始化所有的子控件。所以基类的OnInitDialog执行之后,所有的子控件都已经初始化完毕了。(除了那些你在之后动态Create出来的),那这时候访问子控件都没问题,因为子控件此时都已经被实例化而且初始化过了。


在OnPaint里面作也可以,只是凭空多用一个变量
在OnSize里头更不行了,OnSize第一次被调用的时候,所有的子控件根本没有创建。不过实在要在这里弄,也可以加上if(IsWindow(GetDlgItem(IDC_BUTTON))然后取值。这个方法我有用过,不过是在需要在OnSize里面调整子控件大小的时候。
checkyvc6 2004-04-09
  • 打赏
  • 举报
回复
我想得到对话框以及所有控件的rect,但如果在OnInitialDialog方法里,取出的结果都是0
this->GetWindowRect(rect);

那时肯定的了
YunLion(静静的想) 的方法虽然说有点别扭,但是我经常用,呵呵,现在还想不出其他的好办法
YunLion 2004-04-08
  • 打赏
  • 举报
回复
要不在OnPaint函数里面做这些看看。
void CMyDlg::OnPaint()
{
static bFirstTime=1;
if(bFirstTime)
{
.....
bFirstTime=0;
}
smallbull 2004-04-08
  • 打赏
  • 举报
回复
用OnInitDialog()应该不会出错,实际上这时候对话框已经显示了,你什么地方搞错了,检查一下。
qybao 2004-04-08
  • 打赏
  • 举报
回复
我想得到对话框以及所有控件的rect,但如果在OnInitialDialog方法里,取出的结果都是0
this->GetWindowRect(rect);
是不是还有什么其他的解决方法?
checkyvc6 2004-04-08
  • 打赏
  • 举报
回复
如果在对话框里面的话,用OnSize可以
zjg751206 2004-04-08
  • 打赏
  • 举报
回复
vc
也有onactive事件啊。你在类向导里看。估计楼主是要操作控件吧??
那么写在OnInitialDialog也可以。但是最好加上一个
if判断。因为句柄常常为空。
比如m_button为按钮的成员变量。那么可以加上
if(m_button)m_button.什么什么的就不会有错了。其实如果你写对了写在
OnInitialDialog是完全可以的。
szclm 2004-04-08
  • 打赏
  • 举报
回复
楼上说得对CDialog::OnInitialDialog()已经是所有控制初始后才运行的啦~

写出错误来看看~
lsgt 2004-04-08
  • 打赏
  • 举报
回复
OnInitDialog里头在CDialog::OnInitialDialog之后对话框已经建立了,所有的子控件也都已经可用,显不显示有什么关系?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧