由于显示器的显示模式有多种在VC中
基于对话框或FORM的应用程序在
最大化后可能会因为分辨率太高而导致
窗体上的控件周围有大量空白,动态调整
控件太麻烦.请问用什么方法使窗体最大化
后不会超过指定的尺寸.
就象在C++Builder中可以直接在属性中设置
窗体的最大尺寸?

解决方案 »

  1.   

    在OnSize()函数中判断是否是最大化消息,若是用MoveWindow()控制窗口尺寸。
      

  2.   

    处理WM_GETMINMAXINFO
    设置MINMAXINFO
      

  3.   

    同意楼上的void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
    {
    lpMMI->ptMaxTrackSize.x=800;
    lpMMI->ptMaxTrackSize.y=600;
    CFrameWnd::OnGetMinMaxInfo(lpMMI);
    }
      

  4.   

    在基于对话框的应用程序中重载函数::PreTranslateMessage(MSG* pMsg) 
    if(pMsg->message == WM_GETMINMAXINFO)
    {
    this->MoveWindow(0,0,800,600,TRUE); 

    }
    好象没能拦截最大化消息,应重载哪个函数
      

  5.   

    不是这样的...
    window向你的窗口发送wm_getminmaxinfo,其lparam参数是一个指向MINMAXINFO结构的指针,你只须通过这个指针修改该结构的ptMaxTrackSize成员的值就可以了
      

  6.   


      void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam) 
    {
    // TODO: Add your message handler code here and/or call default
    if(nID==SC_MAXIMIZE)
    {
    MoveWindow(0,0,800,600);
    }
    else
      CFrameWnd::OnSysCommand(nID, lParam);
    }
      

  7.   

    WM_GETMINMAXINFO截获
    处理,然后修改里面的那个指向MINMAXINFO的指针中关于最大时候长和宽的设定就可以了。