Mehrsprachenfähigkeit bei Standarddialogen
-
Hallo,
ich habe ein Programm (SDI), bei dem ich Mehrsprachenfähigkeit über die Stringtable, welche dynamisch aus verschiedenen DLLs geladne wird, realisiert. Das funktioniert auch alles einwandfrei soweit, nur wie bekomme ich die Standarddialoge wie "Datei öffnen" usw. in die entsprechende Sprache? Ebenso die von VC++ selbst angezeigten Fehlermeldungen und die Menüpunkte der Menüleiste in der DOC?!
Bin für jede Hilfe dankbar!
-
Hallo,
alle Standarddialoge wie "Datei öffnen" usw. sind abhängig von Windows Version. Damit machst du nichts.
Wenn du auch alle Menuleisten in entsprechenden Sprachen willst, muss du alle Menu in dll haben und umschalten:In "hCurrentModule" ist DLL oder HaupProgram handle.
ASSERT(hCurrentModule); //is the resource DLL existent? AfxSetResourceHandle(hCurrentModule); CDocTemplate* pTemplate; POSITION pos; //Determining CMultiDocTemplate: //if we had an appliction with more than one template, //we would have to make a loop over CMultiDocTemplate like this: #if _MFC_VER>=0x400 pos = AfxGetApp()->GetFirstDocTemplatePosition(); ASSERT(pos); pTemplate=AfxGetApp()->GetNextDocTemplate(pos); #else pos = m_templateList.GetHeadPosition(); ASSERT(pos); pTemplate=(CDocTemplate *)m_templateList.GetNext( pos ); #endif ASSERT(pTemplate); ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CMultiDocTemplate))); //Now change all MDI children's shared menus.... CMenu DefaultMenu, SharedMenu; DefaultMenu.LoadMenu(IDR_MAINFRAME); SharedMenu.LoadMenu(IDR_SCRIBBTYPE); CMenu *pMenu = GetMenu(); ASSERT(pMenu ); if (pMenu->m_hMenu==m_hMenuDefault) SetMenu(&DefaultMenu); else { SetMenu(&SharedMenu); ::SendMessage(m_hWndMDIClient, WM_MDISETMENU,NULL, (LPARAM)GetWindowMenuPopup(SharedMenu.m_hMenu)); //this re-populates the Window-Menu } ::DestroyMenu(m_hMenuDefault); ASSERT(((CMultiDocTemplate *)pTemplate)->m_hMenuShared); ::DestroyMenu(((CMultiDocTemplate *)pTemplate)->m_hMenuShared); m_hMenuDefault = DefaultMenu.m_hMenu; ((CMultiDocTemplate *)pTemplate)->m_hMenuShared=SharedMenu.m_hMenu; POSITION docpos = pTemplate->GetFirstDocPosition(); CDocument *pDocument = NULL; while (docpos) { pDocument = pTemplate->GetNextDoc(docpos); ASSERT(pDocument); POSITION viewpos = pDocument->GetFirstViewPosition(); CWnd *pParent; while (viewpos != NULL) { CView* pView = pDocument->GetNextView(viewpos); if (pView && NULL != (pParent = pView->GetParentFrame()) && pParent->IsKindOf(RUNTIME_CLASS(CChildFrame))) ((CChildFrame *)pParent)->SharedMenu() = SharedMenu.m_hMenu; } } m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)); //Update the other panes of status bar SendMessage(WM_SETMESSAGESTRING, (WPARAM)AFX_IDS_IDLEMESSAGE); m_wndStatusBar.UpdateWindow();//Update 1st pane of status bar DefaultMenu.Detach(); SharedMenu.Detach();
Fredy
(sorry fur meine deutsche Sprache...)
-
Alles klar, vielen Dank, das hat mir schonmal weitergeholfen!