お世話になります。
今回お聞きしたいことは、
オリジナルに作成したダイアログを継承したオリジナルのダイアログを作成した際に、オリジナルに作成した基底ダイアログのダイアログ上のコントロールや、そのコントロールの位置を継承することはできますでしょうか?
ということです。
何がしたいかといいますと、4つのダイアログをメインダイアログから呼び出すのですが、その4つのダイアログには共通するコントロールがあり、そのコントロールの動作もその位置も全く同じなのです。
そのため、いちいち4つのダイアログにコントロールの貼り付けや、処理を記入せずに、その共通のコントロールをもった基底ダイアログを作成して、その基底ダイアログの継承としてダイアログが作れたらなと思い、質問させて頂きました。
継承をすると、基底クラスの関数等を使うことができるというのはわかるのですが、ダイアログ上のコントロールの位置までは不可能なのかなと疑問に思いました。
ご回答を宜しくお願い致します。

開発環境は
Windows CE 6.0
Visual Studio 2005
です。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

私、CEの経験がないので厳密なところはわからないのですが、


一般的なMFCであれば、可能です。
ただし、条件により困難さが変わります

1)4つのダイアログが全て同じコントロールのみからなる場合
  コントロールは同じだが、ラベルのキャプションが違うとか
  リストボックスのデータが違うとかいう場合です。

  非常に単純です。普通の派生と全く同じ感じです
  OnInitDialog等適当な関数をオーバーライドするだけです。

2)共通のコントロール以外に独自のコントロールも持つ場合
  多少困難です
  いくつかアプローチが考えられます。
  a) ダイアログ・テンプレートを個別に持つ方法
    リソース内のダイアログ・テンプレートは(共通のコントロールも含め)
    コピー&ペーストなどで独自に作成します(4つ作ります)
それぞれを制御するクラスですが、
    ウィザードのサポートを受けられない
    (ウィザードではCDialog派生にされてしまう)
    ので、既存のCDialog派生クラスを参照して
    自力で希望のCDialog派生からさらに派生させるようにします

    リソースIDとクラスの結びつけ方法などは既存のクラスを
    参考にしてください

  b)リソースも完全に共通化する
    ちょっと難しいかもしれません。
    OnInitDialog等で自力でコントロールをCreateします。
    レイアウトが視覚的にできないので非常に困難ですが、
    隣接するコントロールの位置情報をもとに計算するなどしてください。

    ダイアログの大きさに余裕があり、
    追加するコントロールも小さなもの
    (1行のみのエディット等)であれば、
    最初から場所をstaticコントロールで場所を確保しておき
    非表示にしておいて、
    派生クラスで、そのstaticの位置を取得するとかなり楽ができます。

    派生クラスで、本格的にレイアウトが変わってしまう場合は、
    レイアウトを頭に入れながら、Createし、試行錯誤で
    完成させることになるでしょう。


以上の方法がCEでも通じるのかわかりませんが、
参考になれば幸いです。    

   
    • good
    • 0
この回答へのお礼

詳細な回答ありがとうございます。
現在の開発状況ですと、2)の状況に当てはまります。

ClassWizardですとリソースを別にして、作成してしまうので、自力でコードを入力してダイアログを作成していくわけですか。。
なかなか難しい作業が必要なんですね。

現在の仕事ではあまり時間がなく、勉強する暇がないのですが、今後手が空きましたら、勉強させていただきます。

ご回答ありがとうございました。

お礼日時:2009/06/02 14:08

MFCですか?



リソースの指定があるのでそううまくはいきません。
無理でもありませんが、おすすめはしません。

共通の処理をオブジェクトコンポジションで実装してみはいかがですか?

もしくは、その共通部分をダイアログにして、4つのダイアログに張り付けるというのはどうですか?
タブを実装するときのような感じです。。
    • good
    • 0
この回答へのお礼

回答が遅くなり、申し訳ございません。
そうですよね、リソースの関係から簡単に出来るものではないと思っていましたが、やはりですか。

