MDIで起動時に2つの子ウィンドウを並べて表示させたい – プログラミング – Home

MDIで起動時に2つの子ウィンドウを並...
 
通知
すべてクリア

[解決済] MDIで起動時に2つの子ウィンドウを並べて表示させたい


まさひろ
 まさひろ
(@まさひろ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

初めて投稿します。
VC初心者のまさひろといいます。

お尋ねしたいのですが、今MDI型のプログラムを作っていて、起動時に(ビルドして
実行をかけてすぐ)親ウィンドウの中に子ウィンドウを2つ並べて表示させたいのです
が、その方法が解りません…。
現在、親ウィンドウの縦に半分ダイアログ型の子ウィンドウが1つ出来てるのですが、
あと半分のスペースにもう1つダイアログ型の子ウィンドウがほしいです。
初心者的な質問かもしれませんが、お解りの方はご教授よろしくお願いします。


引用未解決
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

ダイアログ型の子ウィンドウということは、ダイアログを同時に2つ出す方法が分からないとい
う事でしょうか?
それでしたら、モードレスで表示してあげればよいです。

起動と同時に2つのウィンドウということでしたら、現在1つ出している場所を参考に、もうひ
とつ出す処理を追加すればよいと思います。

起動と同時に子ウィンドウを出している場所が分からない場合は、ソースなどを見てみないと何
とも言えないと思います。
アプリケーションウィザードでMDIアプリケーションを作成した場合は子ウィンドウはウィン
ドウベースになるはずですので。
(VC++6の場合ですので、.netは分かりません)

バージョンとOS等も提示した方がよいと思います。


返信引用
まさひろ
 まさひろ
(@まさひろ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

ひろぴーさん、ありがとうございます。
質問の仕方で不透明な部分があった事をお詫びします。

自分のはVC++6で、OSはWindows XPです。
ダイアログ型の子ウィンドウというのは、
プロジェクト作成時の「MFC AppWizard (exe)」の「ステップ6」で、C~Viewの基本ク
ラスに「CFormView」を指定してダイアログのようにViewにコントロールを置けるように
していることです。

自分で書き込んだコード部は、
親ウィンドウの出現位置(座標?)とサイズを
CMainFrameのPreCreateWindow(CREATESTRUCT& cs)の
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)に
cs.x=0; cs.y=0;
cs.cx=1024; cs.cy=768;
子ウィンドウの出現位置(座標?)とサイズを
CChildFrameのPreCreateWindow(CREATESTRUCT& cs)の
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)に
cs.x=-5; cs.y=-28;
cs.cx=520; cs.cy=768;
として変更しています。

あと、「起動時に子ウィンドウを2つ出す」というところは、
C~App::InitInstanceでParseCommandLineに
  if(cmdInfo.m_nShellCommand==CCommandLineInfo::FileNew)
 OnFileNew();
というコードを書いて2つ出していますが、このままでは2つ重なったままで、
これを横に並べて表示させたいのですが、2枚目の子ウィンドウの出現させる座標をド
コに書いていいのかもわかりません。。。

VC++を独学で始めて1ヶ月足らずなので右も左も解らない状態で、質問の仕方も解り難
い事が多いかもしれませんが、よろしくお願いします。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

「起動時に子ウィンドウを2つ出す」については、InitInstance()にOnFileNew()を
書くよりも、CWinApp::OnFileNew()をオーバーライドして、

void CxxApp::OnFileNew()
{
CWinApp::OnFileNew();
CWinApp::OnFileNew();
}

と2つ並べて書いた方がいいと思います。
(CxxAppのメッセージマップエントリに
ON_COMMAND(ID_FILE_NEW, OnFileNew)←新しい方
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)←古い方
このようにエントリが2つ並ぶことになりますが、新しい方が先にあれば問題ない
です。古い方をコメントアウトしてもOK。)

そして子ウィンドウ2つを左右にきれいに並べるには、続けて↓を入れるといいです。

CMDIFrameWnd* p=(CMDIFrameWnd*)AfxGetMainWnd();
p->MDINext();←フォーカスを最初のウィンドウに移す
p->MDITile(MDITILE_VERTICAL);


返信引用
まさひろ
 まさひろ
(@まさひろ)
ゲスト
結合: 22年前
投稿: 1
 

返事が遅れて申し訳ありません。
nさんがおっしゃるとおりにしたら出来ました!
どうもありがとうございました!!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました