我用这段程序把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的背景,是什么原因???????????????????????????????????????????????????
谢谢!
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的背景,是什么原因???????????????????????????????????????????????????
谢谢!
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);
}
{
HBRUSH hbrush = CreateSolidBrush(RGB(0,255,255));
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
TRACE("nCtlColor= %d\n",nCtlColor);
return hbrush;
}
}
你要重画你要改变背景的控件:
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);}