HBRUSH CDialog23::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
int Element = pWnd->GetFocus()->GetDlgCtrlID();
if (pWnd->GetDlgCtrlID() == Element && nCtlColor != CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255, 230, 153));
hbr = m_Gelb;
return hbr;
}
else
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255, 255, 255));
hbr = m_Weiss;
return hbr;
}
}有了这段代码,当我将焦点设置在其中一个时,我的ComboBoxes就会变成黄色。但是,如果将当前焦点设置为ComboBoxes之一,则当我使用光标(没有单击光标)在其上方悬停时,所有其他ComboBoxes都会变成黄色。而且,ComboBox的列表不会被着色(它们被格式化为下拉列表)。
有什么想法吗?
发布于 2022-01-03 21:17:49
这是因为您没有检查组合框ID等于聚焦组合框ID。下拉组合框永远不会收到焦点。包含子编辑控件的是复杂控件,该控件具有ID=1001 (0x03E9)。因此,您将注意力集中在带有1001 ID的窗口上,并且通过该ID的所有窗口也会更改背景。更改逻辑,使用windows句柄而不是ID。至于下拉列表,是一个分层在组合框窗口上的弹出窗口,您必须使用不同的方法更改背景。您无法控制删除列表的创建,唯一的方法是使用钩子对此窗口进行动态子类。
https://stackoverflow.com/questions/70463123
复制相似问题