>共通の処理をオブジェクトコンポジションで実装してみはいかがですか?

というのは各ダイアログの共通の処理を、あるクラス内のメンバ関数になりにしてそれぞれのダイアログで、その処理をメンバとするクラスのオブジェクトを呼ぶということですね?
処理の方法はそれでいこうと思っています。


>もしくは、その共通部分をダイアログにして、4つのダイアログに張り付けるというのはどうですか?
タブを実装するときのような感じです。。

この方法ですと、一つの画面の表示にならないと思うので、あまり見栄えがよくないかなと思い、一度考えたのですが実装をしてみませんでした。

ご回答ありがとうございました。

お礼日時:2009/06/02 14:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q大衆文学はエドガー・アラン・ポーが作ったのか

大衆文学は、エドガー・アラン・ポーが作ったのでしょうか。

Aベストアンサー

エドガー・アラン・ポーといえば、どちらかというと、探偵小説の元祖として知られているのではないでしょうか。

大衆の好みの合わせて書かれたフィクションの読み物、という程度の意味での「大衆文学」でしたら、ポーをはるかに遡って、紀元2世紀末ごろに書かれたといわれる『ダフニスとクロエ』があります。岩波文庫とかに入っています。お読みになると、「これぞ大衆文学!」と感じると思いますよ。

Qダイアログのボタンが押された時に、その「ボタン」のあるダイアログと、すでに表示されている他のダイアログを消したいです

Win2000/MFC/ダイアログベース
で作業しています。初心者です(^^;)

Aというダイアログで「あるボタンa」を押してDoModalでBというダイアログを表示させ、Bダイアログで「あるボタンb」を押してDoModalでCというダイアログを表示させ、Cダイアログで「あるボタンc」を押した時にBダイアログとCダイアログを閉じたい(消したい)のですが
EndDialogで消せません
DoModalの戻り値をret_b,ret_cとした場合
EndDialog(ret_c);
EndDialog(ret_b);
としたのですが。。。

やり方がおかしいのか、よくわかりません・・
初心者でもわかりやすいお返事お待ちしています(^^;)

Aベストアンサー

各ダイアログボックスを CDialog の派生クラスとして次のように定義したとします。

CDlgA --- A というダイアログボックス
CDlgB --- B というダイアログボックス
CDlgC --- C というダイアログボックス

CDlgA のあるメンバ関数から CDlgB::DoModal() でダイアログボックス B を表示させます。 CDlgB のあるメンバ関数で EndDialog() を実行すればダイアログボックス B を閉じることができます。ここで、 CDialog::EndDialog() は引数として INT 型の値をひとつ渡すことができますが、その値が先の CDlgB::DoModal() の戻り値となります。
戻り値がある特定の値だったとき、つまり、質問の例ではダイアログボックス B で EndDialog(ret_b) が実行されたことが特定できたときに CDlgA も EndDialog() を実行すれば連鎖してダイアログボックスを閉じることができます。
ダイアログボックス C についても同様です。

実際のコーディングでは次のようになると思います。
ただし、ダイアログボックス A もモードレスで表示されていると仮定しています。



#define ret_b (-1) // 特定の値
#define ret_c (-1) // ID_OK や ID_CANCEL と重ならないように注意

...

(CDlgA の実装)

void CDlgA::OnButtonA() // あるボタン a が押されたときの処理
{
CDlgB dlg; // ダイアログボックス B

if (dlg.DoModal() == ret_b) // モードレスで表示して、戻り値をチェック
EndDialog(-1); // ダイアログボックス A を閉じる
}

...

(CDlgB の実装)

void CDlgB::OnButtonB() // あるボタン b が押されたときの処理
{
CDlgC dlg; // ダイアログボックス C

if (dlg.DoModal() == ret_c) // モードレスで表示して、戻り値をチェック
EndDialog(ret_b); // ダイアログボックス B を閉じる
}

...

(CDlgC の実装)

