做了一个简单的对话框类,在上面放一个按钮,和一个STATIC TEXT.打算按下按钮时候,发送WM_CTLCOLOR消息给对话框,然后调用HBRUSH CTextStaticDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 重画STATIC TEXT.可是不知道为什么不行,this指针编译没问题,可是不能达到目的,而HWND_BROADCAST也不行,反而还影响其他正在运行的程序!!怎么解决啊,帮帮忙!!void CTextStaticDlg::OnButton1() 
{
// TODO: Add your control notification handler code here if(m_count=2)m_count=0;
// ::PostMessage((HWND)this,WM_CTLCOLOR,NULL,NULL);
::SendMessage(HWND_BROADCAST,WM_CTLCOLOR,NULL,NULL);
AfxMessageBox("bbbbbbbbbbbbbbbb");
}HBRUSH CTextStaticDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

// TODO: Return a different brush if the default is not desired
if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
if(m_count==0)
{
pDC->SetBkColor(RGB(255,0,0));
pDC->SetTextColor(RGB(0,255,0));
}
else
{
pDC->SetBkColor(RGB(0,0,255));
pDC->SetTextColor(RGB(0,255,0));

}
} return hbr;
}

解决方案 »

  1.   

    m_count++;
    if(m_count==2)m_count=0;已经改成成样了,原来就是这样!可是还是不行啊!!
      

  2.   

    是不是要设置OwnerDraw属性,在资源编辑器?
      

  3.   

    SetBkColor似乎是不会有效,好像是用返回的刷子来刷背景,不过文件的颜色好像应该会变吧。
      

  4.   


    void CTextStaticDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
             m_count++;
             m_count = m_count % 2; //效果与你下面if语句相同
    //if(m_count==2)m_count=0;
             
             //Invalidate()会发送窗口重绘的消息,每次重绘,OnCtlColor()函数都会
             //被调用
             Invalidate();
    }HBRUSH CTextStaticDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here

    // TODO: Return a different brush if the default is not desired
    if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
    {
    if(m_count==0)
    {
    pDC->SetBkColor(RGB(255,0,0));
    pDC->SetTextColor(RGB(0,255,0));
    }
    else
    {
    pDC->SetBkColor(RGB(0,0,255));
    pDC->SetTextColor(RGB(0,255,0));

    }
    } return hbr;
    }