为什么CToolBar::LoadToolBar会失败

Why would CToolBar::LoadToolBar fail?

本文关键字:失败 LoadToolBar 为什么 CToolBar      更新时间:2023-10-16

我一直试图将工具栏添加到对话框中,当我调用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时,我发现它调用了MAKENTRESOURCE,它似乎返回了错误的指针。MAKENTRESOURCE只是一堆演员阵容,所以我不确定这里的问题是什么。

MAKENTRESOURCE将返回一个看起来不正确的指针,但这是正常的。资源可以是字符串,也可以是字符串形式的整数。

这段代码是偶然被编译成DLL的吗?如果是这样的话,您可能需要将以下代码添加到函数的顶部,以允许MFC确定从哪个DLL获取它。

AFX_MANAGE_STATE(AfxGetStaticModuleState());