MFC的OnNcPaint后,怎么自绘边框啊。
我想用图形填充titlebar,谁能给个例子!!!

解决方案 »

  1.   

    为什么我用对话框,重载OnNcPaint,里面什么也不写
    第一次不会绘制边框,可以第二次就绘制了?
    到底什么问题呢?
      

  2.   

    to SoLike(思危) 怎么样用自己的图形画一个标题栏
    非常感谢!给出思想
      

  3.   

    void myDrawCaption(CWnd* pWnd, UINT nIDBmp)
    {
    CDC* pWinDC = pWnd->GetWindowDC(); CRect rtWnd, rcCap;
    pWnd->GetWindowRect(&rtWnd); 
    CPoint point;
    point.x = rtWnd.Width();
    int nMenu = pWnd->GetMenu()->m_hMenu?20:0;// 20 为菜单的高度
    point.y = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME) + 1 + 30 + nMenu;  
    rcCap.SetRect(0, 0, point.x, point.y); CDC memDC;
    memDC.CreateCompatibleDC(pWinDC);
    CBitmap bmp;
    bmp.LoadBitmap(nIDBmp);
    CBitmap* pBmp = (CBitmap*)memDC.SelectObject(&bmp);
    BITMAP bmpInfo;
    bmp.GetBitmap(&bmpInfo); pWinDC->StretchBlt(rcCap.left, rcCap.top, rcCap.Width(), rcCap.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY); memDC.SelectObject(pBmp); pWnd->ReleaseDC(pWinDC);
    }void CMainFrame::OnNcPaint()
    {
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CFrameWnd::OnNcPaint()
    myDrawCaption(this, IDB_BITMAP1);}
      

  4.   

    1、没办法,关闭按钮也要自己绘,你可以也找个位图贴一下,如果不想自己贴,可以调用 DrawFrameControl 来绘制。2、呵呵,你没说边框也要自绘呀。以前有个朋友和交流过skin,等下帮你找找代码,俺还在做饭呢。
      

  5.   

    翻半天也没找到,估计是换了几次工作,拷贝东西时搞丢了,真是可惜。实际边框也好处理,用
    CDC* pWinDC = pWnd->GetWindowDC();CRect rtWnd, rcCap;
    pWnd->GetWindowRect(&rtWnd); 
    pWinDC->FillSolidRect(rcWnd, RGB(255,0,0));就可以连边框和标题一起绘。当然作为一个产品不能这么做,要进行优化,比如把客户区从中分离出去,这样可以减少绘制的工作量。WM_ERASEBKGND 消息直接返回TRUE,防止重复绘制。等等,这个需要你自己研究一下。有问题可以发消息给我,:)