Win32 API:如何使用GetDCEx()剪辑兄弟姐妹?

时间:2017-11-02 16:54:29

标签: c++ winapi gdi

我有3个重叠的子静态控件,我需要在IDC_STATIC2中进行实体填充:

enter image description here

我这样做如下:

HWND hwndCtl = GetDlgItem(hDlg, IDC_STATIC2);
HDC hdc = GetDCEx(hwndCtl, NULL, 
                  DCX_CACHE | DCX_CLIPSIBLINGS); // clip siblings above IDC_STATIC2
RECT rc{};
GetClientRect(hwndCtl, &rc);
HBRUSH hbr = CreateSolidBrush(RGB(255,150,150));    
FillRect(hdc, &rc, hbr);

DeleteObject(hbr);
ReleaseDC(hdc);

这就是我的期望:

enter image description here

但是,我得到以下结果,其中IDC_STATIC1被剪掉而不是IDC_STATIC3:

enter image description here

这是MSDN使用DCX_CLIPSIBLINGS的{​​{1}}标记的引用:

  

排除窗口上方所有兄弟窗口的可见区域   由 hWnd 标识。

我得到的行为恰恰相反。 IDC_STATIC3 高于 IDC_STATIC2但是从可见区域中排除(我可以在其上绘制)。 IDC_STATIC1 低于 IDC_STATIC2,但它被排除在可见区域之外。

有没有办法按照MSDN中的规定进行此项工作?还是我解释错了?

1 个答案:

答案 0 :(得分:1)

使用CreateWindow / CreateWindowEx创建静态控件时,必须使用WS_CLIPSIBLINGS样式才能获得该效果。

或者,如果您使用资源编辑器,则必须设置为TRUE" clip siblings"在CHILDS的窗户属性中的风格。

我不确定DCX_CLIPSIBLINGS标志的使用情况,但我认为不是必需的