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);