ダイアログボックスを作るには?

解決


melcatle  2003-05-22 19:48:52  No: 51444

はじめまして。このHPを見て勉強させて貰っていますmelcatleと申します。
Win2000、VC++6.0で制作しています。

メインウィンドウにメニューを設定し、そこのボタンを押せば別のウィンドウが出てくる。(ダイアログボックス)ということをしたいのですが、ボタンを押したら
メインウィンドウに別のウィンドウが張り付いてしまう。ということが起きてしまいました。張り付いてしまったウィンドウにはタイトルバーが無い。といった状態です。どなたか同じような事が起きてしまった、もしくはわかるという方ご教授願えないでしょうか?
リソースはVCのリソースエディタで作っています。
初歩的な質問でしかも説明が下手で申し訳ないのですが、よろしくお願い致します。


YuO  2003-05-23 08:19:27  No: 51445

どのようなコードを書いたのか,抜粋して載せてみて下さい。
普通にDialogBox APIで作れば,張り付くことはないはずです。


melcatle  2003-05-23 20:49:28  No: 51446

色々やってみた所、今度は表示されなくなってしまいました...
以下コードです。
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;
}


YuO  2003-05-23 21:29:04  No: 51447

DialogBoxParam自体は成功していますか?

ちなみに,DialogBoxParamの第5引数は何を与えても,成功/失敗に影響はないです。
値が不要なら,DialogBoxを使うと良いです。
#空ポインタが欲しいわけでもなさそうだし……。

あとは,ダイアログリソースのからWM_VISIBLEを取り払ってしまったとか……。


melcatle  2003-05-23 22:38:43  No: 51448

DialogBoxの戻り値が-1になっていたのでGetLastError()関数を使ったら
”イメージファイルがありません”と言われしまいました...
単に私の初歩的なミスだったようです。
こんな質問にお応え頂き真にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加