У меня есть приложение MFC, использующее спутниковые библиотеки DLL для поддержки многоязычия. Я использую Visual Studio 2010.
Я могу без проблем сменить язык основной части приложения. Ситуация идет не так, когда я пытаюсь загрузить немодальный диалог, содержащий «специальный» элемент управления MFC (CMFCColorButton
, CVSListBox
, так далее).
Проблема возникает в следующем утверждении:
m_dlg->Create(SOME_IID, this); // returns false
Как мне перейти к загрузке «специального» элемента управления MFC из спутниковой DLL?
Вы должны зарегистрировать их классы, прежде чем вы достигнете OnCreate()
, Для пользовательских элементов управления это обычно делается в конструкторе:
CMyClass::CMyClass()
{
// Pseudo code
m_mfcColorButton.RegisterWindowClass(AfxGetResourceHandle());
}
Держу пари, что для элементов управления MFC есть функция инициализации, которую нужно вызвать.
У меня была та же проблема: мой производный от CDialog класс потерпел неудачу в DoModal, если я использую локализованный ресурс dll. Содержит CMFCColorButton в шаблоне ресурса.
Моим решением было позвонить в ресурс dll AfxRegisterMFCCtrlClasses ();
class CMyApp: public CWinApp
{
BOOL InitInstance()
{
AfxRegisterMFCCtrlClasses();
return CWinApp::InitInstance();
}
};