• ベストアンサー

VC(Ver6.0)でダイアログサイズの設定

VisualC++(Ver6.0)で開発を行っていますが、ダイアログのサイズ(幅、高さ)を任意で設定する方法を探しています。 やりたい事としては、親ウインドウの幅に合わせて、子ウインドウとなるダイアログの幅を変更し、表示させたいと考えております。(高さは親ウインドウの3分の1の高さと考えております) すいませんが、お教えいただけると大変助かります。 よろしくお願い致します。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

VS2005でやってみました。 MFCアプリケーションで自動生成されるCAbortDlgです。 # VC++6.0とだと…MFCの世代が微妙に異なりますけどね……。 インデント(というか全角空白)が深くなっている部分が追加したコードです。 BOOL CAboutDlg::OnInitDialog() {  CDialog::OnInitDialog();  // TODO: ここに初期化を追加してください   CWnd *MainWnd = this->GetParent();   RECT MainRect;   MainWnd->GetWindowRect(&MainRect);   SetWindowPos(&wndTop, 0, 0, ((MainRect.right - MainRect.left) /2), ((MainRect.bottom - MainRect.top) / 3), SWP_NOMOVE);  return TRUE; // return TRUE unless you set the focus to a control  // 例外 : OCX プロパティ ページは必ず FALSE を返します。 } MainWndにダイアログの親ウィンドウを取得して、GetWindiwRect()で親ウィンドのサイズを取得。 SetWindowPos()でサイズを変えてみました。 ダイアログ内のコントロールの再配置は行っていないので、親ウィンドウのサイズによっては悲惨なことになりますが。 # 実際にやるなら…算出したサイズと最小サイズで処理するべきでしょう。

dbc47828
質問者

お礼

お忙しいところありがとうございました。 教えていただいた方法で出来ました。 コントロールの配置は、自分なりにやってみます。 本当にありがとうございました。 また、何かの際はよろしくお願い致します。

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

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>MFCを使いたいと思います。 でしたら…OnInitDialog()をイベントハンドラに追加してください。 VC++6は手元にありませんので手順は自分で調べていただくことになりますが。 # クラスウィザードあたりから追加でしたかねぇ… # http://denno.hinodetown.net/denno/dbase/vc6dao.htm こんな感じ? # オブジェクトIDがダイアログのリソースID、メッセージにWM_INITDIALOGとかあるかと。

全文を見る
すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

今時VC++6.0というのも…… まぁ、古い資産が残っている関係で使い続けるしかない。 というのも判りますが。 で、MFCなんですか? Win32APIなんですか? ダイアログ開いた場合、ダイアログプロシージャにWM_INITDIALOGが通知されますから、 そこでサイズを変更するようなコードを入れればいいのではないでしょうか?

dbc47828
質問者

補足

MFCを使いたいと思います。 何か良い方法はあるでしょうか? 度々もうしわけありません。

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

