正常使用时没发现啥不对
但是当这个控件执行了 EnableWindow(FALSE);后就出问题了
显示的是系统的框框,不是我的画的...
再执行 EnableWindow(TRUE)后,自画的界面出来了,但系统的那个还是能看到一些在边框上
全是在OnPaint函数 里面画的界面
Onpaint里面,就是根据 选中状态,鼠标是否在上面停留等,显示不同的图片很是郁闷请高人讲解下

解决方案 »

  1.   

    下面是OnPaint的代码
    没有用那个自绘的代码CPaintDC dc(this); // device context for painting
    // TODO: Add your message handler code here
    // Do not call CButton::OnPaint() for painting messages
    CBitmap bitamp;
    CDC *pDC=this->GetParent()->GetDC();
    CRect parentRect;
    GetClientRect(&parentRect);
    ClientToScreen(&parentRect);
    GetParent()->ScreenToClient(&parentRect);
    m_dc.SelectObject(&gFont);
    bitamp.CreateCompatibleBitmap(&dc,parentRect.Width(),parentRect.Height());
    m_dc.SelectObject(&bitamp);
    m_dc.SetBkMode(1);
    m_dc.SetTextColor(RGB(0,0,0));
    //m_dc.SetBkColor(RGB(0x2d,0x6c,0xaf));
    m_dc.BitBlt(0,0,parentRect.Width(),parentRect.Height(),pDC,parentRect.left,parentRect.top,SRCCOPY);
    int top=0;
    //Graphics g(m_dc.m_hDC);
    switch(m_iWhichPic)
    {
    case 0://选中,不在上面
    //if (m_bIsSpecial)
    // CUtil::DrawBitmap(m_dc.m_hDC,m_checked_normal,3,top,true);
    // //g.DrawImage(m_checked_normal,0,0);
    //else
    CUtil::DrawBitmap(m_dc.m_hDC,m_checked_normal,3,top,true);
    //g.DrawImage(m_checked_normal,0,0);
    break;
    case 1://选中,在上面
    //if (m_bIsSpecial)
    // CUtil::DrawBitmap(m_dc.m_hDC,m_checked_over,3,top,true);
    // //g.DrawImage(m_checked_over,0,0);
    //else
    CUtil::DrawBitmap(m_dc.m_hDC,m_checked_over,3,top,true);
    break;
    case 2://unchecked not on it
    CUtil::DrawBitmap(m_dc.m_hDC,m_uncheck_normal,3,top,true);
    break;
    case 3://unchecked on it
    CUtil::DrawBitmap(m_dc.m_hDC,m_uncheck_over,3,top,true);
    break;
    }
    m_dc.TextOutW(32+10,6,m_szText);
    dc.BitBlt(0,0,parentRect.Width(),parentRect.Height(),&m_dc,0,0,SRCCOPY);
    ReleaseDC(pDC);响应了这个消息
    BM_SETCHECK
    OnClicked
    OnMouseMove
      

  2.   

    发现了,以上方法有些问题
    需要给控件加上自绘属性
    然后在drawitem里面画还在学习中
      

  3.   

    哎,结贴吧,多简单的问题控件增加 自绘属性,然后增加函数 DrawItem然后在里面画界面
    增加Mousemove属性
    WindowProc 函数里面 处理这个 BM_SETCHECK与 BM_GETCHECK
    自己保证选中与没选中状态
    然后DrawItem里面根据状态.画不同的图片完事..