我有一个使用卫星 DLL 的 MFC 应用程序以支持多语言。我正在使用 Visual Studio 2010。
我能够毫无问题地更改应用程序核心部分的语言。当我尝试加载包含“特殊”MFC 控件(、、等)的无模式对话框时,出现CMFCColorButton
问题CVSListBox
。
问题出现在以下语句中:
m_dlg->Create(SOME_IID, this); // returns false
我应该如何从附属 DLL 加载“特殊”MFC 控件?
我有一个使用卫星 DLL 的 MFC 应用程序以支持多语言。我正在使用 Visual Studio 2010。
我能够毫无问题地更改应用程序核心部分的语言。当我尝试加载包含“特殊”MFC 控件(、、等)的无模式对话框时,出现CMFCColorButton
问题CVSListBox
。
问题出现在以下语句中:
m_dlg->Create(SOME_IID, this); // returns false
我应该如何从附属 DLL 加载“特殊”MFC 控件?
您必须在到达之前注册他们的课程OnCreate()
。对于自定义控件,这通常在构造函数中完成:
CMyClass::CMyClass()
{
// Pseudo code
m_mfcColorButton.RegisterWindowClass(AfxGetResourceHandle());
}
对于 MFC 控件,我敢打赌有一个需要调用的初始化函数。
我遇到了同样的问题:如果我使用本地化资源 dll,我的 CDialog - 派生类在 DoModal 中失败。它包含资源模板上的 CMFCColorButton。
我的解决方案是调用资源 dll AfxRegisterMFCCtrlClasses();
class CMyApp: public CWinApp
{
BOOL InitInstance()
{
AfxRegisterMFCCtrlClasses();
return CWinApp::InitInstance();
}
};