関連するQ&A

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

    お世話になります。 Visual Studio 2005でVC++の開発をしております。 ダイアログを2つ用意して、一つはstyleを「ポップアップ」に、 もう一つは「子」にしてます。 親ダイアログ内にタブをセットし、その上に子を乗せる処理を行っていて 親のダイアログのボタンイベントから子のダイアログのコントロールにフォーカスを 当てたいのですが、どのようにしたらよろしいのでしょうか? 親ダイアログ内では、 (子ダイアログ).Create(子ダイアログクラス, this); で生成して MoveWindowやShowWindowで位置・表示の設定を行っています。 親から子ダイアログ内のコントロールの入力チェックを行おうと思い、 未入力判定まではできたのですが どうしてもSetFocus()でフォーカスが当たりません。 どなたかご教授していただけますでしょうか?

  • Windowsセキュリティダイアログのサイズについ

    金融機関のWebバンキングサイトで、Windowsセキュリティダイアログが表示され、証明書の選択をするのですが、ダイアログのサイズが狭い(200pxくらい)のに加えて文字フォントも大きいため、証明書の名称が最後が…で隠れており、カーソルをあてないと表示されないため、非常に不便です。 このダイアログはサイズが変更できないですし、デフォルトの文字フォントを小さくしても、このダイアログ内の文字サイズは変わりませんでした。 なお、OSはWindows7の64bitで、ブラウザはIE9です。 会社のPCのため、環境は変えづらいですが、ブラウザくらいでしたら変更は可能です。 以上、ダイアログのサイズ、文字フォントの設定方法はないでしょうか? レジストリをいじるやり方でも構いません。 宜しくお願いします。

  • ダイアログとリストコントロールのサイズ変更

    VC++でダイアログベースのプログラミングをしています。 初心者です。 ダイアログの枠をドラッグしてサイズ変更ができるようにしたくて、 先週からネットや本を読み漁っていたのですが、 先日リソースのプロパティで枠の種類を[サイズ変更枠]にすると、 可変にできることがわかりました。 ただ、ダイアログの大きさは変更できるようになったものの、 ダイアログに配置してあるリストコントロールのサイズは固定のままです。 これを、ダイアログの枠のサイズに合わせて可変にすることはできないでしょうか。 また今回の内容に限らず、ダイアログやコントロールを作成する時に、 参考になるような本やサイトでオススメのものがありましたら、 ぜひ教えて頂きたいです。 ちなみに私が今参考にしている本はこの3冊です。 「図解でわかるVisualC++2005 Express Edition」 「VisualC++逆引き大全 500の極意」 「VisualC++.NET 逆引き大全 500の極意」

  • チャイルドダイアログの最前面表示

    現在、MDIフレーム上に、複数のチャイルドスタイルのダイアログが存在するプログラムを改造中です。 その中にMapDKIVの地図を描画しているダイアログがあり、その地図上に縮尺スケールのビットマップを描画しようとしています。(MapDKIVには、その機能がまだ無い為) 縮尺スケールのビットマップを描画する為のダイアログを同様にチャイルドスタイルにし、SetWindowPos()を使って最前面に表示しようとしましたが、地図を描画しているダイアログをクリックすると、後ろへ行ってしまいます。 MSDNのSetWindowPos()の説明には、 「子ウィンドウ、ポップアップウィンドウ、またはトップレベルウィンドウのサイズ、位置、および Z オーダーを変更します。」 と記述されています。 が、あるサイトでは、 「MDI子Formは、子Windowであって、TopLevelWindowではないのですから、SetWindowPosは最前面や最背面設定を受け入れません。」 と記述されています。 縮尺スケールのビットマップを描画する為のダイアログを通常のスタイルにし、「フォアグランド表示する」とすると、メインフレームのサイズを小さくしたり、移動した時に、その場所へ取り残されてしまいます。 何か、方法はないものでしょうか? 開発環境 VisualC++ 6.0 SP6 どなたかお助け下さい!よろしくお願いします。

  • CDHtmlDialog で子ダイアログがアクティブになりません

    現在CDHtmlDialogクラスを使って、ダイアログベースのプログラム開発を試みています。開発環境はVisualStudio2008です。 親ダイアログにあるボタンをクリックすると、子ダイアログが親ダイアログに重なる位置に表示され、子ダイアログにあるHTML コントロールのイベント処理等ができるようにしたいのですが、うまくいかず困っています。 子ダイアログの表示まではできたのですが、アクティブになっていないようです。ただ画面に表示されているだけといいますか・・・ 子ダイアログに配置したボタンはクリックできず(カーソルが変わりません)、親ダイアログに配置したボタンはクリックできる、というような状態です。 また、ダイアログの一部が画面外になるように動かしてから元の位置に戻すと、子ダイアログの再描画がされず、その下に隠されていた親ダイアログが出てきてしまいます。 子ダイアログのプロパティは Style:子、Border:なし にしています。 手順は、 1.親ダイアログのOnInitDialogで子ダイアログをCreate。MoveWindowで位置調整。子ダイアログはShowWindowで非表示にする。 2.親ダイアログのボタンをクリックすると、子ダイアログをShowWindowで表示させる。 としています。 CDialogで同じ方法でやっていたときは何も問題なかったのですが・・・ CDHtmlDialogに関する情報はあまり出回っていないようで、こちらに質問させていただきました。 説明が分かり難い点もあるかと思いますが、ご教示よろしくお願いいたします。

  • ダイアログ属性の変更

    はじめまして。 質問させてください。 VC++ 2005 MFC で開発しております。 ダイアログをリソースビューで開いた場合の 表示のプロパティをソース上から変更する方法はありますでしょうか? 小生「表示」-「Border」を [サイズ変更枠]から[細枠]に切り替えたいと考えております。 以上になります。 お詳しい方がおられましたらご教授お願い致します。

  • Windows Mobile6.1でのダイアログアプリケーション開発について (VC++)

    開発環境:Visual Studio 2008 SP1 OS:Windows XP SP3 Windows Mobile(以下WM)向けのダイアログアプリケーションの開発をはじめたのですが、 ダイアログ表示時のスクロール処理について不明な点がございます。 WM上では基本的にフルスクリーンでダイアログが表示されるようですが、配置するコントロールの 種類や数によっては、フルスクリーンのサイズでは納まらず、ダイアログを縦長にデザインしたい などといった状況が多々あります。 単純に上記のようなダイアログを作成して実行してみましたが、OS側がダイアログ上にスクロールバーを 表示してくれて、それを使うことでスクロール表示が行えるというわけではないようでした。 (たとえばダイアログ下部にボタンコントロールを配置してあっても、画面上に表示できない状態) ダイアログのプロパティに「Vertical Scrollbar」や「Horizontal Scrollbar」という項目があり、これを 有効にした上でイベントを使用すればスクロールされている位置情報などが取得できることまでは調べたのですが、 目的である「画面表示外となっている部分を表示する方法」がわかりませんでした。 そもそもWMの開発方法として考え方が誤っているのかもしれませんが、 このような状況に対応する方法をご存知の方がいらっしゃいましたらご教示頂けませんでしょうか?

  • ファイルダイアログについて

    VC++ Ver6.0を使用しています。 ファイルダイアログの「保存」(オープンの場合は「開く」) ボタンの表示を「設定」に変更したいのですが、 方法がわかりません。 ご存じの方がいたら、教えてください。 よろしくお願いいたします。

  • 【VC++2005(CLR)】ダイアログ呼び出し元ダイアログを手前に表示させたい

    VC++初心者です。 現在、VC++ express edition、CLRプロジェクトでコーディングしております。 いろいろな方の力を借りて、モードレスでダイアログ(子ダイアログ)を 呼び出しだすことができました。ありがとうございました。 しかしながら、常にその子ダイアログが呼び出し元ダイアログ(親ダイアログ)の手前に 表示されてしまいます。 各ダイアログがクリックされるたびに、クリックされたダイアログが手前に表示する ようにできませんでしょうか。 よろしくお願いします。

  • Win32のファイルダイアログのサイズ変更のメッセージを受け取るには

    現在Win32 APIのGetOpenFileName/SetOpenFileNameを利用したファイルダイアログの作成をしているのですが、OPENFILENAME.FlagsにOFN_ENABLESIZING属性を、lpfnHookにイベントを取得する関数を設定した状態で、手動によるダイアログサイズの変更を行っても、WM_INITDIALOGやWM_NOTYFYイベントは受け取ることはできても、WM_SIZEイベントを受け取ることができません。 コモンダイアログのウィンドウサイズが変更されたことを知る方法はないでしょうか。