15,979
社区成员
发帖
与我相关
我的任务
分享
5,处理WM_NCACTIVE消息。
在这个时候,系统会画非客户区,我们处理这一消息,不让其画,然后调用我们画非客户区的方法画上我们的图形。
当改变窗口大小、移动窗口到屏幕边界时,都会产生一个 WM_NCPAINT 消息,要求NC区域重绘。
但是当右键点击任务栏时,会弹出菜单,同时窗口的标题栏会变色,此时不会产生 WM_NCPAINT来重绘,而是产生一个 WM_NCACTIVE消息,系统会去重绘。
所以,做界面皮肤时,处理WM_NCPAINT的同时,还要处理WM_NCACTIVE。否则,右键任务栏时,系统会画出默认的边框。
return (!(BOOL)wParam) ;
6,处理WM_ACTIVE消息//也是return (!(BOOL)wParam) ;????
当我们点我们的窗体时,会激发active消息,在这个消息中,默认是会画非客户区的。我们也要用我们自己的画笔画上去。
LRESULT CALLBACK WindowProcDialog( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
LRESULT lResult = 0;
PMetroUIData pMetroUIData = (PMetroUIData)GetProp( hWnd,_T("MetroUI_Prop") );
{static int i = 0;TCHAR buf[64] = { 0 };_stprintf(buf,_T("message: 0x%04x %d\r\n"),uMsg,i++);OutputDebugString( buf );}
然后启动程序,开始调试,在Win7下拖动边框改变大小 ,再看VS2008下面的输出一栏里输出了哪些信息,根据信息中的值再去WinUser.h中去找,看看各个值对应的是哪个消息,然后猜测过滤具体是哪些个标题栏类的消息导致的,然后重载那些消息,一个个的试,找出具体是哪个消息,接下来就可以重载那一个消息,在该消息处理里重绘标题栏即可。