原帖:http://topic.csdn.net/u/20101025/17/a269b08a-8435-4ba6-8d09-eacd3017a444.html已结的帖关注度太低,所以发个续帖,大家仁者见仁智者见智 o(∩_∩)o

解决方案 »

  1.   

    w_anthony:请下载顶楼的示例,您应该可以理解
      

  2.   

    呵呵,下载了看了下,实在没想到是最糟糕的情况,你的对话框置为最大化状态了,
    但是大小并不是满屏大小。对于微软来说,这属于错误效果!正如我所说的,重载了WM_GETMINMAXINFO则一定要屏蔽最大化操作,二者是互斥的。
    WM_GETMINMAXINFO是用来控制鼠标拉伸时的最小和最大尺寸的。“最大化”是Windows系统明确定义的概念,指窗口大小为满屏(除去任务栏区域),
    而由于“最大化”和“最小化”比较特殊,所以Windows使用了状态(Placement)
    来标识这两种状态,以便于判断(IsZoomed() IsIconic())和实现还原操作。
      

  3.   

    关于你的问题的解决办法,请先确认需求是什么。你提供的源码,对话框被设置为是不可拉伸的,那么我只能理解你的需求是,
    这个对话框只允许存在小尺寸和大尺寸两种模式,类似于有些对话框的收缩
    和展开。只是后者是通过客户区的一个按钮来操作,而这个对话框则是通过
    非客户区的“最大化/还原”按钮(非客户区按钮实际上不是控件)来操作。如果是这样,只需要自实现一下最大化处理就行了。// wndDlg.hbool m_bSpecialMaximizeState;afx_msg void OnSysCommand(UINT nID, LPARAM lParam);void SetSpecialMaximize(bool bMaximize);
    // wndDlg.cpp#define ZOOMED_X 512
    #define ZOOMED_Y 383
    #define RESTORED_X 400
    #define RESTORED_Y 285CwndDlg::CwndDlg(...)
        : CDialog(...)
        , m_bSpecialMaximizeState(true)
    {
        ...
    }BOOL CwndDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();    ...    SetSpecialMaximize(true);

        return TRUE;
    }...void CwndDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if (nID == SC_MAXIMIZE)
        {
            m_bSpecialMaximizeState = !m_bSpecialMaximizeState;
            SetSpecialMaximize(m_bSpecialMaximizeState);
        }
        else
        {
            CDialog::OnSysCommand(nID, lParam);
        }
    }void CwndDlg::SetSpecialMaximize(bool bMaximize)
    {
        CRect rcWnd(0,0,0,0);
        GetWindowRect(&rcWnd);    CPoint ptCenter = rcWnd.CenterPoint();
        long cx = bMaximize ? ZOOMED_X : RESTORED_X;
        long cy = bMaximize ? ZOOMED_Y : RESTORED_Y;    SetWindowPos(NULL, ptCenter.x-cx/2, ptCenter.y-cy/2, cx, cy, SWP_NOZORDER);
    }
      

  4.   

    呵呵,LZ挺费心的,谢谢了。
    不过我倒不认为,“非满屏的最大化的对话框”是个错误效果哦。
    而且直接设置窗口大小,一是会缺乏缩放的动画效果,二是如果窗口的最大化限制是1024x738,那么对于超过1024x768的分辨率没有什么问题,但是对于1024x768的分辨率,本来应该是最大化到整个屏幕,然后不可拖动的,但是现在依然是可以拖动的状态,这是不对的。
    另外我那张帖子也不是没有解决方法,那帖子里面也顺带的说了下
      

  5.   

    直接把Windows7这个特性关闭算了Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Control Panel\Desktop]
    "WindowArrangementActive"="0"