一、WM_NCPAINT 主体绘画消息
二、OnNcActivate 激活时的消息绘制
三、OnNcLButtonDown(UINT nHitTest, CPoint point)
这个消息判断是否点击了最小化,最大化,关闭按钮。可以在这里转转换成自己的位置判断
如果这里不处理,点击后,会出现系统默认的按钮。
if(nHitTest ==HTMAXBUTTON ||nHitTest==HTMINBUTTON || nHitTest==HTCLOSE )
{ //重绘按钮的状态 }
else
{
CDialog::OnNcLButtonDown(nHitTest, point);
}

四、处理标题栏大小的消息 OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
这里可以处理窗口标题栏的高底,win7启用不同主题时,标题栏的高度是不一样,这里可以指定。
if (bCalcValidRects)
{
CRect& rc = (CRect&)lpncsp->rgrc[0];//get the client rectangle
rc.top += m_nTitleHeight;
rc.left += 1;
rc.bottom -= 1;
rc.right -= 1;
}
五、WM_SIZE消息
这里可以调整自定义的最大化,最小化,关闭按钮的位置
六、WM_NCLBUTTONDOWN /WM_NCLBUTTONUP消息
处理,按下时按钮的状态,并转换消息处理
void CTESTNCDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
if(nHitTest ==HTMAXBUTTON ||nHitTest==HTMINBUTTON || nHitTest==HTCLOSE )
{
m_hittest = nHitTest;
return ;
}
else
{
m_hittest = 0;
CDialog::OnNcLButtonDown(nHitTest, point);
}
}
void CTESTNCDlg::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
// TODO: Add your message handler code here and/or call default
switch (m_hittest)
{
case HTCLOSE:
{
OnCancel();
break;
}
case HTMAXBUTTON:
{
ShowWindow(SW_SHOWMAXIMIZED);
break;
}
case HTMINBUTTON:
{
CloseWindow();
}
break;
default:
{
CDialog::OnNcLButtonUp(nHitTest, point);
}
}
}
好记性不如懒笔头,备份一下我的源代码。点击打开链接
本文介绍了Windows消息处理中的WM_NCPAINT用于自定义标题栏绘画,OnNcActivate和OnNcLButtonDown处理窗口激活与按钮点击,NCCALCSIZE用于调整标题栏高度。同时涵盖了最大化、最小化、关闭按钮的定位和响应。了解如何在不同主题下控制窗口外观和响应用户交互。
4268

被折叠的 条评论
为什么被折叠?



