mfc 对话框类中关于cpaintdc与cclientdc的疑惑

panyuanzhi123 2012-11-23 07:47:51
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();
}
请高手指点
...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
panyuanzhi123 2012-11-24
  • 打赏
  • 举报
回复
引用 1 楼 tiger9991 的回复:
我曾经有个帖子特地是讲CPaintDC,CClientDC,CWindowsDC的区别的。 CPaintDC是OnPaint的特权。在OnPaint外面可以用CClientDC(特别是View窗体)
我那段代码就是在onpaint中使用的呀,大神可以把你之前的那个帖子地址发一下吗?
schlafenhamster 2012-11-23
  • 打赏
  • 举报
回复
CPaintDC dc(this); // 用于绘制的设备上下文 会先擦除 背景
傻X 2012-11-23
  • 打赏
  • 举报
回复
我曾经有个帖子特地是讲CPaintDC,CClientDC,CWindowsDC的区别的。 CPaintDC是OnPaint的特权。在OnPaint外面可以用CClientDC(特别是View窗体)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