从Satellite DLL加载“特殊”MFC控件

时间:2012-09-07 19:28:12

标签: c++ visual-studio-2010 mfc

我有一个使用卫星DLL的MFC应用程序,以支持多语言。我正在使用Visual Studio 2010。

我能够毫无问题地更改应用程序核心部分的语言。当我尝试加载包含“特殊”MFC控件(CMFCColorButtonCVSListBox等)的无模式对话框时出错。

问题出现在以下声明中:

m_dlg->Create(SOME_IID, this); // returns false

如何从卫星DLL加载“特殊”MFC控件?

2 个答案:

答案 0 :(得分:1)

您必须在到达OnCreate()之前注册他们的课程。对于自定义控件,通常在构造函数中完成:

CMyClass::CMyClass()
{
    // Pseudo code
    m_mfcColorButton.RegisterWindowClass(AfxGetResourceHandle());
}

对于MFC控件,我打赌有一个需要调用的初始化函数。

答案 1 :(得分:0)

我遇到了同样的问题:如果我使用本地化资源dll,我的CDialog派生类在DoModal中失败了。它在资源模板上包含CMFCColorButton。

我的解决方案是调用资源dll AfxRegisterMFCCtrlClasses();

class CMyApp: public CWinApp
{
    BOOL InitInstance()
    {
        AfxRegisterMFCCtrlClasses();
        return CWinApp::InitInstance();
    }
};