HBRUSH CLibraryAdminDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  在此更改 DC 的任何属性
     if(pWnd->GetDlgCtrlID() == IDC_TITLE)
    {
        pDC->SetTextColor(RGB(rand()%255,rand()%255,rand()%255));
        pDC->SetBkMode(TRANSPARENT);
pWnd->SetFont(&m_font);
    }
// TODO:  如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}

解决方案 »

  1.   

    应该是pDC->SetBkMode(TRANSPARENT);起了作用
    闪烁是因为高速刷新背景造成的
      

  2.   

    这是一个无限循环:
    pWnd->SetFont(&m_font);中会引发OnCtlColor事件
    OnCtlColor中又执行SetFont(&m_font);
    所以颜色一直在变。类似递归,不知道有没有栈益出问题。可以设置断点查看一下,栈空间是不是一直在增加。
      

  3.   

    总感觉在return 那里怪怪的,我一般都是这样写的:
    if(pWnd->GetDlgCtrlID() == IDC_TITLE)
    {
    pDC->SetBkMode(TRANSPARENT);
    return   (HBRUSH)::GetStockObject(NULL_BRUSH);
    }
    字体可以在窗体初始化时就设置好啊,没有必要在这里设置。