WINAPI editbox内の文字が文字化けする
プログラムは、ウィンドウ内にエディットボックスを表示するだけのものです。
下のプログラムを実行すると、エディットボックス内に ”繧ィ” と表示されます。また、“エディタ“ と入力すると ”ィ」ソ” と表示されます。
GetWindowTextでテキストを取得すると、MessageBoxには何も表示
されませんでした。
使用しているパソコンはwindows10です。
どうすれば文字化けが解消されるのでしょうか。
#include <stdio.h>
#include <windows.h>
HINSTANCE hinstance;
TCHAR tch[128];
LRESULT CALLBACK winpr(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hprevinst,
LPSTR lpcmdline,int ncmdshow)
{
TCHAR szwinClass[]=TEXT("samp1");
TCHAR sztitle[]=TEXT("サンプル");
int width=720;
int height=720;
WNDCLASSEX wcx;
HWND hwnd;
MSG msg;
hinstance=hinst;
wcx.cbSize=sizeof(WNDCLASSEX);
wcx.style=CS_HREDRAW | CS_VREDRAW;
wcx.hbrBackground=(HBRUSH)(COLOR_WINDOWTEXT+1);
wcx.cbClsExtra=0;
wcx.cbWndExtra=0;
wcx.hIcon=NULL;
wcx.hIconSm=NULL;
wcx.hCursor=LoadCursor(NULL,IDC_ARROW);
wcx.hInstance=hinstance;
wcx.lpfnWndProc=winpr;
wcx.lpszClassName=szwinClass;
wcx.lpszMenuName=sztitle;
if(!RegisterClassEx(&wcx)){
MessageBox(NULL,TEXT("failed"),TEXT("fail"),MB_OK);
return 1;
}
hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,szwinClass,sztitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
width,height,
NULL,NULL,hinstance,NULL);
if (!hwnd) {
MessageBox(NULL,TEXT("failed"),TEXT("fail"),MB_OKCANCEL);
int err=GetLastError();
return 1;
}
ShowWindow(hwnd,ncmdshow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)>0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT CALLBACK winpr(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam){
HDC hdc;
HWND hwndedit;
int id;
switch(message){
case(WM_CREATE):
hwndedit=
CreateWindow(
TEXT("edit"),
TEXT("エディタ"),
WS_CHILD | WS_VISIBLE ,
10, 10, 200, 30, hwnd, (HMENU)1,hinstance, NULL);
return 0;
case(WM_CLOSE):
GetWindowText(hwndedit,tch,GetWindowTextLength(hwndedit) + 1);
MessageBox(hwnd,tch,TEXT("文字化け"),MB_OK);
id=
MessageBox(hwnd,TEXT("閉じる"),TEXT("閉じる"),
MB_OKCANCEL);
if (id==IDOK){
DestroyWindow(hwnd);
}
return 0;
case(WM_DESTROY):
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,message,wparam,lparam);
}
}
お礼
アドバイスありがとうございました。 参考にさせていただきました。 その後の調査により、別の関数で実現することができました。