设为首页 加入收藏

TOP

MFC学习笔记之绘图控制(三)
2014-11-23 21:30:32 】 浏览:1816
Tags:MFC 学习 笔记 绘图 控制
olor);
}
自己写一个好看的按钮的 DrawItem函数还是很有难度的,现在很多人都是用强大的CButtonST类,在网上可以找到,不过该类的方法有很多,还没去研究。

最后是位图的显示。要显示一副位图,主要的过程是:先创建位图,然后创建兼容DC,将位图放入兼容DC中,最后将兼容DC中的位图贴到当前DC中。

兼容DC的创建是使用 CreateCompatible 函数。

view plain
virtual BOOL CreateCompatibleDC( CDC* pDC );
该函数参数就是当前DC的指针,创建的兼容DC就是要与之兼容。兼容DC实际上是一个内存块,表示一个显示的表面。如果想把图像复制到实际的DC中,可以先用兼容DC在内存中准备这些图像,然后再将其复制到实际DC中。当兼容DC被创建的时候,它的显示表明标准是一个像素的大小。在应用程序可以使用内存设备上下文进行绘图操作之前,必须将一个具有正确高度和宽度的位图选入设备上下文,这时,内存设备上下文的显示表面大小就由当前选入的位图决定了。

窗口绘制的过程是分两个步骤的:首先擦除窗口背景,然后在进行窗口重绘。

当窗口背景被擦除的时候会发送一个 WM_ERASEBKGND 消息,因此可以在该消息的响应函数中进行位图的显示:

view plain
BOOL CGraphicView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);

BITMAP bmp;
bitmap.GetBitmap(&bmp);

CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);

dcCompatible.SelectObject(&bitmap);

CRect rect;
GetClientRect(&rect);
// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
在该函数的最后 不可以返回调用基类的函数,不然位图只会显示完马上就被擦除,应该然后TRUE。

然后呢,在显示位图的时候,如果想1:1显示的话,就用BitBlt函数,如果想位图可以根据客户区大小进行拉伸或者压缩,使得可以显示整张位图的话,就要用StretchBlt函数。

view plain
BOOL BitBlt ( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc,
int ySrc, DWORD dwRop );
view plain
BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
第二个函数就比第一个多了两个参数,就是原来那副位图的宽度和高度。

作者“Kay's space”

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC控制台颜色设置 下一篇TFS 无法使用,显示 "No Com..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目