想封装StaticText 使之具有制定带背景图片,制定文字颜色的功能,应该封装那些属性重载那些函数呢,我重绘了背景,却被对话框绘成了原来的样子,怎么处理呢?

解决方案 »

  1.   

    重载WM_ERASEBKGND, 重绘背景后返回TRUE
      

  2.   

    自动加上的那个CDialog::OnEraseBkgnd(pDC)去掉了吗?
      

  3.   

    http://www.codeguru.com/Cpp/controls/staticctrl/
      

  4.   

    去掉 return CStatic::OnEraseBkgnd(pDC);直接return TRUE;
      

  5.   

    我的代码
    BOOL CBKStatic::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    if(m_bkresourceid)
    {
    CRect rc;
    GetClientRect(&rc);
    m_bitmap.LoadBitmap(m_bkresourceid);
    m_bitmap.GetObject (sizeof(BITMAP),&bmp);
    memDC.CreateCompatibleDC (pDC);
    memDC.SelectObject (m_bitmap);
    pDC->BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
    return TRUE;
    }
    else
    {
    return CBKStatic::OnEraseBkgnd(pDC);
    }
    }
      

  6.   

    if(m_bkresourceid)为什么要判断这个。
      

  7.   

    m_bkresourceid是我传入的资源的ID,如果没传就执行默认的操作,穿了的话就执行绘制背景的操作,顺便问一下,是不是我还需要封装别的什么函数,或者在使用它的实例的时候需要做其他的事情,
      

  8.   

    memDC.SelectObject (m_bitmap);
    应该是memDC.SelectObject (&m_bitmap);
      

  9.   

    谢谢大家提示,我已经改了,但是我这里出现的奇怪现象就是,如果我给这个封装的类添加了OnPrint消息,即使里面什么都不作,他就会绘制出北景来,否则,怎么改动OnEraseBkgnd都不能显示出背景来,这是为什么,WM_PRINT 和WM_EraseBkgnd有什么关系吗??