Multilanguage



  • Ich habe nochmal in der MSDN geguckt. MessageBoxIndirect kennt den Language Parameter, das gleiche gilt für MessageBoxEx() allerdings ist er dort als reserved angegeben. Ich versuche gerade MessageBoxIndirect zum laufen zu bringen, habs aber noch nicht geschafft. Allerdings müsste es laut MSDN gehen. 🙂



  • Die Sprache muss aber auch auf dem System vorhanden sein und MultiLanguage Installationen sind relativ selten 😉
    Wenn es denn wirklich wichtig ist: warum machst Du nicht eine eigene MessageBox ???



  • Naja gut, der Tip mit der MessageBoxIndirect funktioniert in der Tat nur wenn die Language Englisch auch installiert ist. Aber immerhin könnten sich so die Leute in England die sowieso ein Englisches Windows haben, dein Programm auf Englisch geniesen.



  • Aber wäre bei denen nicht sowieso die Beschriftung englisch?! 🙄



  • Hi,

    also ihr habt alle irgendwie recht. Mit MessageBoxIndirect funzt es, wenn das Microsoft Multilanguage Pack installiert ist. Auf englischen Systemen sind auch die Buttons der MessageBox auf english. Bin jetzt dazu über gegangen, eine eigene MessageBox zu basteln. Das einzige was mehr Arbeit ist, sind die PropertySheets. Aber da belibt mir wohl nichts anderes.

    Trotzdem Danke.



  • So,
    ich habs gefunden.
    Ich habe das ganze jetzt über ein Hook gelöst.
    Für die, die das auch malk brauchen können, hier mein Code:

    LRESULT CALLBACK hMessageBoxHookProc(int nCode, WPARAM wParam, LPARAM lParam);
    #define ID_BUT_OK 0x1
    #define ID_BUT_CANCEL 0x2
    #define ID_BUT_ABORT 0x3
    #define ID_BUT_RETRY 0x4
    #define ID_BUT_IGNORE 0x5
    #define ID_BUT_YES 0x6
    #define ID_BUT_NO 0x7
    
    HHOOK SetMessageBoxHook()
    {
    	HHOOK hMessageBoxHook;
    	hMessageBoxHook = SetWindowsHookEx(WH_CBT,
    									   hMessageBoxHookProc,
    									   NULL,
    									   GetCurrentThreadId());
    	return hMessageBoxHook;
    }
    void vRealeaseMessageBoxHook(HHOOK hHook)
    {
    	UnhookWindowsHookEx(hHook);
    }
    
    LRESULT CALLBACK hMessageBoxHookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	if (nCode < 0)
    	{
    		return CallNextHookEx(tGlobal.hMessageBoxHook, nCode, wParam, lParam);
    	}
        if (nCode == HCBT_ACTIVATE)
    	{
            SetDlgItemText((HWND)wParam, ID_BUT_OK, "DAS IST OK");
            SetDlgItemText((HWND)wParam, ID_BUT_CANCEL, "DAS IST CANCLE");
            SetDlgItemText((HWND)wParam, ID_BUT_ABORT, "DAS IST ABORT");
            SetDlgItemText((HWND)wParam, ID_BUT_RETRY, "DAS IST RETRY");
            SetDlgItemText((HWND)wParam, ID_BUT_IGNORE, "DAS IST IGNOR");
            SetDlgItemText((HWND)wParam, ID_BUT_YES, "DAS IST JA");
            SetDlgItemText((HWND)wParam, ID_BUT_NO, "DAS IST NEIN");
    	}
    	return CallNextHookEx(tGlobal.hMessageBoxHook, nCode, wParam, lParam);
    }
    

    Viel Spaß noch und danke für die Hilfe


Anmelden zum Antworten