是这样的,对话框界面上贴了一张图片,上面还有一些静态文本,我想在想要做的是如何抓去这些静态文本后面的背景图,并且在把这个背景在给这些静态文本,目前还是菜鸟,希望大牛帮着解决下,有代码或者例子的更好啊。。

解决方案 »

  1.   

    你把static text设置为透明不行吗?
      

  2.   

    ……
    如果楼主只是不想看到字底下的那块灰颜色的话,
    那么lz想得太复杂了╮(╯_╰)╭……同ls把静态文本背景设置为透明吧……
      

  3.   

    重载oncolor函数 设置透明 返回空画刷 就可以了HBRUSH CPage2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); pDC->SetBkMode(TRANSPARENT);// 透明模式
    if (nCtlColor==CTLCOLOR_STATIC)
    {
    return (HBRUSH)GetStockObject(NULL_BRUSH);//返回空画刷
    }
    return hbr;
    }重载后直接粘贴进去 运行 就看到效果了 如果是slider滑块的话就比较麻烦 可以看看这个
    http://blog.csdn.net/liang888113/archive/2011/06/09/6535201.aspx
      

  4.   


    这种重载的话,如果我改变CTLCOLOR_STATIC的内容,就会重叠,若刷新他所在区域的话会有少量的闪烁现象
      

  5.   


    把你的背景图片存在了内存dcBmpMem中吧?!根据你静态控件的Crect rect;创建rect这么大小的内存位图
    CreateCompatibleBitmap();将背景图片的dcBmpMem中的这个位置的内容 BitBlt到自己定义的另一个内存CDC dcStaticMem中现在 dcStaticMem 这个里面就是你要的 静态控件下面的背景图片不知道我理解的是不是对的 也许你在问的时候 把你要实现的功能说出来 大家也可以提出更合理的解决方法
      

  6.   

    嗯,这个就是我想要的,但是我不知道程序该怎么写;
    在初始化Dlg中,我是这么贴图的:
    m_xStart = 50;
    m_yStart = 50;
    GetClientRect(&m_rect);
    m_bmpBK.LoadBitmap(IDB_BITMAP2);
    m_bmpBK.GetBitmap(&m_bmpInfoBK);
    CDC* pDC = GetDC();
    m_dcMem.CreateCompatibleDC(pDC);
    m_dcTmp.CreateCompatibleDC(pDC);
    m_bmpMem.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());
    m_dcMem.SelectObject(&m_bmpMem);
    ReleaseDC(pDC);BYTE *pBitsBK = new BYTE[m_bmpInfoBK.bmWidthBytes * m_bmpInfoBK.bmHeight];

    m_bmpBK.GetBitmapBits(m_bmpInfoBK.bmWidthBytes * m_bmpInfoBK.bmHeight,
    pBitsBK);
    delete []pBitsBK;
    在OnPaint中还有些:
    void CMyTry_TietuDlg::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);
    m_dcTmp.SelectObject(&m_bmpBK);
    m_dcMem.BitBlt(0,0,m_rect.Width(),m_rect.Height(),
    &m_dcTmp,0,0,SRCCOPY);
    dc.BitBlt(0,0,m_rect.Width(),m_rect.Height(),
    &m_dcMem,0,0,SRCCOPY);
    CDialog::OnPaint();
    }
    }然后我的Static控件名称叫做IDC_STATIC12。
    现在我就是想要去IDC_STATIC12这个空间背后的背景图,然后充当Static的背景,看起来是透明的,但是实际上是不相同的