C言語win32api、エディットボックスから文字列を取得しメッセージ
C言語win32api、エディットボックスから文字列を取得しメッセージボックスへ出力
質問1
エディットボックスからフォーカスが外れると
その中の文字列を取得しメッセージボックスに出力したいのですが
思った通りに出力されません。
フォーカスが外れるとメッセージボックス自体は出てくるのですが
エディットボックスに入力した文字列が出力されません。
いろいろ試したんですが文字化けしたり文字列自体が表示されなかったします。
取得と出力の方法を教えていただけませんでしょうか。
kwt[3]=CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("EDIT"), NULL ,
WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_AUTOHSCROLL ,
90 , 85 , 110 , 25 ,
hAdd ,(HMENU)EDIT_ID02 ,((LPCREATESTRUCT)(lp))->hInstance , NULL);
LPSTR testtex=NULL;
LRESULT CALLBACK SubProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{
LPSTR testtex=NULL;
switch(msg)
{
case WM_COMMAND:
switch(LOWORD(wp))
{
case EDIT_ID02:
if(HIWORD(wp)==EN_KILLFOCUS) //フォーカスが外れたら次の処理をする。
{
strText = (LPSTR)malloc(GetWindowTextLength(hwnd) + 2); //文字数分のメモリを確保
if(testtex) //testtexがゼロでなければ次の処理をする
{
GetWindowText(hwnd , testtex , GetWindowTextLength(hwnd) + 2); //エディットのテキストを取得。問題個所
MessageBox(hwnd , testtex , TEXT("") , MB_OK); //取得したテキストをメッセージボックスで出力。問題個所
}
free(strText); //メモリを解放
return 0;
}
return 0;
}
return 0;
}
return (CallWindowProc(SubP1, hWnd, msg, wp, lp));
}
質問2
エディットボックスに0~9と「.」(ドット)のみを入力できるようにしたいのですが
ウインドウスタイルでES_NUMBERを指定すると「.」が入力できなくなってしまいます。
どのように回避したらいいのでしょうか。
質問3
win32apiとは直接関係ありませんが、たとえば計算結果が1000億を超えるような場合
int型とかの変数ではとても入りきれません。
こういった場合どのようにするのでしょう。
お礼
お返事遅くなり申し訳ございません。 temtecomai2様の回答をそのまま取り入れさせていただき、文字列リストを作成し、テスターに提供致しました。 テスターはそのリストを頻繁に利用しているようです。 いただいた助言によりテストの効率化が図れました。 ありがとうございました。