我用这段程序把Dialog的背景的改了:
BOOL CMy2Dlg::OnEraseBkgnd(CDC* pDC) 
{
static CBrush hbr;
    CRect rt;
    GetClientRect(&rt);
    if(hbr.m_hObject==NULL){
        HBITMAP hbit=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"c:\\one.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_COLOR);
        CBitmap*bm=CBitmap::FromHandle(hbit);
        hbr.CreatePatternBrush(bm);
        bm->DeleteObject();
    }
    pDC->FillRect(&rt,&hbr);
    return 1;}
我再用这段代码
if(nCtlColor==IDC_RADIO1)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
来改Radio的背景就改不了!
不知道怎么了?
如果我不用第一段代码来改Dialog的背景,我用其它的代码来就可以用第二段代码来Radio的背景,是什么原因???????????????????????????????????????????????????
谢谢!

解决方案 »

  1.   

    你在对话框的OnPaint()中改变Radio 的背景
          OnPaint()
    {
    CPaintDC dc(this); // device context for painting
    CWnd *pWnd = GetDlgItem(IDC_RADIO);
    CDC *pButtonDC = pWnd->GetDC();
    CRect rtRadio;
    pWnd->GetWindowRect(&rtRadio);
    pWnd->Invalidate();
    pWnd->UpdateWindow();
    CBrush Brush(RGB(0,255,255));
    pButtonDC->SelectObject(Brush);
    pButtonDC->Rectangle(0,0,rtRadio.Width(),rtRadio.Height());
    pWnd->ReleaseDC(pButtonDC);
    }
      

  2.   

    当然,你也可以在OnCtlColor中
    {
    HBRUSH hbrush = CreateSolidBrush(RGB(0,255,255));
    if(nCtlColor == CTLCOLOR_STATIC)
    {
                   pDC->SetBkMode(TRANSPARENT);
    TRACE("nCtlColor= %d\n",nCtlColor);
    return hbrush;
    }
    }
      

  3.   

    nCtlColor==IDC_RADIO1肯定不对,它是0 -  6
      

  4.   

    像你的做法肯定不对!
    你要重画你要改变背景的控件:
    void CMyBu::OnPaint() 
    {
    CPaintDC dc(this);
    dc.SelectObject(GetFont());
    dc.SelectStockObject(NULL_BRUSH);
    dc.SetBkMode(TRANSPARENT);
    CRect rc;
    CString temp;
    GetWindowRect(&rc);
    GetWindowText(temp);
    ScreenToClient(&rc); UINT State;
    DWORD style = GetStyle();
    if(style & BS_CHECKBOX)
    State = DFCS_BUTTONCHECK;     //多选
    else if(style | BS_RADIOBUTTON) 
        State = DFCS_BUTTONRADIO;     //单选
    else
    State = -1; if(State != -1)
        dc.DrawFrameControl(CRect(rc.left+1,rc.top+1,rc.left+14,rc.top+14),DFC_BUTTON,State);
    else
    dc.Rectangle(rc); dc.DrawText(temp,CRect(rc.left+16,rc.top,rc.right,rc.bottom),DT_LEFT);}