お世話になっています。何方かお教えください。
自作関数の引数にダイアログのクラス名を入れたいのですが、なかなかうまくいきません。
環境 Win2000 VC++6.0 MFC です
親ダイアログ.cpp とサブウィンドウ.cpp をつくっています。
今の現状です。
親ダイアログ.cpp
//------------------------------------------
BOOL CMainDlg::OnCommand(
WPARAM wParam,
LPARAM lParam)
{
CPassWordDlg m_PasWrdDlg;
int cidID = LOWORD(wParam);
switch(cidID){
case ID_PASSWORDIPTBTN : // パスワード入力画面表示ボタン
case ID_PASSWORDSETBTN : // パスワード設定画面表示ボタン
if(cidID == ID_PASSWORDIPTBTN){
type = ID_PASSWORDIPTBTN;
}else{
type = ID_PASSWORDSETBTN;
}
// パスワード設定
wndopn( m_hWnd, type); // 自作関数サブウィンドウ.cppにとぶ
break;
}
}
サブウィンドウ.cpp
//------------------------------------------------------------------------------
BOOL wndopn( // ダイアログオープン
HWND m_Hwnd, // 親ウィンドウ
int cidID) // 子ウィンドウID
{
CPassWordDlg m_PasDlg; ※
m_PasDlg.DoModal();
}
以上のソースでサブウィンドウの※の部分を引数にもっていきたいのです。
私のイメージでは、以下の感じです。
親ダイアログ.cpp
wndopn( m_hWnd, type); // 自作関数サブウィンドウ.cppにとぶ
すいません、間違えて送信ボタン押してしまいました。
続きです。
以上のソースでサブウィンドウの※の部分を引数にもっていきたいのです。
サブウィンドウでダイアログクラス名を固定にしたくないのです。
私のイメージでは、以下の感じです。
親ダイアログ.cpp
CPassWordDlg m_PasDlg; //例で私用するダイアログクラス名
wndopn( type); // 自作関数サブウィンドウ.cppにとぶ
↓
wndopn( m_PasDlg, type ); // 自作関数サブウィンドウ.cppにとぶ
サブウィンドウ.cpp
//------------------------------------------------------------------------------
BOOL wndopn( // ダイアログオープン
親から送れてきたダイアログクラス名 m_Dlg,
int type)
{
m_Dlg.DoModal();
}
わかりにくいかも知れませんがよろしくお願いします。
うーん、やりたいことが見えないです。
なぜ、別関数に飛ばして開きたいのかが良くわからない。
開くウインドウが違っているならやりたい事も違いそうだけど、
それならわざわざ別関数にする意味が薄いような。
それに自作関数ってグローバル関数ですよね。
ウインドウを開いて定型の後処理が行いたいだけなら
自作ダイアログクラスの実体である必要は無くて
CDialog* pDlgで良いと思います。
pDlg->DoModal()で事足りる話です。
派生クラスのポインタは親クラスのポインタで扱えるからなんですが、
この辺の話はわかるでしょうか?
ダイアログからデータを取り出して何かしたい、かつその処理がウインドウによって
違っているなら、なにも一つの関数にまとめなくてもと思います。
ダイアログが違っても同じデータを取り出して同じ処理をしたいのであれば、
CDialogから共通の親クラスを派生しておき、共通の変数と操作関数を
そのクラスに実装します。
後は引渡しをその親クラスのポインタでやれば、共通化できます。
クラスの派生に関する知識が有れば、その辺は見えてくるはずです。
目的まで記述してくれないと適切なアドバスは難しいと思います。
他のスレッドで同じ質問して解決してるみたいですね。
ちゃんとこっちの始末もつけてほしかった。(T-T)
解決てすつ