一直以来,在自绘标题栏一直没有一个完美的方法。当然清除标题栏,完全自己重绘也是可以的。但是失去了窗口本身的一些特性。
本人最近正好一直在研究这方面,结果也遇到了此难题。不过最终还是解决了,现在把方法共享出来分享。
第一步:重载OnNcHitTest 全部返回标题栏操作。
UINT CXXDialog::OnNcHitTest( LONG x, LONG y )
{
LRESULT lRet = CDialog::OnNcHitTest(x,y);
//屏蔽消息
return HTCAPTION;
}
第二步:
void CXXXDialog::OnNcLButtonDown( UINT nHitTest, CPoint pt )
{
//如果是自己需要处理鼠标按下区域,进行处理,不在自己处理的范围,全部执行下边这句
if(....pt .....)
{
.......
return 0;
}
SendMessage(WM_SYSCOMMAND,0xF012,0);
}
第三步:
void CXXXDialog::OnNcPaint()
{
//进行非客户区的重绘代码。
}
经过这三步实现后,你再也看不见系统强行重绘标题栏了。