怎么把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();
要画控件,用这种