为了在标题栏的右端写一些文本,我的程序捕获WM_NCPAINT
,获取设备上下文,计算写文本的位置,然后调用DrawText
. 此代码过去可以工作,但在 Windows 8 和 Windows 10 中,它不再工作。在这些较新版本的 Windows 中,您似乎根本无法在标题栏上绘画。
使用 Win API(不是 MFC)获取设备上下文如下:-
HDC hDC = GetWindowDC(hwnd);
在Windows 开发中心中对此进行了描述:-
GetWindowDC函数检索整个窗口的设备上下文 (DC),包括标题栏、菜单和滚动条。窗口设备上下文允许在窗口中的任何位置进行绘制,因为设备上下文的来源是窗口的左上角而不是客户区。
没有提及此功能是特定于 Windows 版本的,但它所描述的内容不再有效。DrawText
用一个大的黑色矩形 (-300,-300,1000,1000)替换对的调用,使标题栏保持完好无损,表明绘制整个窗口矩形是不可能的。
我尝试按如下方式获取设备上下文:-
HDC hDC = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN);
如. _ WM_NCPAINT
只要窗口类使用或之一注册CS_CLASSDC
,则返回 an (如果不返回零)。但这有完全相同的问题。CS_OWNDC
CS_PARENTDC
hDC
hDC
我尝试了上面的变体,因为剪辑看起来很可疑。我试过了:-
HDC hDC = GetDCEx(hwnd, 0, DCX_WINDOW);
毕竟文档都说DCX_WINDOW
:-
值: DCX_WINDOW
含义:返回对应于窗口矩形而不是客户矩形的 DC。
此设备上下文也展示了相同的行为。
如何获得允许我DrawText
在标题栏上或确实绘制任何内容的设备上下文?