如果你用MFC, CWnd的m_hWnd成员变量指明了CWnd对象对应的窗口句柄

解决方案 »

  1.   

    兄弟们,其实我的问题是这样的: 点击某按钮,显示一对话框,并使得对话框按预先设定好的尺寸来显示.应如何来用MoveWindow()一定给分 谢谢
      

  2.   

    你也可以使用FindWindow(Ex)或者 EnumWindows来查找窗口句柄.
    普通 Dialog 的窗口类为 "#32770 (Dialog)"EnumWindow 用起来稍微复杂,但很灵活,当调用 EnumWindow 时,操作系统枚举系统中所有的窗口,对每一个窗口都会调用以参数传入的回调函数,并将当前窗口的句柄作为回调函数的一个参数传入,你可以在回调函数中判断是否是你要找的窗口和将其句柄保存下来,回调函数返回 TRUE 时继续枚举, 返回 FALSE 停止枚举...以上的API都可以在 MSDN 中找到详细说明.
      

  3.   

    在对话框消息处理中的WM_INITDIALOG里面调用
      

  4.   

    模式对话框会在CreateDialogIndirect最后调用CenterWindow. CenterWindow的最后一行会以 -1,-1 作为宽高参数调用 SetWindowPos ,所以解决方法之一就是响应 WM_WINDOWPOSCHANGING 消息:
    void CAppDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 
    {
     if (lpwndpos->cx = -1)
     if (lpwndpos->cy = -1) // 正在初始化
     {
      lpwndpos->x = 0; // 改变到你想要得坐标
      lpwndpos->y = 0; 
    // 或者大小
      lpwndpos->cx = 100; 
      lpwndpos->cy = 100; 
     }
     CDialog::OnWindowPosChanging(lpwndpos);
    }Enjoy!
      

  5.   

    Anaki(九天) 兄弟你这样做效果跟在oninitdialog()中调用movewindow()差不多但我想要在视图类的一个消息函数中来显示对话框.类似代码是:CDibDlg dlg;dlg.domodal() ,现在我将视图的类成员变量rect传给dlg.movewindow(..)movewindow()是我自己加的,其内调用的是MoveWindow()关注
      

  6.   

    如果你的代码像这样:
    void CxxView::OnXXX(...) // 某个消息响应
    {
    CDibDlg dlg;
    dlg.domodal(); ...
    dlg.moveWindow(rect); // moveWindow 为自定义函数,其中调用 CDialog 的 MoveWindow, 参数 rect 指明位置
    ...
    }是无法达到你要的目的的, 因为在模式对话框结束之前, 即 dlg.domodal() 语句执行完之前,是不会执行它后面的语句的.如果代码类似这样:
    ...
    CDibDlg dlg;
    dlg.moveWindow(rect); // moveWindow 为自定义函数,其中调用 CDialog 的 MoveWindow, 参数 rect 指明位置
    dlg.domodal();
    ...
    我估计会报错,因为CDialog 的 MoveWindow需要使用到窗口句柄,而在dlg.domodal()之前dlg的窗口句柄是无效的解决方法之一是
    CDibDlg dlg;
    dlg.m_rcInit = rect; // m_rcInit是保存初始化位置的CRect或者RECT
    然后在 OnInitDialog 中 CDialog::OnInitDialog 语句之后调用MoveWindow(...)
      

  7.   

    对了,你确定可以在模式对话框的 OnInitDialog 函数中 MoveWindow 成功吗?奇怪了,呵呵...