假如你在按钮事件中调用的是DoModal,那么在DoModal之前,对话框还没有创建,你显然的不到句柄;在DoModal之后,对话框已经销毁,你也显然的不到句柄;在DoModal的过程中,你按钮按下那部分的代码根本就不会执行——因此,根本无从下手,也毫无意义;
如果你是直接Show的(即modeless),那么在对话框销毁之前,MyDlg的成员m_hWnd就是对话框句柄——不过问题有些怪,整个对话框都是在你按钮按下部分弹出的,你却不知从那去找对话框的句柄?莫名其妙,那你的对话框是怎么弹出来的???不如你把你的问题说得更具体一些为好。

解决方案 »

  1.   

    这样吧,我的目的是:在按钮按下时候弹出一个渐渐增大的对话框MyDlg(比如对话框的宽度慢慢增加)
      

  2.   

    这件事不要让父窗口来做,而是让对话框自己来做。
    在InitDialog时设定一个Timer,然后每次Timer时都自己重新加大自己的宽度即可——当大到不想再大时,就KillTimer。
      

  3.   

    也可以这样说,在按钮按下时弹出对话框MyDlg,要求能控制对话框MyDlg的大小和位置,就是要调用SetWindowPos函数,请问如何实现啊?
      

  4.   

    这个用SDK的DialogBoxParam就比较简单,用VC可能要多绕弯子:
    1。在CInfoDlg中加入一个public的CRect型成员变量,例如m_rc;
    2。在主对话框按钮按下时:
      CInfoDlg dlg;
      dlg.m_rc.top = 0;
      dlg.m_rc.left = 0;
      dlg.m_rc.bottom = 100;
      dlg.m_rc.right = 100;    //将这四个数字改成你期望的位置
      dlg.DoModal();
      ...
    3。在CInfoDlg::OnInitDialog中加入:
      ...
      MoveWindow(m_rc, FALSE);
      ...
    总之一句话,对模式对话框的任何操作,归根结底都应该由它自己来完成,因为别人根本无法得到它的句柄。