void CDlgC::OnButtonC() // あるボタン c が押されたときの処理
{
EndDialog(ret_c); // ダイアログボックス C を閉じる
}

各ダイアログボックスを CDialog の派生クラスとして次のように定義したとします。

CDlgA --- A というダイアログボックス
CDlgB --- B というダイアログボックス
CDlgC --- C というダイアログボックス

CDlgA のあるメンバ関数から CDlgB::DoModal() でダイアログボックス B を表示させます。 CDlgB のあるメンバ関数で EndDialog() を実行すればダイアログボックス B を閉じることができます。ここで、 CDialog::EndDialog() は引数として INT 型の値をひとつ渡すことができますが、その値...続きを読む

Qエドガー・アラン・ポーのどの小説が原作?

原題:Operene stiny
製作:1930年 チェコスロバキア
監督:レオ・マーティン
出演:イジー・フロン、他

原題:L'Etrange Fiancee
製作:1930年 仏
監督:George Pallu
出演:アンリ・ボーダン、他

上記映画2作品は、エドガー・アラン・ポーの同一の小説を原作にして製作されたと言う事なのですが、どの小説が原作なのかが分かりません。
どなたかご存知の方、お教え下さい。
できれば情報源も…。

Aベストアンサー

今晩は
参考URLによるとどちらも短編小説「SYSTEM OF DOCTOR TARR AND PROFESSOR FEATHER(タール博士とフェザー教授の療法)」が原作のようですね。↓

http://www.citwf.com/film255153.htm

http://www.citwf.com/film106205.htm

ご参考まで。

http://homepage3.nifty.com/wooddoor/bookshelf/poe.htm

http://www.papy.co.jp/act/books/1-103836/

参考URL:http://www.citwf.com/person32264.htm

Q子ダイアログのコントロールにフォーカス(VC++2005)

お世話になります。
Visual Studio 2005でVC++の開発をしております。
ダイアログを2つ用意して、一つはstyleを「ポップアップ」に、
もう一つは「子」にしてます。
親ダイアログ内にタブをセットし、その上に子を乗せる処理を行っていて
親のダイアログのボタンイベントから子のダイアログのコントロールにフォーカスを
当てたいのですが、どのようにしたらよろしいのでしょうか?

親ダイアログ内では、

(子ダイアログ).Create(子ダイアログクラス, this);

で生成して
MoveWindowやShowWindowで位置・表示の設定を行っています。

親から子ダイアログ内のコントロールの入力チェックを行おうと思い、
未入力判定まではできたのですが
どうしてもSetFocus()でフォーカスが当たりません。

どなたかご教授していただけますでしょうか?

Aベストアンサー

>どうしてもSetFocus()でフォーカスが当たりません。
はどこで実行しているのでしょうか?

ダイアログ上のコントロールのフォーカスを、ダイアログを開くときに設定する場合、WM_INITDIALOGに対してちゃんと反応する必要がありますが…

http://msdn2.microsoft.com/ja-jp/library/6zxw3b4a(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/fwz35s59(VS.80).aspx
戻り値のところに記述されています。

Qエドガー・アラン・ポーの作品を探しています。

昔、アニメ「まんが世界昔ばなし」で『炎のうま』と言う作品を見たのですが、最近になって思いだし調べてみたところ、原作が推理小説で有名なエドガー・アラン・ポーだと言う事を知りました。
子どもが見るにはかなり残酷と言うか、落ちの無い話だったのでかなり印象に残っています。
ポーが書いた原作を読んでみたいと思ったのですが、この作品は日本でも翻訳出版されているのでしょうか?
『世にも怪奇な物語』と言う映画で『黒馬の哭く館』と言う題名でも映像化されていたようなので、もしかしたら原題が違うのかもしれません。
一度原作を読んでみたいのですが可能でしょうか?
もし出版されているのなら、収録されている書籍のタイトルや出版社など教えてください。
御存じの方、どうぞ宜しくお願い致します。

Aベストアンサー

