在使用vs2008 vc增强包的过程中发现一个问题
vs2008 feature pack 中对mfc进行了升级,使得mfc可以很简单的建立像office 2007这种风格的界面。
问题如下:
使用向导建立的mfc office 2007界面可以正常运行.
使用最简单的对话框工程,再来使用office 2007这个时出错,
位置在:
BOOL __stdcall CMFCVisualManagerOffice2007::SetStyle(Style style, LPCTSTR lpszPath)
{
if (m_Style == style && m_hinstRes >(HINSTANCE) 32)
{
return TRUE;
}
{
if (m_Style == style && m_hinstRes >(HINSTANCE) 32)
{
return TRUE;
}
UNREFERENCED_PARAMETER(lpszPath);
CString strStyle(GetStyleResourceID(style));
HINSTANCE hinstRes = AfxFindResourceHandle(strStyle, AFX_RT_STYLE_XML);
CString strStyle(GetStyleResourceID(style));
HINSTANCE hinstRes = AfxFindResourceHandle(strStyle, AFX_RT_STYLE_XML);
if (::FindResource(hinstRes, strStyle, AFX_RT_STYLE_XML) == NULL)
{
TRACE(_T("Cannot load Style: %s\r\n"), strStyle);
ASSERT(FALSE);
return FALSE;
}
{
TRACE(_T("Cannot load Style: %s\r\n"), strStyle);
ASSERT(FALSE);
return FALSE;
}
CleanStyle();
m_Style = style;
SetResourceHandle(hinstRes);
m_bAutoFreeRes = TRUE;
m_Style = style;
SetResourceHandle(hinstRes);
m_bAutoFreeRes = TRUE;
return TRUE;
}
}
你能看出来是什么问题吗?
从代码来看是一个资源载入错误。
我对比了一次我写的代码和可以运行的工程代码的区别,感觉从代码上没什么问题。
网上搜了一下,还没中文的遇到这个问题的呢,只有一个一个老外的论坛上有。
讨论来讨论去,写是本地资源载入的问题,比较好玩。
原新东西,总是有一些未知的错误。
遇到了还是要搞定他。
问题出来资源上就比较了一次resource.h,依然没有发现问题。
后面再比较了一次*.rc文件,问题终于找到了。
少了下面几句:
#if !defined(_AFXDLL)
#include "afxribbon.rc" // MFC ribbon and control bar resources
#endif
#include "afxribbon.rc" // MFC ribbon and control bar resources
#endif
vc这玩意也真够烦的,写个代码要了解这么多东西。
好了,加上就可以了。
vc2008 feature pack 确实是个不错的东西,至少有这个,可以不用那个盗版的BCGCBPro了。
觉得VisualManager还是有些功能缺失,比如Dialog要支持VisualManager就做不到。
看了看CFrameImpl的代码,觉得模访这个写一个DialogImpl就可以了。
本来这个包里存在一个DialogImpl可惜没有实现VisualManager。
省了好多代码啊,这么好的东西,为啥不早点出来呢。
lixiaomail
2008-08-21