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

解決


melcatle  2003-05-22 10:48:52  No: 51444  IP: [192.*.*.*]

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

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

編集 削除
YuO  2003-05-22 23:19:27  No: 51445  IP: [192.*.*.*]

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

編集 削除
melcatle  2003-05-23 11:49:28  No: 51446  IP: [192.*.*.*]

色々やってみた所、今度は表示されなくなってしまいました...
以下コードです。
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 12:29:04  No: 51447  IP: [192.*.*.*]

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

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

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

編集 削除
melcatle  2003-05-23 13:38:43  No: 51448  IP: [192.*.*.*]

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

編集 削除