其他都自绘成功了,就是边框不行
在drawitem中我试过 
crect rect;
getclientrect(&rect);
pdc->画矩形(rect);
这样画出来的边框 刚开始显示不出来,要点一下才行,而且当点击下拉那个按钮时,不知道响应了什么
事件,边框点的那一瞬间又会变回系统边框,
还有下拉那个边框怎么自绘?谢谢

解决方案 »

  1.   

    组合框仅仅使用自绘是不够的,还要使用子类化。自绘属性仅仅是针对其下拉列表而言的。如果你是用MFC的话,从CCombobox派生一个你自己的类,截获它的WM_PAINT,WM_ERASEBKGND,WM_NCPAINT等消息进行绘制。另外那个按钮其实不是一个控件,是要你自己画出来的。
      

  2.   

    试试:
    void CMyComB0::OnPaint() 
    {
    CComboBox::OnPaint();// 先让combo画一切
    //
    #ifdef NO_BORDER
    CDC *pDC=GetDC(); // device context for painting
    CRect rc;
    GetClientRect(&rc);
    CBrush brsh;
    brsh.CreateSolidBrush(RGB(255,255,255));
    CBrush *pBrshOld=pDC->SelectObject(&brsh);
    pDC->FrameRect(&rc,&brsh);//去一个框
    rc.DeflateRect(1,1);
    pDC->FrameRect(&rc,&brsh);//可能要去2个框
    pDC->SelectObject(pBrshOld);
    #endif
    }
      

  3.   

    边框是getwindowrect
    以下你可以参考:注意响应这些消息:WM_MOVE||WM_PAINT||WM_NCPAINT|| WM_NCACTIVATE WM_NOTIFYCWindowDC wdc(this);
    CBitmap bit;
    bit.LoadBitmap(IDB_BG);//加载位图 CDC memDC;
    memDC.CreateCompatibleDC(&wdc);
    memDC.SelectObject(&bit);//将位图选进DC内存中 //caption
    //可以重画标题兰,使用函数 
    CRect   rtWnd,   rtTitle; 
    GetWindowRect(&rtWnd);   
    //取得标题栏的位置 
    int nBorder =GetSystemMetrics(SM_CYSIZEFRAME );//围绕可改变大小的窗口的边框的厚度
    rtTitle.left   =   GetSystemMetrics(SM_CXFRAME); 
    rtTitle.top   =   GetSystemMetrics(SM_CYFRAME); 
    rtTitle.right   =   rtWnd.right   -   rtWnd.left   -   GetSystemMetrics(SM_CXFRAME); 
    rtTitle.bottom   =   rtTitle.top   +   GetSystemMetrics(SM_CYSIZE);//+100); 
        //画上边线
    wdc. StretchBlt(0,   0,   rtWnd.right,   rtTitle.top,  &memDC,   4,   4, nBorder,nBorder,  SRCCOPY); 
    //画左边线
    wdc. StretchBlt(0,   0,   nBorder,   rtWnd.Height(),  &memDC,   4,   4, nBorder,nBorder,  SRCCOPY); 
    //画右边线
    wdc. StretchBlt(rtTitle.right,   0,   rtWnd.right,   rtWnd.Height(),  &memDC,   4,   4, nBorder,nBorder,  SRCCOPY); 
    //画底边线
    wdc. StretchBlt(0,   rtWnd.Height()-nBorder,   rtWnd.right+nBorder,   rtWnd.Height(),  &memDC,   4,   4, nBorder,nBorder,  SRCCOPY); 
    //画标题背景
    wdc. StretchBlt(rtTitle.left,   rtTitle.top,   rtWnd.Width(),   rtTitle.Height(),  &memDC,   4,   4, nBorder,nBorder,  SRCCOPY); 
    //画标题文字
    COLORREF oldTextColor = wdc.SetTextColor(RGB(255,255,255));
    INT oldBkMode = wdc.SetBkMode(TRANSPARENT);
    wdc.TextOut(0.5*rtWnd.Width()-m_szTitle.GetLength()-40, (rtTitle.Height()+nBorder)*0.5, this->m_szTitle);
    wdc.SetTextColor(oldTextColor);
    wdc.SetBkMode(oldBkMode);

    bit.DeleteObject();
    memDC.DeleteDC();
    this->ReleaseDC(&wdc);
    //Invalidate();
    //UpdateWindow();
      

  4.   

    我试过的!
    void CMyComB0::OnPaint()
    忘了ReleaseDC()