タイトルの付け方が合っているのかあまり自信がありません。
開発環境:コンパイラ Microsoft eMbedded Visual C++ 4.0
OS WindowsXpProSP3
実行環境: SharpBRAIN PW-GC590(WindowCE(5か6))
使用可能なのはwin32apiだけ
上記の通りなのですが、windows CE上で動かすプログラムを作っています。
モーダルダイアログボックスを使う必要が出てきて、実行してみたのですが、
DialogBox()を使った後には一切のSetWindowText()を実行しても何も
表示されません。出力するウィンドウはエディトコントロールです。
・出力を格納するための配列の値をメッセージボックスで出してみると
正常に格納されていました。
・エディトコントロールに対してキーボードから入力すると正常に文字が入力されました。
・ダイアログを出す部分のみをコメントアウトして実行してみると正常に出力されました。
・ダイアログをモーダルからモードレスに変えて実行してみると正常に出力されました。
//ただし、モーダレスだとメインウィンドウの方の処理が一時停止してくれないため意味がないので
//解決とはなりませんでした。
・xp上で同一のプログラムをVC++6でコンパイルして動かすと正常に動きました。
・メインウィンドウにおいてWM_PAINT等でSetWindowTextをしてもだめでした。
以上のことからDialogBoxからEndDialogまでの間に何か問題があると考えました。
ceでは何かxpと違うのだろうと考えたのですが、ce関連の情報は全く調べようがなく
どうにもなりませんでした。
ダイアログボックスに関する部分のソースだけ載せましたので、その部分に問題があるかどうかと
windows ceの開発に関する情報があれば教えていただきたいです。
(正常にモーダルダイアログがce上で動くソースコード等が載っているページ等がありましたら、
教えていただけると助かります)
//以下ソースコード
hEdit = CreateWindow(_T("EDIT"),NULL,WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_UPPERCASE,0,25,480,200,hWnd,(HMENU)ID_EDIT,hInst,NULL);
//debug
SetWindowText(hEdit,_T("Hello World2")); //出力される
//キー入力をしなければならない
DialogBox(hInst,(LPCTSTR)IDD_MYDLG,GhWnd,(DLGPROC)MyDlgProc);
SetWindowText(hEdit,_T("Hello World3")); //出力されない
BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp){
switch (msg) {
case WM_CREATE:
SetWindowText(hEdit,_T("Hello World4")); //出力されない
case WM_COMMAND:
switch (LOWORD(wp)){
case IDOK:
GetDlgItemText(hDlg,IDC_OUTPUT,inbuf,(int)sizeof(inbuf)-1);
//debug
SetWindowText(hEdit,_T("Hello World1")); 出力されない
if(EndDialog(hDlg,IDOK) == 0)
MessageBox(GhWnd,_T("Error : Dialog can't close"),_T("Error"),MB_OK);
return TRUE;
}
return FALSE;
break;
}
return FALSE;
}
DialogBox()後のEditコントロールに対する描写
Re:DialogBox()後のEditコントロールに対する描写
Windows CE は触ったことが無いのですが、WM_CREATE の直後に break が無かったり、DefDlgProc が無かったりするのは関係あったりしないでしょうか。
Re:DialogBox()後のEditコントロールに対する描写
あ…、breakが抜けてましたか。今試してみましたが、breakは原因ではありませんでした。
DefDlgProcの方については全く知らなかったため、調べてみたのですが、
どうもよくわかりません。
現在手元にある「猫でもわかるWindowsプログラミング」のサンプルでは
DefDlgProcが使われていなかったので不要かと思ったのですが、
そのあたりのことがよくわかりません。
DefDlgProcの方については全く知らなかったため、調べてみたのですが、
どうもよくわかりません。
現在手元にある「猫でもわかるWindowsプログラミング」のサンプルでは
DefDlgProcが使われていなかったので不要かと思ったのですが、
そのあたりのことがよくわかりません。