【发布时间】:2021-12-30 11:03:38
【问题描述】:
使用以下代码,我的编辑框会在获得焦点时获得红色框和黄色背景。但是,当我输入文本时,起初文本是不可见的,我必须将光标悬停到另一个对话框项才能看到我刚刚输入的文本。为什么我必须更改才能看到文本而无需移动鼠标?
HBRUSH CDialog23::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC || nCtlColor == CTLCOLOR_DLG)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255, 255, 255));
hbr = m_Weiss;
return hbr;
}
if (nCtlColor == CTLCOLOR_LISTBOX)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255, 230, 153));
hbr = m_Gelb;
return hbr;
}
const CWnd* focusWnd = GetParent() ? GetParent()->GetFocus() : nullptr;
bool hasFocus = focusWnd && focusWnd->GetSafeHwnd() == pWnd->GetSafeHwnd();
if (hasFocus)
{
if (pWnd->GetDlgCtrlID() == pWnd->GetFocus()->GetDlgCtrlID() && nCtlColor != CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255, 230, 153));
CRect rect;
pWnd->GetWindowRect(&rect);
rect.OffsetRect(-rect.left, -rect.top);
CBrush brush(RGB(255, 0, 0));
pDC->FrameRect(&rect, &brush);
ReleaseDC(pDC);
hbr = m_Gelb;
return hbr;
}
else
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255, 255, 255));
hbr = m_Weiss;
return hbr;
}
}
return hbr;
}
【问题讨论】: