懂API的前辈们,帮忙看个程序?解决思路

懂API的前辈们,帮忙看个程序???
用API做一个输出艺术字的简单程序 我的想法:用TextOut来处理输出一行字的每一个字,这样就可以控制每个字的大小以及颜色等等。问题: 我写了下面这个程序 输出了一些看不懂的乱码 希望懂的前辈们给点意见 谢谢 !(不知道怎么插入图片 见谅!)
代码:

 #include<windows.h>
#include<stdlib.h>
#include<stdio.h>
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpnCmdLine,int nCmdShow)
{
  WNDCLASS wndclass;
  MSG msg;
  HWND hwnd;
  char lpszClassName[]="Lesson5";
  char lpszTitle[]="习题5——8";
   
  wndclass.cbClsExtra=0;
  wndclass.cbWndExtra=0;
  wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
  wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
  wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  wndclass.hInstance=hInstance;
  wndclass.lpfnWndProc=WinProc;
  wndclass.lpszMenuName=NULL;
  wndclass.style=CS_VREDRAW|CS_HREDRAW;
  wndclass.lpszClassName=lpszClassName;

  if(!RegisterClass(&wndclass))
  {
  return FALSE;
  }

  hwnd=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

  ShowWindow(hwnd,nCmdShow);
  UpdateWindow(hwnd);

  while(GetMessage(&msg,NULL,0,0))
  {
  TranslateMessage(&msg);
DispatchMessage(&msg);
  }
  return msg.wParam;
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  HDC hdc;
HFONT hf;
PAINTSTRUCT ps;
TEXTMETRIC tm;
char lpsz_1[]="欲穷千里目,更上一层楼";
char *ch=lpsz_1;
SIZE size;
static int x=0,y=0;
int i=0,m=0;
switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
  SetTextColor(hdc,RGB(255,0,0));
hf=CreateFont(
40,
0,
0,
0,
FW_HEAVY,
0,
0,
0,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_DONTCARE,
"粗体字"
);
SelectObject(hdc,hf);
GetTextMetrics(hdc,&tm);
m=strlen(lpsz_1);
  for(i=0;i<m;i++)
{
TextOut(hdc,x,y,ch++,1);
GetTextExtentPoint32(hdc,ch++,1,&size);
x=x+size.cx;
}
EndPaint(hwnd,&ps);
  DeleteObject(hf);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}

------解决方案--------------------
LZ,你知道中文字符在计算机内存储是双字节的么?这点很重要。

你的m=strlen(lpsz_1);得到的是两倍的汉字字符数。

你的ch++,得到的是半个字符,所以输出的都是乱码,你明白吧?

你可以参考Windows下的Unicode编程。

可以考虑使用wchar_t这种宽字符类型。