ダイアログのクラス名を取得(急いでいます。) – プログラミング – Home

ダイアログのクラス名を取得(急いでいま...
 
通知
すべてクリア

[解決済] ダイアログのクラス名を取得(急いでいます。)


VC++初心者です
 VC++初心者です
(@VC 初心者です)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

お世話になっています。何方かお教えください。
自作関数の引数にダイアログのクラス名を入れたいのですが、なかなかうまくいきません。
環境 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( type ); // 自作関数サブウィンドウ.cppにとぶ
   break;
}
//--------------------------------------------------
サブウィンドウ.cpp
BOOL wndopn( // ダイアログオープン
int cidID) // 子ウィンドウID
{
  CPassWordDlg m_PasDlg; ※
m_PasDlg.DoModal();
}

以上のソースでサブウィンドウの※の部分を引数にもっていきたいのです。
サブウィンドウでダイアログクラス名を固定にしたくないのです。
サブウィンドウを共通関数にしたいのです。
私のイメージでは、以下の感じです。

//------------------------------------------------------------------------------
親ダイアログ.cppの一部抜粋
CPassWordDlg m_PasDlg; //例で私用するダイアログクラス名
wndopn( type ); // 自作関数サブウィンドウ.cppにとぶ
 ↓
wndopn( m_PasDlg, type ); // 自作関数サブウィンドウ.cppにとぶ

//------------------------------------------------------------------------------
サブウィンドウ.cpp
BOOL wndopn( // ダイアログオープン
親から送れてきたダイアログクラス名 m_Dlg,
int type)
{
m_Dlg.DoModal();
または
  m_Dlg.ShowWindow(SW_SHOW);
}

親のダイアログ.cppでwndopn関数の第一引数のダイアログクラス名が変わっても
サブウィンドウ.cppには影響はないようにしたいのです。

どうか何方か御返答ください。宜しくお願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

サブウィンドウ.h

template<typename Window>
BOOL wndopn(Window& window, int type) {
window.DoModal();
...
}

なんてのじゃダメか?


返信引用
VC++初心者です
 VC++初心者です
(@VC 初心者です)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

御返答ありがとうございます。
template<typename Window> はどういう意味でどこに記述すればいいのですかね?
初心者なもんですみません。
よろしくおねがいします。


返信引用
VC++初心者です
 VC++初心者です
(@VC 初心者です)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

すみません。記述する場所はヘッダーファイルにかいていましたね。
意味だけ教えてください。templateてなんですか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

本を読んでください。
# 初心者ならなおさら。


返信引用
VC++初心者です
 VC++初心者です
(@VC 初心者です)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

本はないのでヘルプ見ました。
それから御返答いただいたソースを記述しましたがえらーが起きるのです。
エラー内容は、「Window、windowが定義されていない識別子です。」です。
そのソースが以下に書きました。

//----------------------------------------
サブウィンドウ.h
template<typename Window>

BOOL wndopn( Window& window, int type);

//-------------------------------------------------
サブウィンドウ.cpp
BOOL wndopn( // ダイアログオープン
Window& window,
int type)
{
window.DoModal();
}
//---------------------------------------------


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

僕が最初に示した通り、関数本体もヘッダに置いてください。


返信引用
VC++初心者です
 VC++初心者です
(@VC 初心者です)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

επιστημη さんの指示通り記述すればコンパイルが通りました。ご迷惑かけてすみません。
ヘッダに関数本体を記述してはいけないと思っていて記述してもいいんですね。
それから一つ質問があるのですがお答え願いますか。
template<typename Window>の記述は何故関数のすぐ上に記述しないといけないのでしょうか
template<typename Window>と関数の間に何か記述していたら、「Windowが定義されていませ
ん・・・」というエラーがでます、どうしてでしょうか。
宜しくお願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

それがtemplateのルールだからです。

とにかく、本を読んでください。
BBSで語り尽くせるようなことではありません。


返信引用
VC++初心者です
 VC++初心者です
(@VC 初心者です)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

すみません。いらだつのも無理ないですよね。本当に初心者でごめんなさい。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました