はじめまして。このHPを見て勉強させて貰っていますmelcatleと申します。
Win2000、VC++6.0で制作しています。
メインウィンドウにメニューを設定し、そこのボタンを押せば別のウィンドウが出てくる。(ダイアログボックス)ということをしたいのですが、ボタンを押したら
メインウィンドウに別のウィンドウが張り付いてしまう。ということが起きてしまいました。張り付いてしまったウィンドウにはタイトルバーが無い。といった状態です。どなたか同じような事が起きてしまった、もしくはわかるという方ご教授願えないでしょうか?
リソースはVCのリソースエディタで作っています。
初歩的な質問でしかも説明が下手で申し訳ないのですが、よろしくお願い致します。
どのようなコードを書いたのか,抜粋して載せてみて下さい。
普通にDialogBox APIで作れば,張り付くことはないはずです。
色々やってみた所、今度は表示されなくなってしまいました...
以下コードです。
DialogBoxParamの第五引数はやはり指定した方がいいのでしょうか?
宜しくお願いします。
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
HINSTANCE hInstance;
hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_COMMAND: // 何を押したかの判別
CommandProc(hwnd,HIWORD(wparam),LOWORD(wparam),(HWND)lparam);
return 0;
default:
return DefWindowProc(hwnd,msg,wparam,lparam);
}
}
LRESULT CommandProc(HWND hwnd,WORD wNotifyCode,WORD wID,HWND hwndCtl)
{
switch(wID)
{
HINSTANCE hInstance;
case ID_DIALOG: // ダイアログボックス出現
hInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
if(DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),
hwnd,(DLGPROC)DialogProc,NULL)==IDOK)
{
UpdateWindow(hwnd);
}
break;
}
BOOL CALLBACK DialogProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
switch(msg)
{
case WM_INITDIALOG:
// ここに初期化関数が入る
return FALSE;
case WM_COMMAND:
switch(wparam)
{
case IDOK:
EndDialog(hwnd,IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hwnd,IDCANCEL);
return TRUE;
default:
return E_FAIL;
}
return 0;
}
return FALSE;
}
DialogBoxParam自体は成功していますか?
ちなみに,DialogBoxParamの第5引数は何を与えても,成功/失敗に影響はないです。
値が不要なら,DialogBoxを使うと良いです。
#空ポインタが欲しいわけでもなさそうだし……。
あとは,ダイアログリソースのからWM_VISIBLEを取り払ってしまったとか……。
DialogBoxの戻り値が-1になっていたのでGetLastError()関数を使ったら
”イメージファイルがありません”と言われしまいました...
単に私の初歩的なミスだったようです。
こんな質問にお応え頂き真にありがとうございました。