我想在范围为(0,0,300,300)的一个静态文本上作图,我的思路是这样的:
CDC MemDC;//定义设备对象
MemDC.CreateCompatibleDC(NULL);//建立与屏幕兼容的内存显示设备
MemBitmap.CreateCompatibleBitmap(pDC,m_iClientW,m_iClientH);//建立与屏幕兼容的位图
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
CRect clientRect; 
CWnd *pwnd = GetDlgItem(IDC_STATIC1);//获得静态文本的ID
MemDC.Rectangle(clientRect);  //在这个静态文本中显示
希望前辈帮看看还有哪些地方不妥,小弟谢过了!40分送上

解决方案 »

  1.   

    CWnd *pwnd = GetDlgItem(IDC_STATIC1);//获得静态文本的ID ??
    这句话写进来没有用上。。
      

  2.   

    用GDI+的话,很方便的。。FromHwnd()就可以把那个IDC_STATIC1绑定好
      

  3.   


    HWND hWnd = GetDlgItem(IDC_STATIC1)->m_hWnd; //static控件的窗口句柄
    HDC hDC = ::GetDC(hWnd);  //得到窗口的设备内容句柄
    RECT rect;
    ::GetClientRect(hWnd, &rect);  //static控件的大小
    HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 0)); //创建一红色画刷
    ::FillRect(hDC, &rect, hBrush);  //填充static控件 DeleteDC(hDC);
    DeleteObject(hBrush);
      

  4.   

    重载CStatic控件,在其WM_PAINT消息中绘图。
      

  5.   

    呵呵,在解决问题前要明白自己需要如何考虑。
    要在Static控件上绘图,那么就要考虑两个东西
    1.绘制时需要的hDC或者dc
    2.绘图区域的范围。
    清楚之后,参看lizhigang34的代码这个问题就很简单了。
      

  6.   

    我可不可以直接把我画的图BitBlt(145,100,900,350,&MemDC,0,0,SRCCOPY),呢?这样可不可以呢?
      

  7.   

    你是用哪个CDC对象调用的这个函数??
    试试啊
      

  8.   

    我把程序都拷过来吧,大家一起分析分析
    void CNetWatcherViewerView::DrawCurve(CDC* pDC, unsigned int channelIndex)
    {
            CDC MemDC;
    CRect clientRect; CBitmap MemBitmap;
    MemDC.CreateCompatibleDC(pDC);
    CWnd* pWnd = GetDlgItem(IDC_STATIC1);
    pWnd->GetClientRect(&clientRect);
    pDC=pWnd->GetDC();
            MemBitmap.CreateCompatibleBitmap(pDC,m_iClientW,m_iClientH);
            CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
            MemDC.FillSolidRect(0,0,m_iClientW,m_iClientH,RGB(0,0,0));
            CPen newPen(PS_ENDCAP_ROUND , 2, RGB(255,255,255));
            CPen* pOldPen = MemDC.SelectObject(&newPen);
            -----------------画图部分略------------------
            pDC->BitBlt(30,30,clientRect.Width(),clientRect.Height(),&MemDC,0,0,SRCCOPY);
    MemDC.SelectObject(pOldPen);
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    }
    现在运行之后画好的图不在静态文本中,而是在窗体上,为什么没装到静态文本中呢?谢谢
      

  9.   

    你这个pDC是函数传入参数,怎么又重新赋值了?