想用PIC控件在界面上放一个背景图,然后再在这上面添加几个按钮,但显示的时候,那张图总把按钮挡住了,不知道有没什么好办法解决?

解决方案 »

  1.   

    SetWindowPos(hwndPic, HWND_BOTTOM, ...);
    最好的方法是在WM_ERASEBKGND消息中直接绘制图片,而不是使用控件。
      

  2.   

    几句话难以说清。还有一种办法可用,就是把按钮都创建为pic控件的子窗口。
      

  3.   

    BOOL CFlvRipperDlg::OnEraseBkgnd(CDC* pDC)
    {
    static CBrush hbr; CRect rc;
    GetClientRect(&rc); if(hbr.m_hObject==NULL){
    hbr.CreatePatternBrush(&bmp);
    bmp.DeleteObject();
    }
    pDC->FillRect(&rc,&hbr);
    return 1;
    }这样写不知道是不是可以,怎么发现根本就没响应这个消息呢ON_WM_ERASEBKGND()
      

  4.   

    改变TAB键的顺序,好像刷新顺序与这个有关,你将他们间的顺序设置先后试试!
      

  5.   

    响应类的WM_EraseBkgnd 消息,在函数里加入以下代码,把图片画在窗体上当背景,这样就不会挡住按钮了。函数中的 IDB_BITMAP47 是加入资源的图片ID,把这个换成你资源里的图片ID,其它代码不变,就可以了。
    BOOL CAddPoi::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rect; 
    CBitmap bitmap; 
    BITMAP bmp; 
    CDC dcCompatible;  bitmap.LoadBitmap(IDB_BITMAP47); 
    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; 
    //return CDialog::OnEraseBkgnd(pDC);
    }
      

  6.   

    给pic控件加上WS_CLIPSIBLINGS风格就可以了:
    GetDlgItem(IDC_STATIC1)->ModifyStyle(0, WS_CLIPSIBLINGS);
    注意,控件ID不要用IDC_STATIC。
      

  7.   


    赞同!因为在初始的时候所有的CStatic 类型的 静态文本框 和 Picture控件都共享同一个IDC_STATIC,直接GetDlgItem指定会出错。另外,可以试试看把被遮挡的按钮ctrl+x 剪切后,再次
    ctrl+v 粘贴上去,应该也能解决被遮挡的问题。
      

  8.   

    根本就没响应WM_ERASEBKGND消息,把上面的代码写到OnPaint()里面就可以了,不过这样做似乎更简单GetDlgItem(IDC_STATIC1)->ModifyStyle(0, WS_CLIPSIBLINGS); 谢啦~记得用CTRL+D调整下顺序~