重载OnCtlColor试试
case CTLCOLOR_BTN:
// let static controls shine through
pDC->SetBkMode(TRANSPARENT);
return HBRUSH(m_HollowBrush);

解决方案 »

  1.   

    我不是VC++程序员,但是否可以将背景图形设置为“透明”显示?
    BCB中可设置其Transparent为True
      

  2.   

    按钮的Transparent为True,背景的为False,在设计时看不见按钮,但在运行时可以看见.
      

  3.   

    用CBitmapButton! 在按钮上再绘制位图,行不行?
      

  4.   

    你设置为OWNER DRAW,不是覆盖了
    就是对话框没有背景画图它照样不能显示出来,既然OWNER DRAW,你就需要做一些DRAW的工作...
      

  5.   

    我在ONSHOWWINDOW中设置CBitmapButton:
        Button1->LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2,NULL,NULL);
    在ONPAINT中设置画背景图,但是CBitmapButton就是出不来!是否还要在程序中自己画BUTTON上的图片?如要,在什么时候画?
      

  6.   

    这个问题越来越奇怪了,我发现了实现的办法,不过不好,哪位看看还可以用什么方法好一些吗?我用的是对话框模式。我的伪代码如下:CMYProgram::OnShowWindow(){
        Button1->LoadBitmaps(IDB_BITMAP1);//给BUTTON加载图片
    }CMyProgram::OnPaint(){
        DrawBackImage();//绘制背景
    }如果这样做,BUTTON显示不出来,但是,按下面的做法就能出现了CMYProgram::OnShowWindow()
    {
        RECT rc;
        GetClientRect(&rc);
        MoveWindow(&rc); //移动并调整窗口大小
        DrawBackImage();//绘制背景    Button1->LoadBitmaps(IDB_BITMAP1);
    }CMYProgram::OnPaint()
    {
        RECT rc;
        GetClientRect(&rc);
        MoveWindow(&rc);    DrawBackImage();
    }注意一个地方,在得到移动窗口坐标时不能使用GetWindowRect(),只能用GetClientRect()。大家可以自己试一下,真的好奇怪!
      

  7.   

    在你重做的button类中加入wm_erasebkgnd消息处理,
    加入return false;去掉原来代码即可,
      

  8.   

    老兄:
        请你看看这个可能对你有帮助:
    void CBackGroundDlg::OnPaint() 
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    //CDialog::OnPaint();
    CPaintDC dc(this);
    CRect rect;
    GetClientRect(&rect);
    CDC dcMem; 
    dcMem.CreateCompatibleDC(&dc); 
            CBitmap bmpBackground;
            bmpBackground.LoadBitmap(IDB_BITMAP);
    BITMAP bitMap;
    bmpBackground.GetBitmap(&bitMap);
    CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
    }
    }
    这样做很好的。  我试过了。