从cfiledialog继承了一个类,在oninitdialog中用setwindowpos改变了窗口大小,但是改变的是整个界面的大小,我现在想做的是改变中间选项框的大小,就是包含可选择的所有文件的框,请高手多多指教啊,感激不尽

解决方案 »

  1.   

    GetDlgItem获取控件句柄, 然后setwindowpos
      

  2.   

    CFileDialog的构造函数没有给我们提供改变大小的参数,但是可以再获取这个窗口句柄之后,SetWindowPos/MoveWindow改变大小
      

  3.   

    在对话框类里用GetDlgItem(ID)获得该控件的句柄,让后用MoveWindow()去改变控件大小。GetDlgItem(IDC_BUTTON1)->MoveWindow(CRect rc);IDC_BUTTON1为你控件的ID。
      

  4.   

    我用spy++查看中间那个控件的ID是00000001,那么,我是不是应该在cfiledialog类的派生类的oninitdialog中用GetDlgItem(1)->MoveWindow(CRect rc);
    可是参考这个文章
    http://msdn.microsoft.com/zh-cn/magazine/cc301466(en-us).aspx
    应该用
    GetParent()->GetDlgItem(lst2)->GetDlgItem(1)->MoveWindow(CRect rc);
    可是此时获取的GetParent()->GetDlgItem(lst2)为空,必须要在对话框初始化之后才有值,而oninitdialog是在domodal后才调用的,而domodal是模态对话框,在它显示的时候不能做其他操作,那么也就不可以movewindow()
    很纠结
    可能我的表达不清楚,总之就是多多指教,多多帮忙啦,谢各位啦
      

  5.   

    弹颜色对话框CColorDialog,指定大小和初始弹出的位置以及窗口标题
    CColorDialog dlg;
    dlg.m_cc.Flags |= CC_ENABLEHOOK;
    dlg.m_cc.lpfnHook = CdlgHook;
    dlg.m_cc.lCustData = (LONG_PTR)pRect;UINT_PTR CALLBACK CdlgHook(  HWND hdlg,UINT uiMsg,WPARAM /*wParam*/, LPARAM lParam)
    {
    if(uiMsg == WM_INITDIALOG)
    {
    CHOOSECOLOR *pcc = (CHOOSECOLOR*)lParam;
    CRect *rc = (CRect*)pcc->lCustData;
    if(rc)
    {
    SetWindowPos(hdlg,HWND_TOP,rc->right,rc->bottom,
    0,0,SWP_NOZORDER|SWP_NOSIZE);
    }
    SetWindowText(hdlg, _T("请选择一种颜色"));
    delete rc;
    }
    return 0;
    }
    -----------------------
    CFileDialog也有个成员变量m_ofn,这个结构体也有类似的结构 LPOFNHOOKPROC lpfnHook; 
    仅供楼主参考。