VC绘图总结

VC的绘图可以采用BitBlt函数。
我们这里先讲授非动态链接库的方法:
 HDC DCBak;
HBITMAP bit,bitold;

bit=(HBITMAP)LoadImage
    (AfxGetInstanceHandle(),
     cc,
     IMAGE_BITMAP,
     0, 
     0, 
     LR_LOADFROMFILE|LR_CREATEDIBSECTION
    );//得到对应图片的句柄放置在bit中
 if(bit==NULL) return FALSE; //如果不能得到则返回false
 DIBSECTION ds; //一个位图的信息单元
 BITMAPINFOHEADER &bm = ds.dsBmih;//dsBmih实际为位图的BITMAPINFOHEADER
 GetObject(bit,sizeof(ds),&ds);//将句柄bit中的位图信息放置入ds
 w = bm.biWidth;//位图的宽度
 h = bm.biHeight;//位图的高度

 DCBak =CreateCompatibleDC(0);
 bitold=(HBITMAP)SelectObject(DCBak,bit);

CClientDC dc(this);
BitBlt(dc.GetSafeHdc(),0,0,w,h,DCInfor,0,0,SRCCOPY);

上面就完成了绘图功能!

下面我们介绍DLL方式的绘图方式,这里的绘图跟其它的没有任何区别,我们只是要讲下怎么加载这个动态链接库的信息。假设我们已经编写好了DLL,且在里面有资源IDB_BITMAP1,我们这时只需拷贝DLL到目标文件,并且将资源头文件加入到目标文件中,这时我们在设置 AfxSetResourceHandle后就可以使用DLL中的资源。详细代码如下:(我自己编写一个测试的dll,名字叫做 Res.dll)

 HINSTANCE hLib=LoadLibrary("Res.dll"); 

HINSTANCE hold=AfxGetResourceHandle();
 AfxSetResourceHandle(hLib);  
   
   
 char str[20];
 LoadString(hLib,IDS_STRING1,str,sizeof(str));
 MessageBox(str);
 HDC DCBak;
 HBITMAP bit,bitold;
 DCBak =CreateCompatibleDC(0);

//以下函数选择之一即可
// bit=LoadBitmap(hLib,MAKEINTRESOURCE(IDB_BITMAP1));
 bit= (HBITMAP)::LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP2),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
 if(bit==NULL)
  MessageBox("bit==NULL");
 bitold=(HBITMAP)SelectObject(DCBak,bit);
 CClientDC dc(this);
 BitBlt(dc.GetSafeHdc(),0,0,640,480,DCBak,0,0,SRCCOPY);

记住最后要释放DLL

 FreeLibrary(hLib);
 AfxSetResourceHandle(hold);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值