SetLayeredWindowAttributes

SetLayeredWindowAttributes

我已经使用DWM创建了一个自定义窗口。我使用PaintCustomCaption()绘制了标题,这是MSDN的示例。在添加SetLayeredWindowAttributes()之前,它一直可以正常工作。

添加前的窗口

SetLayeredWindowAttributes(hWnd,RGB(0,0,1),0,LWA_COLORKEY);


c++ - SetLayeredWindowAttributes和BitBlt之间的C++ WinAPI冲突-LMLPHP

添加后

c++ - SetLayeredWindowAttributes和BitBlt之间的C++ WinAPI冲突-LMLPHP

我尝试更改RGB值,但是除了RGB(0,0,0)之外,它仍然是黑色的。

我想知道BitBlt()是否正常工作。

编辑:

我添加SetLayeredWindowAttributes的原因是为了解决此问题

c++ - SetLayeredWindowAttributes和BitBlt之间的C++ WinAPI冲突-LMLPHP

您还有其他绘画字幕的方法吗?

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;
}

最佳答案

如果保留窗口边框,则无需自己绘制标题,除非您想在标题中添加一些内容。

即,正常处理WM_NCCALCSIZEWM_NCHITTEST

08-27 01:40