mfc 对话框类中关于cpaintdc与cclientdc的疑惑
CClientDC dc(this);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CRect rect;
GetClientRect(&rect);
CBitmap m_bmp;
m_bmp.LoadBitmapW(IDB_CHESSBOARD);
BITMAP bitmap;
m_bmp.GetBitmap(&bitmap);
CBitmap * poldbmp=memdc.SelectObject(&m_bmp);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
memdc.SelectObject(poldbmp);
ReleaseDC(&memdc);
这段代码把CClientDC dc(this);换成CPaintDC 就画不出图来了,这是为什么?我对着书上的教程做的,书上的教程就是用的CPaintDC它们之间有什么区别吗?不都是在客户区画图么? 在MFC自动生成的代码中画图标用的就是CPaintDC,
这是MFC生成的画图标代码
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
请高手指点