Es tut mir leid, das geht nicht: Da WinCE 5 und Compact v 2.0-Steuerelemente wie die Textbox ein RicghtToLeft Eigenschaft unterstützen (siehe auch http://www.danielmoth.com/Blog/rtl-problem.aspx). Sie sollten also sicherstellen, dass Sie CF> = 2.0 und WinCE 5 base sdk (dh Windows Mobile 6.x) verwenden.
Betrachtet man die Hilfe für die Textbox-Klasse, ist RightToLeft für Compact Framework als NICHT VERFÜGBAR gekennzeichnet.

So müssen Sie Ihre eigene DrawText Klasse schreiben, die die Worte und positioniert sie von rechts nach links aufteilt.
Die native DrawText API unterstützt die uFormat Flagge DT_RTLREADING (nach der Online-Hilfe für Windows CE 5 Platform Builder):
DT_RTLREADING Layout-in von rechts nach links Lesereihenfolge für den bidirektionalen Text, wenn die Schriftart ausgewählt in der hdc ist eine hebräische oder arabische Schriftart. Die Standardleseanweisung für den gesamten Text ist von links nach rechts.
Es gibt auch eine Option DT_WORDBREAK, die ich für mehrzeiligen Text und ein ausreichend großes Zeichenrechteck auswählen würde.
ABER, dass das folgende Ergebnis mit zwei Rechtecken und zwei Schriftgrößen gibt einen wordbreak zu zwingen:

Da ich nicht lesen kann, dass ich bin nicht sicher, aber ich nehme an, die wordbreak Flagge tut funktioniert nicht richtig. Ich nehme an, die zweite Zeile im oberen Teil muss auch von rechts beginnen.
Ureinwohner-Code für die oben:
...
#define ARABIC_TEXT L"اسمي مصير الطفل. من أي بلد أنت"
#define MulDiv(a,b,c) (((a)*(b))/(c))
...
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
LOGFONT lf;
HFONT hFontNew, hFontOld;
...
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
// Clear out the lf structure to use when creating the font.
memset(&lf, 0, sizeof(LOGFONT));
wsprintf(lf.lfFaceName,L"Arial Unicode MS");
GetClientRect(hWnd, &rect);
hFontNew = CreateFontIndirect(&lf);
hFontOld = (HFONT) SelectObject(hdc, hFontNew);
rect.bottom=rect.bottom/2;
lf.lfHeight=-MulDiv(16, GetDeviceCaps(hdc, LOGPIXELSY), 72);
if(DrawText(hdc, ARABIC_TEXT, -1, &rect, DT_RTLREADING | DT_WORDBREAK)==0){
DEBUGMSG(1, (L"DrawText failed with %i\n", GetLastError()));
}
GetClientRect(hWnd, &rect);
lf.lfHeight=-MulDiv(10, GetDeviceCaps(hdc, LOGPIXELSY), 72);
hFontNew = CreateFontIndirect(&lf);
hFontOld = (HFONT) SelectObject(hdc, hFontNew);
rect.top=rect.bottom/2;
if(DrawText(hdc, ARABIC_TEXT, -1, &rect, DT_RTLREADING | DT_WORDBREAK)==0){
DEBUGMSG(1, (L"DrawText failed with %i\n", GetLastError()));
}
EndPaint(hWnd, &ps);
SelectObject(hdc, hFontOld);
DeleteObject(hFontNew);
break;
Ich benutze compactframework 3.5 mit Wince 6.0. Ich finde jedoch keine rechte Eigentumsrechte. – Ytan
@josef Vielleicht braucht Ihre Ausgabe nur ein 'DT_RIGHT', oder? Ich denke auch, dass die Zeichen getrennt erscheinen, weil Ihr WinCE nicht mit voller arabischer Skriptunterstützung gebaut wird. +1, das ist, soweit ich weiß, die einzige Möglichkeit, arabischen Text auf WinCE anzuzeigen. –
DT_RIGHT könnte ein Fehler sein, da er nach rechts ausgerichtet ist, aber wir wollen von rechts nach links (RTL) lesen. Es gibt keine Unterstützung für 'voll arabisch', es gibt nur Unicode, und das ist standardmäßig bei WinCE. Ein Problem ist ein ttf mit voller arabischer Unterstützung. Auf der anderen Seite: Ich weiß nicht, welche Platform-Builder-Optionen außer RTL und Unicode benötigt werden, um ein vollständiges arabisches Build eines Windows CE-BS-Images zu erhalten. BTW: Bearbeiten von ARABIC_TEXT in VS war eine Herausforderung, da VS die RTL-Sprache erkannt hat und sich mit BACKSPACE und END und POS1 merkwürdig verhält. Schöne Erfahrung. – josef