我在网上搜索了一种将背景颜色设置为对话框控件的方法。
我已设法使用此代码执行此操作:
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(255,255,255));
SetBkColor(hdcStatic, RGB(0,0,0));
if (hbrBkgnd == NULL)
{
hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
}
return (INT_PTR)hbrBkgnd;
}
然而,我实际上要找的只是为特定的静态控件着色,而不是我在对话框中的所有静态控件。反正有没有这样做?也许使用GetDlgItem(hdlg,“IDC_MYCONTROL”)将hdc设置为某个东西?
- 更新
在提出建议之后我最终得到了这个:
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) lParam;
HWND hWnd = (HWND)lParam;
HWND dlg =GetDlgItem(hDlg, IDC_STATIC2);
if (hWnd == dlg)
{
SetTextColor(hdcStatic, RGB(255,255,255));
SetBkColor(hdcStatic, RGB(0,0,0));
}
if (hbrBkgnd == NULL)
{
hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
}
return (INT_PTR)hbrBkgnd;
}
似乎即使运行了SetBkColor,对话框也没有任何变化,导致下面描述的奇怪问题。
答案 0 :(得分:1)
HWND被传递给对话框proc,所以你可以;
HWND hWnd = (HWND) lParam;
if (hWnd == GetDlgItem(hdlg, "IDC_MYCONTROL")) {
...
答案 1 :(得分:0)
检查lParam是否匹配要更改颜色的子项的句柄。