• ベストアンサー

MDI

VC++ 6.0 を使ってメーラーを作っています。 MDIで アドレス帳とメールボックスの2種類の 子ウインドウを出します。  これらの子ウインドウが 最大それぞれ1つだけ表示される ようにしたいのですが、 どうしたらよいのでしょうか?  ヒントをください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.1

それぞれの子ウインドウを開くときには、その違いが分かっているでしょうから、 1.開くとき、SetWindowLong() でウインドウにその種別を記録して   おいて、新規にウインドウを開く度に、   EnumChildWindows() で、記録の種別を調べる。   記録のデータを構造体にして(そのポインタを記録して)おくと、いろいろ記録できて便利。   (閉じるときは解放を忘れないよう) 2.単純な方法は、global 変数にカウンタを設けて、新規に   開くとき、それを見る。 3.これらのウインドウの存在に関連して、メニューがあるなら、   メニューの使用可否を設定するでしょうから、その可否を   調べる。

uyama33
質問者

お礼

ありがとうございます。 2が簡単ですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB6でMDIフォームを使用しています。

    VB6でMDIフォームを使用しています。 MDIフォームで下記プログラムを作成しました。 (1)ツールバー上のボタン1を押し、子フォームAを表示させました。   ※子フォームAの WindowState を「2-最大化」に事前設定し、ウィンドウは最大化して表示されました。 (2)子フォームAを表示した状態で、同じツールバー上にあるボタン2を押し、子フォームB(ダイアログ)を表示させました。   ※子フォームBの WindowState を「0-標準」、BorderStyleを「3-固定ダイアログ」に事前設定し、表示されました。(一般的なオプション画面みたいなもの) 問題点はその際、子フォームAのウィンドウが勝手に「最大化」から「標準」に変わってしまうことです。 これを回避する方法はないのでしょうか? 以上、宜しくお願いいたします。

  • MDIでプロジェクトを作成しSDIとして使用する方法

    次の開発環境でWindowsアプリを作成するにあたり、 アプリケーションの種類をSDIとすべきかMDIと すべきか迷っています。  WindowsXP Professional  Visual Studio.NET 2002  VC++ MFC そこで、質問なのですがアプリケーションの種類を MDIとしてプロジェクトを作成した後にSDIと同じ動き となるようにコードを書く(変更する)ことがで きますか。 例えば、プロジェクトを起動させると、常に1つの ドキュメントがメインウィンドウ全体に表示される。 ご存じの方すいませんがよろしくお願いします。

  • MDIで同時起動するドキュメント数の制限方法

    次の開発環境でWindowsアプリを作成するにあたり、 アプリケーションの種類をMDIとします。  WindowsXP Professional  Visual Studio.NET 2002  VC++ MFC そこで、質問なのですがMDIで同時起動する ドキュメント数を制限する方法はありますか。 例えば、ウィンドウ内で開くドキュメント数を 4つまでに制限する。 .NET上での設定なのか、コード上で行うのか。 または、参照するサイトやサンプルプログラム、 書籍、ヒントとなる関数やコードなど、なんでも よろしいのでご存じなことを教えて頂けないで しょうか。

  • MDI起動時に空のウィンドウが開かないようにするには?

    初歩的な質問で恐縮なのですが、 MDIアプリケーションで起動時に空のウィンドウが開かないようにするにはどうすればよいのでしょうか? 目的 MDIで作ったデータ入力ソフトがありまして、それを閲覧専用に改造したいのです。 つまり、既存のファイルを開くだけでいいのに最初に空ファイルのウインドウが立ち上がるのがウザイということです。 もとのプロジェクトはVC++5.0で作られており(作成者がいなくなってしまった)、今はVC++6.0にコンバートして編集しています。

  • C# の MDI

    フリーソフトの SharpDevelop を使って独学で C# の勉強をしています。 (同じタイプの) 複数の子ウインドウを持つ MDI の作り方は本を読んで分かったのですが、その応用問題として、複数の異なる子ウインドウを一つずつ持つ MDI を作ろうとして行き詰ってしまいました。例えば SharpDevelop はメインウインドウの中にプロパティウインドウやアウトプットウインドウが一つづつ開けますがそのようなことをしたいということです。 子ウインドウごとにフラグを設けて、子ウインドウを開くたびにそのフラグをセットし、そのフラグがセットされていれば新たに子ウインドウを開くことはしないという処理にすればいいはずですが、どうもうまくいきません。 このままでは一度開いてその後閉じられた子ウインドウはフラグがセットされたままになっているため、二度と開けないことになります。子ウインドウが閉じられたことを知るためにデストラクタを使用し、その中でフラグをクリアすればいいと思ったのですが子ウインドウを閉じてもデストラクタが呼び出されないようです。 普通こういう処理はデストラクタを使用するのでしょうか、あるいは別の方法で実現するのでしょうか。

  • MDIでのダイアログ生成

    VC++2005でMDIアプリケーションを作成しています。 ダイアログベースでは、DoModal()にてダイアログを生成していましたが、 MDIでのダイアログ生成の方法が分かりません。。 調べた結果、 (1)CreateWindow()にてクライアントウィンドウを作成 (2)CreateMDIWindow()にて子ウィンドウを作成 の順序で処理を行うことは分かりましたが、 関数の一部の引数に何を設定してやれば良いのかが不明です。。 ※下記はネット上にあったサンプルソースです。  「???」の箇所が不明な引数です。 (1) CreateWindow(   TEXT("MDICLIENT"), //MDICLIENT は固定です   NULL,   WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,   0, 0, 0, 0,   hWnd,       //メインウィンドウのハンドル←???   (HMENU)1,    //←???   hInst,       //インスタンスハンドル←???   (LPSTR)&ccs    //CLIENTCREATESTRUCT構造体のポインタ←???  ); (2) HWND CreateMDIWindow(  MDI_CHILD ,   //ウィンドウクラス名  TITLE ,     //ウィンドウのタイトルバーテキスト  0 ,       //ウィンドウスタイル。WS_MAXIMIZE(最大化表示)など  CW_USEDEFAULT , //X座標  CW_USEDEFAULT , //Y座標  CW_USEDEFAULT , //幅  CW_USEDEFAULT , //高さ  hClientWindow , //クライアントウィンドウのハンドル ←???  hIns ,      //インスタンスハンドル       ←???  0        //アプリケーション定義の値 ); なお、行いたい処理の流れとしては、 CTestDialogクラスより、CTest2Dialogクラスのダイアログを、 呼び出したいのです。 うまく説明できず申し訳ありませんが、 お詳しい方おられましたら、具体例など交えてご説明頂けると幸いです。 お手数ですが、どうか宜しくお願い致します。

  • MDIプログラムで子ウィンドウの相対座標を得るには?

    VC++6.0でMDIプログラムを作っています。 Viewクラスでマウスの右ダブルクリックのメッセージを受け取って、 その関数の中で毎回、アクティブな子ウィンドウの左上の相対座標、 つまり、クライアント領域での子ウィンドウの左上の座標を知りたいのですが、 どのようにすれば得られるか分かりません。分かる方教えてください。

  • VB.net 2010 のMDI

    VB.net2010でMDIアプリを検討中です。 親Formと子Form1、子Form2で考えています。 子Form1が表示されている状態から、さらにメニューから選ぶと もう1つ子Form1が生成され表示されます。 子Form1は必ず1つしか表示されないようにする方法は ないでしょうか。

  • MFC MDIでステータスバーの追加。

    Vd++6.0 MFC。 MDIにてプログラムを作成しているのですが、 親ウィンドウにはステータスバーがついているのですが、 子ウィンドウにはついていません。 子ウィンドウごとにそれぞれのステータスを表示しようと思っているのですが、 ステータスバーを作成する方法がわかりません。 そなたか、ご存知の方宜しくお願い致します。 足りない部分は補足させていただきます。

  • VC++6.0,MDI,子ウィンドウのタイトルが変わる!?

    VC++6.0でMDIプログラムを作成しているものです. 子ウィンドウをダブルクリックすると「ファイルを開く」のコモンダイアログを呼び出し,そこに選択した画像ファイルを表示させるプログラムを作ったのですが,ついでにタイトルバーに開いたファイル名を以下のようにして表示させました. // Viewクラスにて CFileDialog dlg(TRUE, "bmp", "*.bmp",               OFN_HIDEREADONLY|         OFN_OVERWRITEPROMPT,        "BITMAP(*.bmp)|         *.bmp|JPEG(*.jpg)|         *.jpg||"); if (dlg.DoModal() != IDOK) { return; } GetParent()->SetWindowText(dlg.GetFileName()); そして,画像を表示したウィンドウとは別のウィンドウをアクティブにすると,タイトルバーに表示したファイル名がウィンドウを生成したときのタイトルに戻ってしまいます. 子ウィンドウが何個あっても,表示している画像のファイル名をタイトルバーに表示したいのですが,どうすればいいのですか?