怎么调用OnNcCalcSize
时间: 2024-04-06 21:33:23 浏览: 11
OnNcCalcSize 是 MFC 框架中 CWnd 类的一个成员函数,用于计算非客户区的大小。在派生自 CWnd 的类中,可以通过重载 OnNcCalcSize 函数来定制非客户区的大小计算方式。在实际使用中,可以在类的消息映射表中添加对 WM_NCCALCSIZE 消息的处理,以调用 OnNcCalcSize 函数。具体的调用方式可以参考 MFC 框架的相关文档和代码示例。
相关问题
调用OnNcCalcSize代码
以下是一个重载了 OnNcCalcSize 函数的 CWnd 派生类的示例代码:
```
class CMyWnd : public CWnd
{
public:
virtual void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
// 调用基类实现
CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
// 在此添加自定义的非客户区大小计算代码
// ...
// 如果需要修改非客户区矩形的大小,可以在此处修改
// lpncsp->rgrc[0] = ...
// 最后,设置 bCalcValidRects 为 FALSE,表示已经自己计算了非客户区大小
bCalcValidRects = FALSE;
}
// 消息映射表中添加对 WM_NCCALCSIZE 消息的处理
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
ON_WM_NCCALCSIZE()
END_MESSAGE_MAP()
```
上述代码中,重载的 OnNcCalcSize 函数中可以添加自定义的非客户区大小计算代码,如果需要修改非客户区矩形的大小,可以在此处修改 NCCALCSIZE_PARAMS 结构体中的 rgrc[0] 成员。最后,将 bCalcValidRects 设置为 FALSE,表示已经自己计算了非客户区大小。在消息映射表中添加对 WM_NCCALCSIZE 消息的处理,以调用 OnNcCalcSize 函数。
OnNcCalcSize如何自动调用代码
在 MFC 框架中,当窗口大小发生变化时,系统会自动发送 WM_NCCALCSIZE 消息给窗口,以计算非客户区的大小。如果在消息映射表中添加了对 WM_NCCALCSIZE 消息的处理,就可以自动调用 OnNcCalcSize 函数,以实现自定义的非客户区大小计算。
以下是一个在窗口大小变化时自动调用 OnNcCalcSize 函数的示例代码:
```
class CMyWnd : public CWnd
{
public:
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
ON_WM_NCCALCSIZE()
END_MESSAGE_MAP()
void CMyWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
// 调用基类实现
CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
// 在此添加自定义的非客户区大小计算代码
// ...
// 如果需要修改非客户区矩形的大小,可以在此处修改
// lpncsp->rgrc[0] = ...
// 最后,设置 bCalcValidRects 为 FALSE,表示已经自己计算了非客户区大小
bCalcValidRects = FALSE;
}
```
在上述代码中,CMyWnd 类中声明了 OnNcCalcSize 函数,并在消息映射表中添加了对 WM_NCCALCSIZE 消息的处理。当窗口大小发生变化时,系统会自动发送 WM_NCCALCSIZE 消息给窗口,从而自动调用 OnNcCalcSize 函数,以实现自定义的非客户区大小计算。
在实际使用中,可以根据实际需求修改 OnNcCalcSize 函数中的代码,以实现自定义的非客户区大小计算。