我给VC界面背景添加了Bitmap背景,但添加上背景后,Edit控件被背景遮住了三分之一,请问各位高手这是怎么回事啊?应该怎样才能解决这个问题呢?

解决方案 »

  1.   

    先放背景图片到dialog,再放edit看看
      

  2.   

    为什么会遮住三分之一呢?
    要不全遮,要不就不遮.
    试试下面的,不覆盖控件的.BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    CString string="E:\\Pic\\BACKGROUND.bmp";
    HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string,
                 IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE);   
        //VERY   IMPORTANT:NOT   CALL   THE   SUPER   CLASS   FUNCTION   
    CPaintDC   dc(this);
        if(hbitmap==NULL)   
           return   FALSE;   
    CBitmap   bitmap;   
    bitmap.Attach(hbitmap);   
    BITMAP   bmp;   
    bitmap.GetBitmap(&bmp);   
         
        CDC cdc;
        cdc.CreateCompatibleDC(pDC);   
        cdc.SelectObject(&bitmap);   
        pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY);
          return   TRUE;
    }
      

  3.   

    放在OnEraseBkgnd中,直接返回true
      

  4.   

    我是新手,还想请问一下,OnEraseBkgnd函数是映射什么消息生成的函数,还是需要自己增加消息?非常感谢各位高手的热心帮助,呵呵!
      

  5.   

    右键单击对话框->Events->右下角选择childwindow,添加WM_EraseBkgnd.
    然后在对话框的ClassWizard里添加EraseBkgnd的事件
      

  6.   

    非常感谢,但还是没有解决Edit控件被遮住三分之一的问题,请问还有别的方法吗?
      

  7.   

    看看Edit控件旁边有没有静态文本之类的,有可能是其它的控件挡住了吧。
      

  8.   

    不是其它控件挡住的原因,就算界面上只放一个Edit控件,加上背景后也是会挡住三分之一,Edit控件中的光标也是变成了原来的三分之一,到底是什么原因呢?真是着急啊,不过还是很感谢你的帮助!
      

  9.   

    先导入一副BMP图片资源,id改为IDB_BITMAP1
    在对话框头文件加入如下两个变量:
    CBitmap m_bitmap;
    CBrush  m_brush;
    再给对话框增加个WM_CTLCOLOR消息处理函数,代码如下:
    HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        
        if(nCtlColor==CTLCOLOR_DLG)
        {
            return m_brush;
        }
        
        
        return hbr;
    }
    BOOL MyDlg::OnInitDialog() 
    {
        CDialog::OnInitDialog();
        
        m_bitmap.LoadBitmap(IDB_BTIMAP);
        m_brush.CreatePatternBrush(&m_bitmap);
        
        return TRUE;  

    这段代码加上后,背景图片显示没有问题,Edit控件也不会被挡,但是CStatic控件的背景不透明,为了让cStatic控件的背景透明,我又在OnCtlColor函数中加了下面的代码:
    if(nCtlColor==CTLCOLOR_STATIC)
    {
        pDC->SetBkMode(TRANSPARENT);
    }
    return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    加上这段代码后CStatic控件的背景是透明了,但Edit控件被背景图片挡住了三分之一,请各位帮我看看,是不是我加的代码有问题,应该怎么修改?
      

  10.   

    HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        
        if(nCtlColor==CTLCOLOR_DLG)
       {
            return m_brush;
        }
    if(nCtlColor==CTLCOLOR_STATIC)
    {
    pDC->SetBkMode(TRANSPARENT);
    return HBRUSH(GetStockObject(HOLLOW_BRUSH));/////是这里
    }

    return hbr;
    }
      

  11.   

    谢谢covsno(),我看了好久了都没有看到到底哪里错了,你帮我解决了问题,真的非常感谢!!!