一,关于视类的OnDraw(CDC* pDC)
在每次窗口初次出现时,即从无到有会产生WM_PAINT消息让窗口重绘,即窗口要出现时就会进入这个函数。所以如果希望输入的图形或文字能够始终在窗口上显示可在这里添加载入和显示位图(此位图是已经存在的位图,不是DAT格式的原始二进制数据)的代码。该方法缺乏灵活性,所显示的图片的大小也有一定的限制。
二,思路
(1)调用Cbitmap类的LoadBitmap函数调入位图资源。
(2)调用CDC::CreatCompatibleDC函数创建一个内存设备环境,以便位图在内存中保留下来,并于指定设备环境兼容。
(3)调用CDC::SelectObject函数将位图对象选入内存设备环境中。
(4)调用CDC::BitBIt或CDC::StrechBlt函数将位图复制到实际设备环境中。
(5)使用之后,恢复原来的内存设备环境。
三,在视类的OnDraw(CDC* pDC)函数中添加代码
<span style="font-family:Times New Roman;font-size:12px;">// 定义位图的变量 CBitmap m_bmp; //位图对象m_bmp调用cbitmap的成员函数调入位图资源,IDB_BITMAP1就是载入的位图 m_bmp.LoadBitmap(IDB_BITMAP1); //The BITMAP structure defines the height, width, color format, and bit values of a logical bitmap. //定义一个位图结构体的变量 BITMAP bm; m_bmp.GetObject(sizeof(bm),&bm); //定义一个内存设备环境 CDC dcmem; //并创建一个内存设备环境 dcmem.CreateCompatibleDC(pDC); //将位图选入内存设备环境中 CBitmap *poldbmp=dcmem.SelectObject(&m_bmp); //将位图复制到实际的设备环境中显示,此时就是实际位图的大小 //pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcmem,0,0,SRCCOPY); BITMAP bmpinfo; m_bmp.GetObject(sizeof(bmpinfo),&bmpinfo); //CRect RECT; //GetClientRect(&RECT); pDC->StretchBlt(0,0,400,400,&dcmem,0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,SRCCOPY );</span>
b,将第一段红色代码,取消其注释:位图被原封不动复制进了实际的设备环境
c,将第2,3段红色代码取消注释,第一段不取消,修改400,400的图像大小为rect.Width(),rect.Height()