我有3个重叠的子静态控件,我需要在IDC_STATIC2中进行实体填充:
我这样做如下:
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);
这就是我的期望:
但是,我得到以下结果,其中IDC_STATIC1被剪掉而不是IDC_STATIC3:
这是MSDN使用DCX_CLIPSIBLINGS
的{{1}}标记的引用:
排除窗口上方所有兄弟窗口的可见区域 由 hWnd 标识。
我得到的行为恰恰相反。 IDC_STATIC3 高于 IDC_STATIC2但是不从可见区域中排除(我可以在其上绘制)。 IDC_STATIC1 低于 IDC_STATIC2,但它被排除在可见区域之外。
有没有办法按照MSDN中的规定进行此项工作?还是我解释错了?
答案 0 :(得分:1)
使用CreateWindow / CreateWindowEx创建静态控件时,必须使用WS_CLIPSIBLINGS样式才能获得该效果。
或者,如果您使用资源编辑器,则必须设置为TRUE" clip siblings"在CHILDS的窗户属性中的风格。
我不确定DCX_CLIPSIBLINGS标志的使用情况,但我认为不是必需的