围绕案例 CTLCOLOR_STATIC 的混淆:
Confusion around case CTLCOLOR_STATIC:
我正在为我们的系统更新一些旧代码,但我不明白为什么在静态情况下检查编辑控件有效。
代码如下:
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
{
if( ((pWnd->GetDlgCtrlID() == IDC_EDIT_SP_FROM) || (pWnd->GetDlgCtrlID() == IDC_EDIT_SP_TO)) &&
(m_RadioDateSelection == 0) )
{
pDC->SetBkColor(g_crSectionLTBlue);
hbr = g_cbSectionLTBlue;
break;
}
pDC->SetTextColor(g_crBlack);
hbr = g_cbSectionLTBlue;
pDC->SetBkColor(g_crSectionLTBlue);
}
break;
case CTLCOLOR_LISTBOX:
pDC->SetTextColor(g_crBlack);
pDC->SetBkColor(g_crWhite);
hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
break;
case CTLCOLOR_EDIT: case CTLCOLOR_MSGBOX:
pDC->SetTextColor(g_crBlack);
pDC->SetBkColor(g_crWhite);
hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
break;
}
注意 CTLCOLOR_STATIC 中检查了 IDC_EDIT 控件。
我的问题是,如果它是一个编辑控件,它甚至不应该被检查,它永远不应该通过检查,因此编辑控件的背景永远不应该变成蓝色。此外,在静态情况下,颜色在任何情况下都不会设置为白色。但是,当前检查有效,当无线电设置为 0 时,两个框都是蓝色的,否则它们会变成白色。在我的静态情况下,bkcolor 从未设置为白色,那么为什么它会正确切换而不是始终为蓝色,或者如果它认为它是一个编辑并将其设置为白色,为什么 bkcolor 不总是白色?
是否应该能够在静态情况下检查编辑控件?
根据MSDN:
A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn.
我正在为我们的系统更新一些旧代码,但我不明白为什么在静态情况下检查编辑控件有效。
代码如下:
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
{
if( ((pWnd->GetDlgCtrlID() == IDC_EDIT_SP_FROM) || (pWnd->GetDlgCtrlID() == IDC_EDIT_SP_TO)) &&
(m_RadioDateSelection == 0) )
{
pDC->SetBkColor(g_crSectionLTBlue);
hbr = g_cbSectionLTBlue;
break;
}
pDC->SetTextColor(g_crBlack);
hbr = g_cbSectionLTBlue;
pDC->SetBkColor(g_crSectionLTBlue);
}
break;
case CTLCOLOR_LISTBOX:
pDC->SetTextColor(g_crBlack);
pDC->SetBkColor(g_crWhite);
hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
break;
case CTLCOLOR_EDIT: case CTLCOLOR_MSGBOX:
pDC->SetTextColor(g_crBlack);
pDC->SetBkColor(g_crWhite);
hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
break;
}
注意 CTLCOLOR_STATIC 中检查了 IDC_EDIT 控件。 我的问题是,如果它是一个编辑控件,它甚至不应该被检查,它永远不应该通过检查,因此编辑控件的背景永远不应该变成蓝色。此外,在静态情况下,颜色在任何情况下都不会设置为白色。但是,当前检查有效,当无线电设置为 0 时,两个框都是蓝色的,否则它们会变成白色。在我的静态情况下,bkcolor 从未设置为白色,那么为什么它会正确切换而不是始终为蓝色,或者如果它认为它是一个编辑并将其设置为白色,为什么 bkcolor 不总是白色?
是否应该能够在静态情况下检查编辑控件?
根据MSDN:
A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn.