从附属 DLL 加载“特殊”MFC 控件

Posted

技术标签:

【中文标题】从附属 DLL 加载“特殊”MFC 控件【英文标题】:Loading a "special" MFC control from a Satellite DLL 【发布时间】:2012-09-07 19:28:11 【问题描述】:

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

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

问题出现在以下语句:

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

我应该如何?

【问题讨论】:

【参考方案1】:

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

CMyClass::CMyClass()

    // Pseudo code
    m_mfcColorButton.RegisterWindowClass(AfxGetResourceHandle());

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

【讨论】:

【参考方案2】:

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

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

class CMyApp: public CWinApp

    BOOL InitInstance()
    
        AfxRegisterMFCCtrlClasses();
        return CWinApp::InitInstance();
    
;

【讨论】:

以上是关于从附属 DLL 加载“特殊”MFC 控件的主要内容,如果未能解决你的问题,请参考以下文章