我使用DWM创建了一个自定义窗口。我使用PaintCustomCaption()
绘制了标题,这是MSDN的一个示例。它正常工作,直到我添加SetLayeredWindowAttributes()
。
添加前的窗口
SetLayeredWindowAttributes(hWnd,RGB(0,0,1),0,LWA_COLORKEY);
添加
后我尝试更改RGB值但除了RGB(0,0,0)之外它仍然是黑色。
我想知道BitBlt()
是否正常运作。
编辑:
我添加SetLayeredWindowAttributes的原因是为了解决这个问题
你有其他方法来描绘标题吗?
case WM_ACTIVATE: {
DwmExtendFrameIntoClientArea(hWnd,&m); // m={-1,-1,-1,-1};
break;
}
case WM_INITDIALOG: {
SetWindowPos(hWnd,NULL,0,0,500,500,SWP_NOMOVE|SWP_FRAMECHANGED);
SetWindowLongPtr(hWnd,GWL_STYLE,WS_VISIBLE|WS_OVERLAPPEDWINDOW);
SetWindowLongPtr(hWnd,GWL_EXSTYLE,WS_EX_LAYERED);
SetLayeredWindowAttributes(hWnd,RGB(0,0,1),0,LWA_COLORKEY);
RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE);
return true;
}
case WM_PAINT: {
hdc=BeginPaint(hWnd,&paintstruct);
PaintCustomCaption(hWnd,hdc)
EndPaint(hWnd,&paintstruct);
break;
}
答案 0 :(得分:1)
如果保留窗口边框,除非要在标题中添加内容,否则无需自己绘制标题。
即,正常处理WM_NCCALCSIZE
和WM_NCHITTEST
。
答案 1 :(得分:0)
首先,使用RGB(200,201,202)作为透明度键而不是RGB(0,0,1)。
您可以尝试其他值,但这是迄今为止我测试过的最佳值。
然后,在HBITMAP hbmOld=(HBITMAP)SelectObject(hdcPaint,hbm);
中PaintCustomCaption()
之后添加此内容:
FillRect(hdcPaint,&rcClient,CreateSolidBrush(RGB(200,201,202)));