当在 number 属性的文本框一直输入字母后,窗口的显示出现问题,不刷新,radio 不见了,下拉框按钮出现字母6,没有下拉箭头,代码如下:HBRUSH CDlgPcmStep1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//return hbr;
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = ::CreateSolidBrush(RGB(255, 255, 255));
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH) B;
}
case CTLCOLOR_LISTBOX:
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = ::CreateSolidBrush(RGB(255, 255, 255));
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH) B;
}
case CTLCOLOR_DLG : 
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = ::CreateSolidBrush(RGB(255, 255, 255));
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH) B;
}
case CTLCOLOR_EDIT : 
{
COLORREF color; if (( pWnd->GetDlgCtrlID() == IDC_EDIT_FNAME) || 
( pWnd->GetDlgCtrlID() == IDC_EDIT_LNAME) ||
( pWnd->GetDlgCtrlID() == IDC_EDIT_CITY) ||
( pWnd->GetDlgCtrlID() == IDC_COMBO_PROVINCE) ||
( pWnd->GetDlgCtrlID() == IDC_EDIT_ZIPA) ||
( pWnd->GetDlgCtrlID() == IDC_EDIT_ZIPB) ||
( pWnd->GetDlgCtrlID() == IDC_EDIT_YEAR) ||
( pWnd->GetDlgCtrlID() == IDC_COMBO_MONTH))
{
color = RGB(255, 255, 160);
}
else
{
color = RGB(255, 255, 255);
}
HBRUSH B = ::CreateSolidBrush(color);
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(color);
return (HBRUSH) B;
}
default:
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = ::CreateSolidBrush(RGB(255, 255, 255));
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH) B;
}
}
return hbr;
}但如果直接在第2行返回就没有问题。这个对话框是白色背景。

解决方案 »

  1.   

    HBRUSH B = ::CreateSolidBrush(RGB(255, 255, 255));
    -----------
    DeleteObject???
    释放的代码呢?你一直在CreateSolidBrush,每次进这个消息就创建一个,很快资源就耗尽了。
      

  2.   

    lz  在反复创建 BRUSH , 这样会导致严重的资源泄漏。正确的做法是,可以将需要的 Brush 一次性在对话框类内创建好,然后这里判断需要哪个就返回那个。 对话框 结束前,删除所有的Brush
      

  3.   

    在OnInitalDialog里面创建不同地brush