想在控件上画图,不想在OnDraw中画,怎样取控自己的hdc?

解决方案 »

  1.   

    如果想在控件上画图,那么就可以根据控件的ID来获取它的HDC(假设控件ID为IDC_STATIC_PANEL)HDC hDC = GetDlgItem(IDC_STATIC_PANEL)->GetDC()->GetSafeHdc();
      //或者
    HDC hDC = GetDlgItem(IDC_STATIC_PANEL)->GetDC()->m_hDC;
      

  2.   

    补允一下.我是在写控件程序,不是在程序中调用控件.
    控件程序中画图
    void CCtrl::OnDraw(
    CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
    {
    // TODO: 用您自己的绘图代码替换下面的代码。
    pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    pdc->DrawText("Control",CRect(rcBounds),DT_CENTER);}
    我不想在这里画图,想出这个HDC,在控件程序的其它地方画图,怎样在控件程序中取HDC?
      

  3.   

    HDC CreateCompatibleDC( pdc );
      

  4.   

    this->GetDC()->GetSafeHdc() ;
    ...
    this->ReleaseDC();
      

  5.   

    我不想在这里画图,想出这个HDC,在控件程序的其它地方画图,怎样在控件程序中取HDC?
    ????????????是不是想在别的控件里面画呢?如果是的话,我上面的回复已经可以实现了void CCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
    {
    //假设控件ID为IDC_STATIC_PANEL
    pDC = GetDlgItem(IDC_STATIC_PANEL)->GetDC();
    pDC->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    pDC->DrawText("Control",CRect(rcBounds),DT_CENTER);
    ReleaseDC(pDC);
    }如果不是这个意思,麻烦楼主把问题写清楚