文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MFC DLL中加载图标

MFC DLL中加载图标

时间:2011-05-16  来源:宇智波Q

图标是MFC工程中资源的一种,应用程序中的图标资源可以直接使用LoadImage来获得,在添加图标资源到工程中,然后使用下面语句就可以获得HICON。

// AfxGetApp()->m_hInstance用来获得应用程序实例的句柄
// MAKEINTRESOURCE用来将一个资源的ID转化成字符串
// IMAGE_ICON为资源的类型
// 17, 14为图片大小
HICON hIcon = (HICON)::LoadImage( AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_CLOSE), IMAGE_ICON, 17, 14, 0 );

这样就可以把HICON设置给ImageList,然后用在控件上。
但是如果工程类型是一个DLL的话,这么用就有问题了,因为资源在动态链接库里,AfxGetApp()->m_hInstance获得的是调用该DLL的应用程序的句柄,而不是该
DLL的Handle。这样LoadImage就会去应用程序的资源里面寻找图标IDI_CLOSE,当然会找不到,所以返回的hIcon会为空。使用GetLastError函数,会得到错误1813。
我们调试的时候会发现,AfxGetApp()->m_hInstance返回的handle跟DLL 中DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) 函数传入
的hInstance值是不一样的。DllMain中传入的hInstance才是我们要的DLL的handle。 不过我们可以通过DLL名称来获取它的handle
CString strModuleName = _T("ModuleUD.dll");  // DLL的文件名
  // debug 模式和release模式生成的DLL名称不一样,由于是中文环境,一般都设置了UNICODE
   #ifdef _MSC_VER #ifdef _DEBUG strModuleName = _T("ModuleUD.dll"); #else strModuleName = _T("ModuleU.dll"); #endif #endif HINSTANCE hInstance = GetModuleHandle(strModuleName); HICON hIcon = (HICON)::LoadImage(hInstance, MAKEINTRESOURCE(IDI_CLOSE), IMAGE_ICON, 17, 14, 0);
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载