从附属 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 控件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mfc 的 OnCreate 方法中停止创建窗口

WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)

如何在MFC中使用richedit控件_RICHEDIT_VER over 2.1

如何在 MFC No CLR 中访问 Winform ActiveX 控件

mfc里给picture控件加载一张位图,然后在位图上画一条线,该怎么做

ocx控件加载失败