如题 以下代码加载位图后 坐标系的颜色就变了
void CYZView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
CDC dc;
CDC *pdc = &dc;
CBitmap bitmap;
CBitmap* pOldBitmap;
CRect client;
CRect rect;
//检取无效区
pDC->GetClipBox(client);
//检取整个客户区
GetClientRect(rect);
if(dc.CreateCompatibleDC(pDC))
{
//创建一个与pDC兼容的内存设备环境
if(bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()))
{
//创建一与pDC兼容的位图,大小为整个客户区
//使dc与pDC具有同样的映射关系
OnPrepareDC(pdc,NULL);
//将位图选入内存环境
pOldBitmap = pdc->SelectObject(&bitmap);
//使dc的整个客户区都成无效区
pdc->SelectClipRgn(NULL);
//再“与上”检取的无效区,使内存环境与pDC检取的无效区相等
dc.IntersectClipRect(client);
}
}
CBrush brush;
if(!brush.CreateSolidBrush(RGB(0,0,0)))
return;
brush.UnrealizeObject();
//将dc的作图区刷新成背景色
dc.FillRect(client,&brush);
//将所有的画图对象在内存裁减区内重画
//在dc中绘图
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
CPen *pOldPen = dc.SelectObject(&pen);
CRect rc;
GetWindowRect(rc);
m_height = rc.Height();
m_width = rc.Width(); dc.MoveTo(10,rc.Height()/2);
dc.LineTo(rc.Width()-10,rc.Height()/2);
dc.MoveTo(rc.Width()/2,10);
dc.LineTo(rc.Width()/2,rc.Height()-10);
dc.SelectObject(pOldPen); dc.TextOut(rc.Width()/2-1,0,"z");
dc.TextOut(rc.Width()-10,rc.Height()/2-5,"y"); CPen pen2;
pen2.CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen2 = dc.SelectObject(&pen2);
dc.MoveTo(10,m_zpos);
dc.LineTo(rc.Width()-10,m_zpos);
dc.SelectObject(pOldPen); //Copy Bitmap
//将内存裁减区的位图拷贝到窗口裁减区
pDC->BitBlt(0,0,rect.Width(),rect.Height(),pdc,0,0,SRCCOPY);
//dc.SelectObject(pOldBitmap); CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
CDC dc2;
dc2.CreateCompatibleDC(pDC);
dc2.SelectObject(&bmp);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc2,0,0,MERGEPAINT);//MERGEPAINT}
void CYZView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
CDC dc;
CDC *pdc = &dc;
CBitmap bitmap;
CBitmap* pOldBitmap;
CRect client;
CRect rect;
//检取无效区
pDC->GetClipBox(client);
//检取整个客户区
GetClientRect(rect);
if(dc.CreateCompatibleDC(pDC))
{
//创建一个与pDC兼容的内存设备环境
if(bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()))
{
//创建一与pDC兼容的位图,大小为整个客户区
//使dc与pDC具有同样的映射关系
OnPrepareDC(pdc,NULL);
//将位图选入内存环境
pOldBitmap = pdc->SelectObject(&bitmap);
//使dc的整个客户区都成无效区
pdc->SelectClipRgn(NULL);
//再“与上”检取的无效区,使内存环境与pDC检取的无效区相等
dc.IntersectClipRect(client);
}
}
CBrush brush;
if(!brush.CreateSolidBrush(RGB(0,0,0)))
return;
brush.UnrealizeObject();
//将dc的作图区刷新成背景色
dc.FillRect(client,&brush);
//将所有的画图对象在内存裁减区内重画
//在dc中绘图
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
CPen *pOldPen = dc.SelectObject(&pen);
CRect rc;
GetWindowRect(rc);
m_height = rc.Height();
m_width = rc.Width(); dc.MoveTo(10,rc.Height()/2);
dc.LineTo(rc.Width()-10,rc.Height()/2);
dc.MoveTo(rc.Width()/2,10);
dc.LineTo(rc.Width()/2,rc.Height()-10);
dc.SelectObject(pOldPen); dc.TextOut(rc.Width()/2-1,0,"z");
dc.TextOut(rc.Width()-10,rc.Height()/2-5,"y"); CPen pen2;
pen2.CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen2 = dc.SelectObject(&pen2);
dc.MoveTo(10,m_zpos);
dc.LineTo(rc.Width()-10,m_zpos);
dc.SelectObject(pOldPen); //Copy Bitmap
//将内存裁减区的位图拷贝到窗口裁减区
pDC->BitBlt(0,0,rect.Width(),rect.Height(),pdc,0,0,SRCCOPY);
//dc.SelectObject(pOldBitmap); CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
CDC dc2;
dc2.CreateCompatibleDC(pDC);
dc2.SelectObject(&bmp);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc2,0,0,MERGEPAINT);//MERGEPAINT}
解决方案 »
- 函数的返回值是cstring数组,在另一函数中调用此函数如何获得返回值
- 一个一个数的输入
- 奇怪的问题:GetDocument()怎么为空?
- 急!急!急! 调用哪个API函数可以实现复制和粘贴?
- 问一个巨菜的问题:在一个窗口中可以同时弹出多个非模式对话框吗?
- 新建了一个 vc群 欢迎大家来讨论!4296702
- 请问如何同时控制两个打印机?
- 菜鸟一个小问题,怎么在基于单文档的工程里,在单文档里显示图片,谢谢,送高分给高手。。。
- 有哪些windows编程的教材推荐一下呗
- 请问:怎样得到client area的矩形?
- GDI+的DrawString无法正确绘制不透明文本
- 关于 类似MSDN一样的 帮助文件如何制作?
http://download.csdn.net/source/1381542