Printing unicode text using ExtTextOut

Rajesh S
I am using ExtTextOut to print unicode characters. We create font using
CreateFontIndirect to print characters in different orientations. When we
use GB2312_CHARSET (chinese character set) with lfEscapement/orientation
set to 270 degrees the characters are printed in reverse order.
If the character to be printed is 'Chinese', it is printed as 'esenihc'.
The same character set works fine if lfEscapement/orientation is set to 0
deg.
The issue is present only in WINCE. The same code works fine in a Win32
application. 
I have written a sample application.Find below the code from sample app 

CSampView::OnDraw (CDC* pDisplayDC)
{
 
HDC hDC = CreateCompatibleDC(NULL);
HBITMAP hBmp = CreateCompatibleBitmap(hDC, width, height);
BITMAPINFO  biBitmapInfo;
 
// font size may vary if screen resolution changes
biBitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
biBitmapInfo.bmiHeader.biWidth = 500;
biBitmapInfo.bmiHeader.biHeight = 500;
biBitmapInfo.bmiHeader.biPlanes = 1;
biBitmapInfo.bmiHeader.biBitCount = 1 ;
biBitmapInfo.bmiHeader.biCompression = BI_RGB;
biBitmapInfo.bmiHeader.biSizeImage = 0;
biBitmapInfo.bmiHeader.biXPelsPerMeter = 0;
biBitmapInfo.bmiHeader.biYPelsPerMeter = 0;
biBitmapInfo.bmiHeader.biClrUsed = 0;
biBitmapInfo.bmiHeader.biClrImportant = 0;
biBitmapInfo.bmiColors[0].rgbBlue = 0;
biBitmapInfo.bmiColors[0].rgbGreen = 0;
biBitmapInfo.bmiColors[0].rgbRed = 0;
biBitmapInfo.bmiColors[1].rgbBlue =1;
biBitmapInfo.bmiColors[1].rgbGreen = 1;
biBitmapInfo.bmiColors[1].rgbRed = 1;
 
CDC *pDC = CDC::FromHandle(hDC);
/*TCHAR szString[255] = {0x0043, 0x0068, 0x0069, 0x006E, 0x0065, 0x0073,
0x0065, 0x003A, 0x0020, 0x96C5,
     0x864E, 0x641C, 0x661F, 0x575A, 0x51B3, 0x5426, 0x8BA4, 0x80E1,
0x6208, 0x63A5,
     0x62CD, 0x96C5, 0x864E, 0x5E7F, 0x544A };*/
 

wchar_t szString[255] = _T("Print Test");
 
PUINT8 pui8ImageContent;
// Create rendering canvas
HBITMAP  hBmp1  = CreateDIBSection(hDC,
                       &biBitmapInfo,
                       DIB_PAL_COLORS,
                       (void**)&pui8ImageContent,
                       NULL,
                       0);
 
HBITMAP holdObj = (HBITMAP)SelectObject(hDC, hBmp1);
if (NULL == holdObj)
{
  AfxMessageBox(L"Bitmap Selection failed");
}
CBitmap* aBMP = CBitmap::FromHandle(hBmp);
BITMAP* abmpDim = NULL;
aBMP->GetBitmap(abmpDim);
 
memset(pui8ImageContent, 0, m_iOverallSizeInBytes);
 

LOGFONT  SLogFont  = {0};
memset(&SLogFont, 0, sizeof(LOGFONT));
SLogFont.lfHeight   = 50;
SLogFont.lfWidth   = 50;
SLogFont.lfCharSet   = GB2312_CHARSET
/*HANGUL_CHARSET*//*DEFAULT_CHARSET*/;
 
SLogFont.lfEscapement    = 2700;
SLogFont.lfOrientation   = 2700;
 
SLogFont.lfItalic   = FALSE;
SLogFont.lfUnderline   = FALSE;
SLogFont.lfStrikeOut   = FALSE;
SLogFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
SLogFont.lfClipPrecision  = CLIP_DEFAULT_PRECIS;
SLogFont.lfQuality     = DEFAULT_QUALITY;
SLogFont.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
wcscpy(SLogFont.lfFaceName,_T("@Simsun"));
 
HFONT  hChFont  = CreateFontIndirect(&SLogFont);
 

if (NULL == hChFont)
{
  AfxMessageBox(L"Font Creation failed");
}
 
CFont* pFont = pDC->GetCurrentFont();
  HFONT hFont = (HFONT)SelectObject(hDC, hChFont);
 
if (NULL == hFont)
{
  AfxMessageBox(L"Font selection failed");
}
 

BOOL aStringWtitten = ExtTextOut(
    hDC,       // Rendering canvas
    SSize.cy + iVerStartBit + 50,  // x-offset 
    100,      // y-offset
    ETO_OPAQUE,
    NULL,
    szString,           
    wcslen(szString), 
    NULL);
 
if (false == aStringWtitten)
{
  AfxMessageBox(_T("Write text failed"));
}
 
BitBlt(pDisplayDC->GetSafeHdc(),50, 0, 500, 500, hDC, 0, 0, SRCCOPY);
 
}