makeintresource
时间: 2023-12-21 07:06:04 浏览: 20
`MAKEINTRESOURCE` 是一个 Windows API 宏,它将整数标识符转换为资源标识符。这个宏通常用于在 Windows 应用程序中加载资源,比如图标、位图、菜单等。在使用这些资源时,我们需要将其标识符转换为资源句柄,而 `MAKEINTRESOURCE` 就是用来完成这个转换的。具体使用方法可以参考 Microsoft 的官方文档。
相关问题
优化这段代码HBITMAP hBmp1 = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); HBITMAP hBmp2 = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2)); m_pic1.SetBitmap(hBmp1); m_pic2.SetBitmap(hBmp2);
可以考虑使用资源文件的方式来加载位图,以减少代码量和提高代码可读性。具体操作如下:
1. 在资源文件中添加位图资源,例如将 IDB_BITMAP1 和 IDB_BITMAP2 添加到资源文件中。
2. 在代码中使用以下方式加载位图:
```c++
// 加载资源
HINSTANCE hInst = AfxGetInstanceHandle();
HBITMAP hBmp1 = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
HBITMAP hBmp2 = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));
// 设置位图
m_pic1.SetBitmap(hBmp1);
m_pic2.SetBitmap(hBmp2);
```
这样可以避免硬编码位图路径,使代码更加清晰易懂。同时,如果需要修改位图资源,只需要在资源文件中修改即可,无需修改代码。
可以加载.res文件的加载宏
在 Windows 系统中,可以使用以下宏定义来加载 .res 文件:
```cpp
#define IS_INTRESOURCE(_r) ((((ULONG_PTR)(_r)) >> 16) == 0)
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
#endif
HINSTANCE hInst = GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hInst, MAKEINTRESOURCE(IDR_MYRES), L"MYRESTYPE");
HGLOBAL hResData = LoadResource(hInst, hResInfo);
LPBYTE pData = (LPBYTE)LockResource(hResData);
DWORD dwSize = SizeofResource(hInst, hResInfo);
```
其中,`IDR_MYRES` 表示 .res 文件中资源的 ID,`MYRESTYPE` 表示资源类型。需要注意的是,加载的资源需要在编译时嵌入到 .res 文件中。