病例CTLCOLOR_STATIC的混淆:

时间:2015-04-15 17:41:30

标签: c++ mfc

我正在为系统更新一些旧代码,我不明白为什么检查编辑控件是在静态情况下工作。

以下是代码:

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始终不是白色?

是否可以在静态情况下检查编辑控件?

1 个答案:

答案 0 :(得分:3)

根据MSDN

  

静态控件或只读或禁用的编辑控件在将要绘制控件时将WM_CTLCOLORSTATIC消息发送到其父窗口。