我一直在尝试将工具栏添加到对话框,但当我调用 m_ToolBar.LoadToolBar 时它失败了。
我创建了一个新的工具栏资源并将其命名为 IDR_TOOLBAR1,然后将其添加到代码中
if(!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |
WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
{
EndDialog(IDCANCEL);
}
出于某种原因,m_ToolBar.LoadToolBar(IDR_TOOLBAR1) 返回 false。我在 Visual Studio 中创建了工具栏资源,因此我认为我的 IDR_TOOLBAR1 设置正确。
什么可能导致加载失败?
编辑:我不确定这是否相关,但我注意到工具栏的 ID 与另一个控件的 ID 匹配
#define IDC_EDIT_EVENTS 213
#define IDR_TOOLBAR1 213
在自动生成的资源文件中
edit2:当我尝试调试 LoadToolBar 时,我发现它调用了 MAKEINTRESOURCE,这似乎返回了错误的指针。 MAKEINTRESOURCE 只是一堆 Actor ,所以我不确定这里的问题是什么。
最佳答案
MAKEINTRESOURCE 将返回一个看似错误的指针,但这是正常的。资源可以是字符串或转换为字符串的整数。
这段代码是否偶然被编译为 DLL?如果是这样,也许您需要将以下代码添加到该函数的顶部,以允许 MFC 确定从哪个 DLL 中获取它。
AFX_MANAGE_STATE(AfxGetStaticModuleState());
关于c++ - 为什么 CToolBar::LoadToolBar 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773227/