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);
}
}
お礼
ありがとうございました #include <windows.h> WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { MessageBox(NULL,"OK?","",MB_OK|MB_SETFOREGROUND|MB_TOPMOST); return 0; } とすることで質問と同じようにすることができるようになりました しかしやはり他のアプリ(エクスプローラ)のウィンドウをクリックするとホーカスははずれてしまいます システム上の問題で解決不可能かもしれませんね?