如题“对话框背景图片挡住了控件”,在头文件中:CBitmap m_bitmapBack;
                        HICON m_hIcon;
在OnInitDialog()中:m_bitmapBack.LoadBitmap(IDB_BITMAP3);在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
    {
        CPaintDC dc(this);
        dc.DrawState(CPoint(0,0), CSize(318,256), m_bitmapBack, DST_BITMAP);
        CDialog::OnPaint();
    }
结果是我的背景图片把对话框上的所有控件挡住了,只有点击或者光标在控件上移动才会看到控件,请教如何解决背景图片挡住控件这个问题啊?

解决方案 »

  1.   

    BOOL CLogin::OnEraseBkgnd(CDC* pDC) 

    CRect rect; 
    CBitmap bitmap; 
    BITMAP bmp; 
    CDC dcCompatible; bitmap.LoadBitmap(IDB_BITMAP3); 
    bitmap.GetBitmap(&bmp); 
    dcCompatible.CreateCompatibleDC(pDC); 
    CBitmap *pOlBitmap = dcCompatible.SelectObject(&bitmap); 
    GetWindowRect(&rect); pDC->SetStretchBltMode(COLORONCOLOR); 
    pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 
    0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
    dcCompatible.SelectObject(pOlBitmap); 
    DeleteDC(dcCompatible.m_hDC); 
    return TRUE; } 我试过这样做,但是初始化的时候跑不到这里,如何解决啊
      

  2.   

    是不是我忘记发送什么Windows消息了啊,还是要notify什么啊
      

  3.   

    OnInitDialog函数里面最后加上sendmessage发送WM_ERASEBKGND消息。
      

  4.   

    在OnInitDialog里面invalidate().....
      

  5.   

    对话框的窗口类型在资源编辑时要勾上Clip Children和Clip Sibling,或者用代码设置WS_CLIPCHILDREN和WS_CLIPSIBLING类型。
      

  6.   

    已经解决,用的OnPaint()方法,但是有朋友说OnPaint()不好,OnEraseBkgnd()比较好,不知道什么原因,能否大侠解释一下?
      

  7.   

    如果不是经常要刷背景,更换背景图的话,用OnPaint就足够了
      

  8.   

    经常换图片用OnPaint会带来什么样的问题啊,比如闪烁还是其他问题,用OnEraseBkgnd特点是什么啊?
      

  9.   


    支持2楼的。OnPaint调用要比OnEraseBkGnd频繁的多,不管从效率还是效果上都没有OnEraseBkGnd来的好。而OnEraseBkGnd函数只是在刷新背景时才被触发,所以被调用的几率很低,避免了被经常调用,而且他应该也是显示在最下层的。