以下によれば、「メッツェンガーシュタイン」が原作だそうです。
http://yuubaenoumi.de-blog.jp/honokibun/2006/12/post_30a0.html
http://blogs.yahoo.co.jp/mikanjyuice/6002960.html

創元推理文庫522-1「ポオ小説全集1」に収録されているそうです。
http://www.aga-search.com/110-1-1poe.html
http://book.akahoshitakuya.com/b/4488522017

蛇足:「世にも怪奇な物語」の解説
http://momorex.blog.fc2.com/blog-entry-69.html
http://sknys.blog.so-net.ne.jp/archive/20090511
http://d.hatena.ne.jp/kuroda920/20111110/1320933737

Q別スレッドからメインダイアログのコントロールにアクセスする方法

VC++2005 MFC WindowsXPを使用しています。

メインダイアログに作成したエディットボックスに
フォーカスをセットしたいのですが、
別スレッドから行うにはどのようにすればよいのでしょうか?

メインダイアログにあるボタンを押すと別スレッドの処理に入り、
その中でメインダイアログのコントロールを操作しようとしています。

//フォーカスをセット
CWnd* MyEdit = ( CWnd* )this->GetDlgItem( IDC_EDIT1 );
MyEdit->SetFocus();


宜しくお願い致します。

Aベストアンサー

 こんにちは。
 スレッドにダイアログ又はエディットボックスのハンドルを直接渡して、

::SetFocus(::GetDlgItem(hDlg, IDC_EDIT1));

 の様にして、win32APIで操作するか、

CWnd* pDlg = CWnd::FromHandle(hDlg);
CWnd* pEdit = pDlg->GetDlgItem(IDC_EDIT1);
pEdit->SetFocus();

 の様にして、スレッド内でハンドルからクラスを作成して操作するのではないでしょうか。
 後思いつくのは、ダイアログにユーザー定義メッセージを追加し、スレッド内からユーザー定義メッセージをポストして、向こう側で何かをさせる位でしょうか。

Qエドガー・アラン・ポー ⇒ 江戸川乱歩

よろしくお願いします。

海外の有名な固有名詞(人名以外も可)をもじった日本の有名人のペンネーム、芸名(グループ名も可)を挙げてください。
文学カテで質問していますが、文学界の人物でなくてもOKです。

今のところ、ここまで集めました。
・エドガー・アラン・ポー ⇒ 江戸川乱歩
・ダニー・ケイ ⇒ 谷啓
・バスター・キートン ⇒ 益田喜頓
・ザ・ビートルズ ⇒ ずうとるび
・クインシー・ジョーンズ ⇒ 久石譲
・グレタ・ガルボ ⇒ 呉田軽穂(松任谷由実)
・ダンセイニ卿 ⇒ 団精二(荒俣宏)
・イーデス・ハンソン ⇒ 半村良
・モーリス・シュバリエ ⇒ 芝利英
・イヴ・モンタン ⇒ 夷撫悶汰(桑田佳祐)
・ビビアン・リー ⇒ 微美杏里(藤真利子)
・メグ・ライアン ⇒ Meg.C(松田聖子)
・周星馳 ⇒ 馳星周
・アーサー・C・クラーク ⇒ 浅倉久志
・アーサー・マッケン ⇒ 朝松健
・エラリー・クイーン(イニシャルがE.Q.) ⇒ 依井貴裕(音読みすると、いいきゆう)
・バーナード・ショー ⇒ 花登筐

Aベストアンサー

マルキ・ド・サド⇒丸木砂土(秦豊吉)
http://ja.wikipedia.org/wiki/%E7%A7%A6%E8%B1%8A%E5%90%89

ボブ・ディラン⇒ホフディラン
http://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%95%E3%83%87%E3%82%A3%E3%83%A9%E3%83%B3

アルチュール・ランボー⇒みなみらんぼう
http://ja.wikipedia.org/wiki/%E3%81%BF%E3%81%AA%E3%81%BF%E3%82%89%E3%82%93%E3%81%BC%E3%81%86

