从附属 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 控件(CMFCColorButton
、CVSListBox
等)的无模式对话框时出现问题。
问题出现在以下语句:
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 控件的主要内容,如果未能解决你的问题,请参考以下文章
WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)
如何在MFC中使用richedit控件_RICHEDIT_VER over 2.1
如何在 MFC No CLR 中访问 Winform ActiveX 控件