我一直在尝试添加一个工具栏到一个对话框,当我调用m_ToolBar.LoadToolBar失败。为什么CToolBar :: 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
是自动生成的资源文件
编辑2:当我试图调试LoadToolBar时,我发现它调用MAKEINTRESOURCE,这似乎是返回坏指针。 MAKEINTRESOURCE只是一堆强制转换,所以我不确定这里有什么问题。
我改变了ID在Resource.h文件到一个未使用的号码,它仍然返回false当我尝试加载它。 作为一个侧面的问题,为什么Visual Studio会生成已被使用的ID?我查看了整个文件,它以前也好几次完成了。 – Marzipan 2012-03-19 16:34:16
IDC_EDIT_EVENTS是一个与资源无关的控件ID。 IDR_TOOLBAR1是两件事情的资源标识符:1)一个工具栏资源,以及2)一个对应的位图。遍历LoadToolBar()的代码并找出它是否无法加载工具栏资源或关联的位图。 – 2012-03-19 16:37:33
我很困惑。我可以从Microsoft服务器加载调试符号,但我无法真正“进入”代码。该代码本身被Microsoft隐藏,只能在程序集中查看。你能告诉我你是如何进入代码的? – Marzipan 2012-03-19 16:55:43