资源DLL是怎么回事?
其实也就是建一个包含资源的DLL,加载该DLL并从该DLL读取相关资源。API如下:
HINSTANCE LoadLibrary(
  LPCTSTR lpLibFileName   // address of filename of executable module
);

HGLOBAL LoadResource(
  HMODULE hModule, // resource-module handle
  HRSRC hResInfo   // resource handle
);

HRSRC FindResource(
  HMODULE hModule, // module handle
  LPCTSTR lpName,  // pointer to resource name
  LPCTSTR lpType   // pointer to resource type
);

void AfxSetResourceHandle( HINSTANCE hInstResource );]
HINSTANCE AfxGetResourceHandle( );
CString::LoadString(UINT nID) calls:
   int AFXAPI AfxLoadString(UINT nIDS, LPTSTR lpszBuf, UINT nMaxBuf = 256);

MFC怎么在应用程序框架中自动加入资源(mfc的光标对话框等)
MFC的文件保存在如下位置:
X:\Microsoft Visual Studio\VC98\MFC\Include
X:\Microsoft Visual Studio\VC98\MFC\Lib
X:\Microsoft Visual Studio\VC98\MFC\SRC
其中include文件包含了资源的头文件.h和定义文件.rc

MFC的这些资源怎么被神不知鬼不觉的编译链接到MFC程序中?
见下图:

  resource1.jpg

resource2.jpg

resource3.jpg

resource4.jpg

resource5.jpg

程序源代码文件的物理位置规划

虽然不能直接把资源放到静态链接库中,但只要稍做变通,就能弄出一个可以到处使用的对话框静态链接库了。

但还有个问题是如何避免资源ID的冲突

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS                     1
#define _APS_NEXT_RESOURCE_VALUE        227
#define _APS_NEXT_COMMAND_VALUE         32831
#define _APS_NEXT_CONTROL_VALUE         1274
#define _APS_NEXT_SYMED_VALUE           104
#endif
#endif

只有注册用户登录后才能发表评论。

posts - 49, comments - 14, trackbacks - 0, articles - 0

Copyright © Raistlin