在 MFC(Microsoft Foundation Classes)中,CFrameWndEx::NegotiateBorderSpace 是 CFrameWndEx 类的一个公共方法。该方法用于与 MFC 框架进行边界空间的协商,以确定框架窗口的客户区域和非客户区域的大小。

以下是 CFrameWndEx::NegotiateBorderSpace 方法的函数签名:
virtual BOOL NegotiateBorderSpace(UINT nBorderCmd, LPRECT lpRectBorder);

  •  nBorderCmd:指定边界空间的命令,可以是 BORDER_COMMAND_SET 或 BORDER_COMMAND_GET。

  •  lpRectBorder:指向 RECT 结构的指针,用于传递或接收边界空间的矩形坐标。


该方法的作用取决于 nBorderCmd 参数的值:
  •  如果 nBorderCmd 为 BORDER_COMMAND_SET,表示框架窗口要设置边界空间。此时,lpRectBorder 指向的矩形用于指定新的边界空间。

  •  如果 nBorderCmd 为 BORDER_COMMAND_GET,表示框架窗口要获取当前的边界空间。此时,lpRectBorder 指向的矩形将用于返回当前的边界空间。


具体的实现会根据应用程序的需求而有所不同。通常,该方法用于在调整框架窗口大小或样式时,协商客户区域和非客户区域之间的边界空间。

以下是一个简单的示例:
BOOL CMainFrame::NegotiateBorderSpace(UINT nBorderCmd, LPRECT lpRectBorder)
{
    if (nBorderCmd == BORDER_COMMAND_SET)
    {
        // 在设置边界空间时,可以根据需要调整 lpRectBorder 的值
        lpRectBorder->left = 5;
        lpRectBorder->top = 5;
        lpRectBorder->right = 5;
        lpRectBorder->bottom = 5;
        return TRUE;
    }
    else if (nBorderCmd == BORDER_COMMAND_GET)
    {
        // 在获取边界空间时,将当前的边界空间传递给 lpRectBorder
        lpRectBorder->left = m_nLeftBorderSpace;
        lpRectBorder->top = m_nTopBorderSpace;
        lpRectBorder->right = m_nRightBorderSpace;
        lpRectBorder->bottom = m_nBottomBorderSpace;
        return TRUE;
    }

    // 如果命令不是 SET 或 GET,返回 FALSE
    return FALSE;
}

在这个例子中,NegotiateBorderSpace 方法根据 nBorderCmd 的不同值,分别进行设置和获取边界空间的操作。你可以根据实际需求来实现适合你应用程序的协商逻辑。


转载请注明出处:http://www.zyzy.cn/article/detail/17930/MFC/CFrameWndEx