读书人

如何把CPaintDC和控件关联

发布时间: 2014-04-29 17:08:21 作者: rapoo

怎么把CPaintDC和控件关联
请问CPaintDC和控件关联起来是这样做吗?CPaintDC dc(GetDlgItem(IDC_RSS_PREVIEW))但是并没有画出来。
我是在onPaint中做的:

C/C++ code
void CFilePreviewDlg::OnPaint(){        CPaintDC dc(GetDlgItem(IDC_RSS_PREVIEW));        CRect rect;    GetDlgItem(IDC_RSS_PREVIEW)->GetClientRect(&rect);        HDC memDC = CreateCompatibleDC (dc.m_hDC);    HBITMAP memBM = CreateCompatibleBitmap (dc.m_hDC, rect.right, rect.right );    SelectObject(memDC, memBM);        Color backgroundColor(0, 0, 0, 0);    SolidBrush backgroundBrush(backgroundColor);    // Fill background    RectF fillRect(0.0f, 0.0f, (float) rect.right, (float) rect.right);    m_pBackBufferG->FillRectangle(&backgroundBrush, fillRect);        ......}

上述代码并没有在控件上作画,似乎CPaintDC并没有和控件关联,然而换成下面这样就可以,不知道为什么?
C/C++ code
void CFilePreviewDlg::OnPaint(){        CPaintDC dc(this);        CRect rect;    GetDlgItem(IDC_RSS_PREVIEW)->GetClientRect(&rect);        CWnd *pWnd = GetDlgItem(IDC_RSS_PREVIEW);     CDC *pDC = pWnd->GetDC();    HDC hDC =pDC->GetSafeHdc();        HDC memDC = CreateCompatibleDC (hDC);    HBITMAP memBM = CreateCompatibleBitmap (hDC, rect.right, rect.right );    SelectObject(memDC, memBM);        Color backgroundColor(0, 0, 0, 0);    SolidBrush backgroundBrush(backgroundColor);    // Fill background    RectF fillRect(0.0f, 0.0f, (float) rect.right, (float) rect.right);    m_pBackBufferG->FillRectangle(&backgroundBrush, fillRect);        ......}


[解决办法]
CPaintDC只适合在窗口、控件自身的OnPaint里使用.
否则的话,应该用GetDC、GetWindowDC获取窗口、控件的DC







[解决办法]
CPaintDC值针对本控件的WM_PAINT消息(窗体也算控件一种)。

GetDlgItem(IDC_RSS_PREVIEW)->GetDC();
要画控件,用这种

读书人网 >VC/MFC

热点推荐