从资源中加载显示位图,通过双缓冲的方法显示。

从文件加载位图 看这篇 http://www.cppblog.com/alantop/archive/2008/03/14/44414.html

如何使用下面的代码。
1. 把位图导入资源。
资源->入->选bmp类型->导入->从硬盘中选择导入的bmp图即可。导入后,自动生成ID为IDB_BITMAP1的资源Bitmap.
2. 把下面代码复制到视图的OnDraw(CDC* pDC)函数

None.gif     CBitmap bmp;
None.gif    
if  (bmp . LoadBitmap(IDB_BITMAP1))
None.gif    {
None.gif        
//  Get the size of the bitmap
None.gif
        BITMAP bmpInfo;
None.gif        bmp
. GetBitmap( & bmpInfo);
None.gif        
None.gif        
//  Create an in-memory DC compatible with the
None.gif        // display DC we're using to paint

None.gif
        CDC dcMemory;
None.gif        dcMemory
. CreateCompatibleDC(pDC);
None.gif
None.gif
None.gif        
None.gif        
//  Select the bitmap into the in-memory DC
None.gif
        CBitmap *  pOldBitmap  =  dcMemory . SelectObject( & bmp);
None.gif        
None.gif        
//  Find a centerpoint for the bitmap in the client area
None.gif
        CRect rect;
None.gif        GetClientRect(
& rect);
None.gif        int nX 
=  rect . left  +  (rect . Width()  -  bmpInfo . bmWidth)  /   2 ;
None.gif        int nY 
=  rect . top  +  (rect . Height()  -  bmpInfo . bmHeight)  /   2 ;
None.gif
None.gif        POINT ptstart
,  ptend;
None.gif        ptstart
. =  ptstart . =   0 ;
None.gif        ptend
. =  ptend . =   500 ;
None.gif        
None.gif        
None.gif        dcMemory
. MoveTo(ptstart);
None.gif        dcMemory
. LineTo(ptend);
None.gif        
None.gif
None.gif        
None.gif        
//  Copy the bits from the in-memory DC into the on-
None.gif        // screen DC to actually do the painting. Use the centerpoint
None.gif        // we computed for the target offset.

None.gif
        pDC -> BitBlt( 0 ,   0 ,  bmpInfo . bmWidth ,  bmpInfo . bmHeight ,   & dcMemory ,  
None.gif            
0 ,   0 ,  SRCCOPY);
None.gif        
None.gif        dcMemory
. SelectObject(pOldBitmap);
None.gif
None.gif        SIZE si;
None.gif        si
. cx  =  bmpInfo . bmWidth;
None.gif        si
. cy  =  bmpInfo . bmHeight;
None.gif        SetScrollSizes(MM_TEXT
,  si);
None.gif    }
None.gif    
else
None.gif        TRACE0(
" ERROR: Where's IDB_BITMAP1?\n " );

3. 代码的操作思路.
   双缓冲,简单的说就是把画图的所有动作都在内存DC上完成,然后通过BitBlt拷贝到屏幕DC上。
   a. 首先建立一个CBitmap对象
   b. 然后,建立一个和显示设备兼容的内存DC
   c. 然后把CBitmap放在建立的内存DC中
   d. 然后,在内存DC上做一些画图的动作
   e. 将内存DC中的东西,显示在屏幕上
4. 代码中的一些其他操作
   a. 我们常用SelectObject把新的东西选入。把老的东西作为返回值,保存。再使用完毕后,在用SelectObject重新启用老的东西
   b. 在代码里面有设置滚动条的地方。 使用CScrollView类作为基类。给SIZE结构体赋值,然后调用SetScrollSizes做设置,滚动条就会自动计算响应的。
博客
32132
07-14 361
07-12 291
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值