运行一个没有最大化按扭的程序。然后打开“任务管理器”,选中刚才运行的程序。单击右键,选择“最大化”。这时问题就出现了?真的最大化了!这是怎么回事?把WM_SYSCOMMAND里的SC_MAXIMIZE给空处理了。还是会变大,这是怎么回事呢?任务管理器是发送了什么消息?用SPY++查看了一下,是WM_WINDOWPOSCHANGED吗?好像又不是,有什么办法,让窗口不能最大化呢?

解决方案 »

  1.   

    响应WM_GETMINMAXINFO消息,限制窗口大小。
      

  2.   

    void CDlgTestDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rcWnd;
    GetWindowRect(&rcWnd);
    if (rcWnd.Width() > 0 && rcWnd.Height() > 0)
    {
    lpMMI->ptMaxPosition.x = rcWnd.left;
    lpMMI->ptMaxPosition.y = rcWnd.top;
    lpMMI->ptMaxSize.x = rcWnd.Width();
    lpMMI->ptMaxSize.y = rcWnd.Height();
    }
    return;
    }测试正确
      

  3.   

    有一个问题,我这不行啊。
    WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    if(message == WM_GETMINMAXINFO)
    {
    CRect rectWnd;
    GetWindowRect(&rectWnd);
    MINMAXINFO *minfo = (LPMINMAXINFO)lParam;
    minfo->ptMaxPosition.x = rectWnd.left;
    minfo->ptMaxPosition.y = rectWnd.right;
    minfo->ptMaxSize.x = rectWnd.Width();
    minfo->ptMaxSize.y = rectWnd.Height();
    }
    return CDialog::WindowProc(message, wParam, lParam);
    }