2009-08-24 9 views
5

Ho una grande applicazione MFC che sto estendendo per consentire l'input multilingue. Al momento ho bisogno di consentire all'utente di inserire dati Unicode in caselle di modifica su una singola finestra di dialogo.Conversione a tratti di un'app MFC in Unicode/MBCS

C'è un modo per farlo senza attivare UNICODE o MBCS per l'intera applicazione? Ho solo bisogno di una piccola parte dell'applicazione convertita al momento. È possibile fare questo a tratti, e se sì, come?


Precisazione: ho potuto utilizzare :: GetWindowTextW() per ottenere informazioni Unicode fuori dalla finestra. Sto cercando di capire come consentire all'utente di inserire il testo Unicode nella finestra. Attualmente, caratteri che l'utente digita al di fuori della codepage di Windows 1252 viene visualizzato come "?". C'è un modo per risolvere questo problema?

+1

Perché non è possibile utilizzare Unicode completo? –

risposta

0

Solo un pensiero: si potrebbe provare a attivare UNICODE per la build e utilizzare le chiamate ANSI dove è necessario (ad esempio CStringA).

(Capisco che questo non può essere un'opzione per voi, ma pensano che la pena sottolineare che si potrebbe affrontare questo problema viceversa)

+0

Non posso farlo in questo caso. Ci sarebbero decine di migliaia di chiamate per scovare e convertire. –

4

Per consentire CEdit di mostrare i caratteri Unicode si dovrebbe crearlo con CreateWindowW la funzione. L'ho appena testato nel programma ANSI MFC.

// allows Unicode characters 
CreateWindowW(L"EDIT", L"", WS_CHILD|WS_VISIBLE, 10, 10, 50, 20, GetSafeHwnd(), 0, 0, 0); 

// shows Unicode characters as ? 
CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE, 10, 10, 50, 20, GetSafeHwnd(), 0, 0, 0); 

è possibile creare tutte le caselle di modifica manualmente in OnInitDialog funzione della finestra di dialogo. E successivamente li sottoclasse alla classe CMyEdit personalizzata con supporto Unicode.

2

È possibile sostituire queste caselle di modifica con controlli di modifica avanzati? Quindi potresti inserire caratteri internazionali anche in una build non Unicode; internamente, sarebbero codificati rtf, ma quando si esegue lo streaming del testo fuori dal controllo, è possibile utilizzare il formato SF_UNICODE per ottenere la rappresentazione Unicode.