16,472
社区成员
发帖
与我相关
我的任务
分享
这个构造View的代码
pContext.m_pCurrentDoc = new CDlgDocument();
pContext.m_pNewViewClass = RUNTIME_CLASS(CViewTestView);
pView = (CViewTestView *)((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
ASSERT(pView);
pView->m_nMapMode = MM_TEXT;
pView->m_paintbox_w = 800;
pView->m_paintbox_h = 500;
pView->ShowWindow(SW_NORMAL);
pView->MoveWindow(200, 180, 800, 500);
pView->m_type = NONE;
//因为要显示滚动条,所以必须比View的宽高要大
CSize sizeTotal;
sizeTotal.cx = 1000;
sizeTotal.cy = 1000;
pView->SetScrollSizes(MM_TEXT, sizeTotal);
/////////////////
View中OnPaint()中的代码
CPaintDC dc(this); // device context for painting
// 不为绘图消息调用 CView::OnPaint()
int width = m_paintbox_w;
int height = m_paintbox_h;
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap; //定义一个位图对象
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dc, width, height);
CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);
//在这里画图
MemDC.FillSolidRect(0, 0, width, height, RGB(255,255,255));
//绘图
Graphics g(MemDC.m_hDC);
Image chiefimage(L"d://Pic_Chief_Speak.bmp");
g.DrawImage(&chiefimage, 0, 0, 60, 60);
//结束画图
dc.BitBlt(0,0,width,height,&MemDC,0,0,SRCCOPY); //绘图完成后的清理,把前面的pOldBit选回来.在删除MemBitmap之前要先从设备中移除它
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();