(続)ウィザードプロパティについて

[戻る]
VC++初心者 2005/08/08(月) 17:25:51
前回の質問を[解決]にして試してみましたが、結局分からないままふりだしに戻ってしまいまし
た。

> 入力項目の画面のクラスをCPropertyPageの派生クラスで作成し、
> それを複数宣言してCPropertySheetに加えてあげるだけで
> できると思います。
↑の解釈を以下のように思ってしまったのは間違いでしょうか?
1.CPropertyPageから派生させた「CpTestBase」を作成して、共通の入力項目10個を設定。
2.CpTestBaseから派生させた「CpPage1」を作成して、その画面のみの入力項目を設定。
3.上記2と同様に、他のページ「CpPage2」〜「CpPage5」を作成。
4.各画面を作成したら最後に「CpPage1」〜「CpPage5」をCPropertySheetにAddする。

当たり前の事ながら、共通の入力項目は「CpTestBase」にしかない訳で、派生した方は変数の
参照のみ可能ってことになりますよね。
結局のところ、「CpPage1」〜「CpPage5」にも共通の入力項目を設けて、OnInitDialogで
「CpTestBase」から値を参照するしかないのでしょうか?


あと何気に思ったのは、共通の入力項目は変数のみクラスに用意しておき、普通に
CPropertyPageから派生して各画面を作り、外部クラスの参照で共通の入力項目の変数を読み書
きするのが妥当のような気がしましたが、それはそれで間違いでしょうか?

ター坊 2005/08/08(月) 18:41:11
えっと、とりあえず前回はコチラです。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200508/05080011.txt

ちょっとよくないコードですがご容赦を。
・・・
//CMyPropertySheetはCPropertySheetの派生クラス。
CMyPropertySheet Sheet("WIZARD!");    

//ウィザードモード
Sheet.SetWizardMode();

//ウィザードのページのクラス。CPropertyPageの派生クラス。
CpTestBase WizardPage[5];            
                                
for(int nIndex = 0 ; nIndex < 5 ; nIndex++)
{
  //シートにページを追加
  Sheet.AddPage(&WizardPage[nIndex]);
}

Sheet.DoModal();
・・・
ではダメってことですか?

VC++初心者 2005/08/08(月) 19:29:05
う〜ん、丁寧に書いて頂いた部分は分かっていまして、知りたい内容は、
> //ウィザードのページのクラス。CPropertyPageの派生クラス。
> CpTestBase WizardPage[5];            
この「WizardPage」自体の入力項目の共通化をしたいのです。


イメージが伝わるか分かりませんが・・・
[Page1]
  担当者(苗字)  ______ (名前)______
  ふりがな(苗字)______ (名前)______
  生年月日 ______
  
 資格1 ____ 取得年 ____
 資格2 ____ 取得年 ____
 資格3 ____ 取得年 ____

[Page2]
  担当者(苗字)  ______ (名前)______
  ふりがな(苗字)______ (名前)______
  生年月日 ______
  
 学歴(小学校) ____
 学歴(中学校) ____
 学歴(高校)  ____
 学歴(大学)  ____

[Page3]
  担当者(苗字)  ______ (名前)______
  ふりがな(苗字)______ (名前)______
  生年月日 ______

 趣味 ____  特技 ____


というような感じで各ページで同じ情報を表示・変更できるようにする方法があったら知りたい
と思いまして質問しました。
言語は違いますが、C++の要素を持つDelphiでは作ったことありますが、純粋なC++ではどう作
るか分からなくて・・・。

dairygoods 2005/08/08(月) 19:39:37
「担当者〜生年月日」のところが同じだから共通化したいということでしょうか。

でしたら、この共通部分だけをもつダイアログを作り、
これを1個のコントロールとみて、各ページに埋め込むというのはいかがでしょう。

zin 2005/08/09(火) 10:27:47
共通項目を持ったダイアログの中にモードレスプロパティシートを埋め込むとか。

この場合、共通項目はページ(タブで囲まれた領域)の外になります。
共通項目なのだから通常はページの外でも不自然ではないと思いますが...
ページの中に、というなら dairygoods さんの方法かな。

#確か、モードレスにすると[OK]/[キャンセル]/[適用]などのボタンは自動的に
#無くなるので、これらも親のダイアログに作っておく必要があったと思います。

VC++初心者 2005/08/09(火) 16:42:36
[[解決]]
なんとなく見通しが立てられそうなので、書き込みの内容を基にいろいろ試してみます。
ご意見ありがとうございました。

zin 2005/08/09(火) 18:20:37
>#確か、モードレスにすると[OK]/[キャンセル]/[適用]などのボタンは自動的に
>#無くなるので、これらも親のダイアログに作っておく必要があったと思います。

これはプロパティシートの場合で、Wizard にした場合はモードレスでも既定のボタンは
無くならなかったはずです。
すいません。質問をよく読んでいませんでした。

古いスレッドには追加発言できません。