確定できないところで
シャルル・デュラン⇒久生十蘭
http://ja.wikipedia.org/wiki/%E4%B9%85%E7%94%9F%E5%8D%81%E8%98%AD

ミッキー・マウス⇒三木鶏郎
http://www.mikitoriro.jp/html/KEY%20WORD/KEY%20WORD.html

あと、小田島雄志が学生時代にチェーホフをもじって「池永保夫」と名乗ったことがあるそうですが一体何のアルバイトをしていたのか(翻訳???)・・・。
http://ja.wikipedia.org/wiki/%E5%B0%8F%E7%94%B0%E5%B3%B6%E9%9B%84%E5%BF%97

マルキ・ド・サド⇒丸木砂土(秦豊吉)
http://ja.wikipedia.org/wiki/%E7%A7%A6%E8%B1%8A%E5%90%89

ボブ・ディラン⇒ホフディラン
http://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%95%E3%83%87%E3%82%A3%E3%83%A9%E3%83%B3

アルチュール・ランボー⇒みなみらんぼう
http://ja.wikipedia.org/wiki/%E3%81%BF%E3%81%AA%E3%81%BF%E3%82%89%E3%82%93%E3%81%BC%E3%81%86

確定できないところで
シャルル・デュラン⇒久生十蘭
http://ja.wikipedia.org/wiki/%E4%B9%85%E7%94%9F%E5%8D%81%E8%98%AD

ミッキー・マウス⇒三木...続きを読む

Qダイアログのコントロールじゃない場所のクリックを検出したい。

VC++6.0、Win32 APIでダイアログボックスを作っています。

ダイアログボックス上のラジオボタンでもリストビューでもエディットボックスでもなくて、
何にもないところをクリックしたときに、そのクリックを検出することはできますか。

教えてください。

Aベストアンサー

★マウスのメッセージを処理すれば良い。
・クライアント・エリア内でコントロール以外は
 左ボタンは『WM_LBUTTONDOWN』、『WM_LBUTTONUP』、『WM_LBUTTONDBLCLK』
 右ボタンは『WM_RBUTTONDOWN』、『WM_RBUTTONUP』、『WM_RBUTTONDBLCLK』
 中ボタンは『WM_MBUTTONDOWN』、『WM_MBUTTONUP』、『WM_MBUTTONDBLCLK』
・非クライアント・エリア内でコントロール以外は
 左ボタンは『WM_NCLBUTTONDOWN』、『WM_NCLBUTTONUP』、『WM_NCLBUTTONDBLCLK』
 右ボタンは『WM_NCRBUTTONDOWN』、『WM_NCRBUTTONUP』、『WM_NCRBUTTONDBLCLK』
 中ボタンは『WM_NCMBUTTONDOWN』、『WM_NCMBUTTONUP』、『WM_NCMBUTTONDBLCLK』
・マウスの移動は
 『WM_MOUSEMOVE』、『WM_NCMOUSEMOVE』があります。

参考文献:
・http://www.wisdomsoft.jp/dev/api/windows/038→『マウスメッセージ』
・http://www.wisdomsoft.jp/dev/api/windows/039→『マウスの移動を処理』
・http://www.wisdomsoft.jp/dev/api/windows/040→『ダブルクリック』
・http://www.wisdomsoft.jp/dev/api/windows/041→『非クライアントエリアのマウスメッセージ』
・以上。

★マウスのメッセージを処理すれば良い。
・クライアント・エリア内でコントロール以外は
 左ボタンは『WM_LBUTTONDOWN』、『WM_LBUTTONUP』、『WM_LBUTTONDBLCLK』
 右ボタンは『WM_RBUTTONDOWN』、『WM_RBUTTONUP』、『WM_RBUTTONDBLCLK』
 中ボタンは『WM_MBUTTONDOWN』、『WM_MBUTTONUP』、『WM_MBUTTONDBLCLK』
