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;
}
{
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;
}
闪烁是因为高速刷新背景造成的
pWnd->SetFont(&m_font);中会引发OnCtlColor事件
OnCtlColor中又执行SetFont(&m_font);
所以颜色一直在变。类似递归,不知道有没有栈益出问题。可以设置断点查看一下,栈空间是不是一直在增加。
if(pWnd->GetDlgCtrlID() == IDC_TITLE)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
字体可以在窗体初始化时就设置好啊,没有必要在这里设置。