
お世話になります。
今回お聞きしたいことは、
オリジナルに作成したダイアログを継承したオリジナルのダイアログを作成した際に、オリジナルに作成した基底ダイアログのダイアログ上のコントロールや、そのコントロールの位置を継承することはできますでしょうか?
ということです。
何がしたいかといいますと、4つのダイアログをメインダイアログから呼び出すのですが、その4つのダイアログには共通するコントロールがあり、そのコントロールの動作もその位置も全く同じなのです。
そのため、いちいち4つのダイアログにコントロールの貼り付けや、処理を記入せずに、その共通のコントロールをもった基底ダイアログを作成して、その基底ダイアログの継承としてダイアログが作れたらなと思い、質問させて頂きました。
継承をすると、基底クラスの関数等を使うことができるというのはわかるのですが、ダイアログ上のコントロールの位置までは不可能なのかなと疑問に思いました。
ご回答を宜しくお願い致します。
開発環境は
Windows CE 6.0
Visual Studio 2005
です。
No.2ベストアンサー
- 回答日時:
私、CEの経験がないので厳密なところはわからないのですが、
一般的なMFCであれば、可能です。
ただし、条件により困難さが変わります
1)4つのダイアログが全て同じコントロールのみからなる場合
コントロールは同じだが、ラベルのキャプションが違うとか
リストボックスのデータが違うとかいう場合です。
非常に単純です。普通の派生と全く同じ感じです
OnInitDialog等適当な関数をオーバーライドするだけです。
2)共通のコントロール以外に独自のコントロールも持つ場合
多少困難です
いくつかアプローチが考えられます。
a) ダイアログ・テンプレートを個別に持つ方法
リソース内のダイアログ・テンプレートは(共通のコントロールも含め)
コピー&ペーストなどで独自に作成します(4つ作ります)
それぞれを制御するクラスですが、
ウィザードのサポートを受けられない
(ウィザードではCDialog派生にされてしまう)
ので、既存のCDialog派生クラスを参照して
自力で希望のCDialog派生からさらに派生させるようにします
リソースIDとクラスの結びつけ方法などは既存のクラスを
参考にしてください
b)リソースも完全に共通化する
ちょっと難しいかもしれません。
OnInitDialog等で自力でコントロールをCreateします。
レイアウトが視覚的にできないので非常に困難ですが、
隣接するコントロールの位置情報をもとに計算するなどしてください。
ダイアログの大きさに余裕があり、
追加するコントロールも小さなもの
(1行のみのエディット等)であれば、
最初から場所をstaticコントロールで場所を確保しておき
非表示にしておいて、
派生クラスで、そのstaticの位置を取得するとかなり楽ができます。
派生クラスで、本格的にレイアウトが変わってしまう場合は、
レイアウトを頭に入れながら、Createし、試行錯誤で
完成させることになるでしょう。
以上の方法がCEでも通じるのかわかりませんが、
参考になれば幸いです。
詳細な回答ありがとうございます。
現在の開発状況ですと、2)の状況に当てはまります。
ClassWizardですとリソースを別にして、作成してしまうので、自力でコードを入力してダイアログを作成していくわけですか。。
なかなか難しい作業が必要なんですね。
現在の仕事ではあまり時間がなく、勉強する暇がないのですが、今後手が空きましたら、勉強させていただきます。
ご回答ありがとうございました。
No.1
- 回答日時:
MFCですか?
リソースの指定があるのでそううまくはいきません。
無理でもありませんが、おすすめはしません。
共通の処理をオブジェクトコンポジションで実装してみはいかがですか?
もしくは、その共通部分をダイアログにして、4つのダイアログに張り付けるというのはどうですか?
タブを実装するときのような感じです。。
回答が遅くなり、申し訳ございません。
そうですよね、リソースの関係から簡単に出来るものではないと思っていましたが、やはりですか。
>共通の処理をオブジェクトコンポジションで実装してみはいかがですか?
というのは各ダイアログの共通の処理を、あるクラス内のメンバ関数になりにしてそれぞれのダイアログで、その処理をメンバとするクラスのオブジェクトを呼ぶということですね?
処理の方法はそれでいこうと思っています。
>もしくは、その共通部分をダイアログにして、4つのダイアログに張り付けるというのはどうですか?
タブを実装するときのような感じです。。
この方法ですと、一つの画面の表示にならないと思うので、あまり見栄えがよくないかなと思い、一度考えたのですが実装をしてみませんでした。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# ActiveXコントロールを.NETにインポートできない??? 2 2023/05/02 02:50
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- その他(プログラミング・Web制作) pythonでアプリが終了されたときに特定の処理を実行したい 2 2023/01/19 17:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- C言語・C++・C# Seleniumで「ファイルを開く」ダイアログボックスのフォルダ指定する方法を教えてください。 1 2022/05/09 07:38
- Windows 10 MSアカウントの「個人設定をクラウドから削除します」は機能していないのでしょうか? 1 2022/11/20 17:01
- Excel(エクセル) vba sendKeysを送る相手のソフトを前面に開くには 1 2023/07/20 16:42
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
DateTimePickerでに年月までし...
-
コモンダイアログコントロール...
-
ActiveXコントロールを.NETにイ...
-
アイテムを点滅させる
-
C# comboBoxにTextAlign
-
モードレスダイアログのタブ移動
-
エクセルのコントロールツール...
-
Windows APIのGetOpenFileName...
-
VBAでリストボックス内で↑↓の操...
-
連続で印刷すると画像が更新さ...
-
ダイアログのスクロールバー
-
ExcelVBAのリストボックスで項...
-
ラジオボタンのグループ化の方法
-
VB.NETのTabControlについて
-
エクセル - リストボックスのマ...
-
VisualStudio MFC変数が追加で...
-
Excel VBAでのMultipageの選択
-
regsvr32でActiveX登録を行ったocx
-
SSTabで任意のタブを不可視にする
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
ActiveXコントロールを.NETにイ...
-
フォームでPDFを表示させた...
-
コモンダイアログコントロール...
-
連続で印刷すると画像が更新さ...
-
VScrollBarの点滅を何とかしたい。
-
エクセル - リストボックスのマ...
-
CEdit の内容が変わった時にメ...
-
空のリストビューで1行おきに...
-
リストコントロール(MFC or API...
-
TabControlとToolBarの背景色変更
-
タブコントロール上のリストコ...
-
アイテムを点滅させる
-
EXCELVBA リストボックスで選択...
-
regsvr32でActiveX登録を行ったocx
-
Accessのタブコントロールを2...
-
VB6.0のデザイン時 コントロー...
おすすめ情報