一、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);
}
}
}
好记性不如懒笔头,备份一下我的源代码。点击打开链接