DLL 是仅包含资源(如图标、位图、串和对话框) DLL使用纯资源 DLL 是在多个的间共享同组资源好思路方法提供其资源被针对多种语言进行本地化应用也是种好思路方法
若要创建纯资源 DLL请创建个新 Win32 DLL(非 MFC)项目并将资源添加到此项目
在“新建项目”对话框中选择“Win32 项目”并在“Win32 项目向导”中指定 DLL 项目类型
为 DLL 创建个包含资源(如串或菜单)新资源脚本并保存该 .rc 文件如果该.rc文件包含位图用记事本打开它可以看到下面这样段
DIB_BKGD_HF BITMAP \"bkgd_**.bmp\"
DIB_BKGD_GT BITMAP \"bkgd_***.bmp\"
DIB_BKGD_BF BITMAP \"bkgd_*****.bmp\"
这些就是针对位图申明将相应位图添加到这个里面就行了
在“项目”菜单上单击“添加现有项”然后在项目中插入这个新 .rc 文件
指定 /NOENTRY 链接器选项/NOENTRY 防止链接器将 _ 引用链接到 DLL 中;此选项是创建纯资源 DLL 所必需
生成 DLL
使用纯资源 DLL 应用应 LoadLibrary 来显式链接到 DLL若要访问资源请般 FindResource 和 LoadResource这两个对任何类型资源都有效或下列资源特定的:
FormatMessage
LoadAccelerators
LoadBitmap
LoadCursor
LoadIcon
LoadMenu
LoadString
使用完资源后应用应 FreeLibrary
下面部份是介绍说明下资源中BMP如何动态加载并显示
hmodule = LoadLibrary(\"ExtendDLL.dll\");
HDC m_hdcMem;
m_hdcMem = CreateCompatibleDC(hdc);
BITMAP bm;
RECT rect;
HBITMAP hBitmap = LoadBitmap(hmodule,\"DIB_BKGD_HF\"); //MAKEINTRESOURCE(IDB_BITMAP1)
//HBITMAP hBitmap = ( HBITMAP )LoadImage( hmodule, \"DIB_BKGD_HF\",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE);
GetObject( hBitmap, BITMAP, &bm);
SelectObject( m_hdcMem, hBitmap);
GetClientRect( hWnd, &rect);
//::SetStretchBltMode(hdc,COLORONCOLOR); [Page]
//::StretchBlt(hdc, rect.left, rect.top, rect.right, rect.bottom, m_hdcMem, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY);
BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,m_hdcMem,0,0,SRCCOPY);
ReleaseDC( hWnd, m_hdcMem );
FreeLibrary(hmodule);
最新评论