・非クライアント・エリア内でコントロール以外は
 左ボタンは『WM_NCLBUTTONDOWN』、『WM_NCLBUTTONUP』、『WM_NCLBUTTONDBLCLK』
 右ボタンは『WM_NCRBUTTONDOWN』、『WM_NCRBUTTONUP...続きを読む

Qエドガーアランポーの大鴉のモデル・・。

エドガーアランポーの作品の「大鴉」にでてくるレノアの言う女性にはモデルとなる人物がいるのでしょうか?いるのでしたらそれは誰なのでしょう?

Aベストアンサー

ポー (1809-1849) について詳しくはありません。検索してわかったことをまとめます。

ポーのいとこにして妻であったヴァージニア (1822-47) がモデルではないかといわれることがあります。

「大鴉」 (1845) が発表されたころヴァージニアは結核を患っていて2年後に亡くなるというのが、その理由です。ポーが友人に宛てた手紙 (1848) によれば、ヴァージニアは喀血するたびに何度も死の縁をさまよい、ポーはそのたびに半狂乱になったようです。

ただし、 「大鴉」 にみられるような若く美しい最愛の女性と死別した悲しみは、ほかの作品のなかにも出てきます。

A Paean (1831),Lenore (1841),Ulalume (1847),Annabel Lee (1849)
The Fall of the House of Usher (1839)

一連の作品の女性像がヴァージニアと重なる部分は大きいようです。しかし、ポーとの結婚 (1836)、最初の喀血 (1842) の時期を考えあわせると、ポーのなかにはじめからレノアのような美しい悲しみの観念が形成されていて、それが不思議なことにヴァージニアと重なったことによって、一層ポーを痛めつけたように思われます。

ポーが母 (1811)、養母 (1829)と早く死別したことが関連しているのではないかという記事もありました。


参考URL(質問の回答に直接関係するもののみご紹介します)

http://www.greenspun.com/bboard/q-and-a-fetch-msg.tcl?msg_id=00BYrx
http://www.cummingsstudyguides.net/Guides2/Raven.html
http://en.wikipedia.org/wiki/Virginia_Eliza_Clemm_Poe
http://www.eapoe.org/geninfo/poechron.htm 

ポー (1809-1849) について詳しくはありません。検索してわかったことをまとめます。

ポーのいとこにして妻であったヴァージニア (1822-47) がモデルではないかといわれることがあります。

「大鴉」 (1845) が発表されたころヴァージニアは結核を患っていて2年後に亡くなるというのが、その理由です。ポーが友人に宛てた手紙 (1848) によれば、ヴァージニアは喀血するたびに何度も死の縁をさまよい、ポーはそのたびに半狂乱になったようです。

ただし、 「大鴉」 にみられるような若く美しい最...続きを読む

QVC++6.0で、ダイアログを新規に作成し、クラスウィザードでそのダイ

VC++6.0で、ダイアログを新規に作成し、クラスウィザードでそのダイアログにクラスを割り当てる時
「クラス"CAbcDlg"のファイル(..¥AbcDlg.h, ..¥AbcDlg.cpp)を開けません」という
エラーメッセージが出て、新しいクラスを作れません。何故でしょうか?

注1)正しく作れることもあります。
注2)出来てしまったAbcDlg.hとAbcDlg.cppファイルを削除して、
  同じ操作をすると新しいクラスは作れます。

Aベストアンサー

 こんばんは。

 最近VC6.0を使用していないのですが、確かにそういう現象が発生した事は幾度となくあります。
 CLWファイル(クラスウィザードファイル)に問題があると、発生する現象です。
 プロジェクトのフォルダからCLWファイルをどこか別の場所移動した後、VC6.0を起動しなおしてプロジェクトを読み込むと、正しいCLWファイルを再生成します。此れで対処出来ると記憶しております。
 しかし、何故不完全なCLWファイルを作成してしまうのかは、未だにわかりません。
 尚、CLWファイルの実態は単なるテキストファイルですので、メモ帳などで開いて見る事が出来ます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング