• ベストアンサー

子ウィンドウの最大表示

MFCプログラミングをしています。 子ウィンドウを最大表示したいのですが、 CMDIChildWnd::PreCreateWindow(cs)関数で cs.style |= WS_MAXIMIZE; を追加したのですが、表示が変わりません。 他にコーディングするところが必要なのでしょうか? それとも、他の原因が考えられるのでしょうか? よろしくお願いします。

  • zico
  • お礼率60% (48/80)

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

  • ベストアンサー
回答No.2

MFCってヤツはホントにいろいろ勝手なことをやってくれて困ります。 設定しても設定しても無視してくれるし。 OnCreateClientあたりでMDIMaximize()してしまいましょう。

zico
質問者

お礼

一発でうまく行きました。 ご指導ありがとうございました。 今後ともよろしくお願い致します。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

私は MFC は使いませんが、多分、これでいけると 思いますよ。

参考URL:
http://homepage2.nifty.com/kotoba/mfc_faq/chap6.html#6_1_6
zico
質問者

お礼

HPの紹介ありがとうございました。 a-kumaさんの方法でもできましたが、 MDIMaximize(); の方が1行でコーディングできるので、 millionwalkerさんの方法を採用することとしました。 でも、解決方法がいろいろあるということと、 MFCのFAQ集が見つかり、 とても勉強になりました。 ありがとうございました。

関連するQ&A

  • タスクバーに非表示

    SDKではCreateWindowEXを使えば WS_EX_TOOLWINDOWを指定することでタスクバー上に非表示にすることができましたが、 MFCで BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)で cs.dwExStyle |= WS_EX_TOOLWINDOWとしたところ、 最大化、最小化ボタンが消えてしまいます。 最大化最小化ボタンをつけて、かつタスクバーに表示させたくないのですが どうすれば良いでしょうか?

  • ウインドウサイズについて

    起動時のウインドウサイズは以下で指定することが出来ますが、タイマーなどを使って、例えば起動後1分後にサイズを変えることは出来ますか? <VC++6.0 MFCにて> BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを // 修正してください。 // ウィンドウの左上が X軸200,Y軸100の場所に指定 cs.x = 200; cs.y = 100; // ウィンドウのサイズを、幅500,高さ300に指定 cs.cx = 500; cs.cy = 300; return TRUE; }

  • WindowsAPIの、ウインドウの表示非表示

    WindowsAPIのCreateWindowEx関数で作った 例えば第一引数が WS_EX_TOOLWINDOW|WS_EX_TOPMOST で第四引数が WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX のウインドウを、何かのアクションがあったときいったん非表示にしてから、また何かのアクションがあった時に表示させるには、どのような物を使うのがベストなのでしょうか? プロシージャ内(HWNDはhw)で一例として(…?)試しに以下だけのものでやってみると long lStyle = GetWindowLong(hw, GWL_STYLE); lStyle = ~WS_VISIBLE; SetWindowLong(hw, GWL_STYLE, lStyle); 確かに非表示扱いにはなるようなのですが、これだけではスクリーンは再描画されず、再描画されるには人為的に別ウインドウを移動したりしないといけません。 おそらく「何かによって再描画させられれば」出来ると思うのですが それはどうすれば実現できるのでしょうか? また、これより もっと「こっちの方がいい」といった方法はありますでしょうか?

  • accessでフォームの最大化表示

    AというフォームとBというフォームがあります。 Aは任意の大きさで表示、Bは最大化表示をしたいのですが、 Docmd.maximizeなどを使うとすべてが最大化になってしまいます。 Bというフォームだけを最大化するにはどうしたらいいですか? (ディスプレイいっぱいに表示される最大化ではなく、通常の最大化(Accessのウィンドウ内でおさまる大きさ)で お願いします。)

  • ダイアログボックスの最大化・最小化ボタンを無効表示

    VC++ .NET2003 + MFCでプログラムを作成しています。 ダイアログボックスに最大化・最小化ボタン(タイトルバーの右端)を無効状態で表示する方法が分かりません。どなたか、ご教示ください。 ちなみに、ウィンドウスタイルから WS_MAXIMIZEBOX、WS_MINIMIZEBOXを削除するとそれぞれのボタンが表示されなくなりますが、これでは要件を満たしません。 あくまでも、無効状態のボタンを表示させたいのです。 ×ボタンと同じ方法で出来るのかと思い、OnInitDialog()の中で GetSystemMenu(FALSE)->EnableMenuItem(SC_MINIMIZE, MF_BYCOMMAND | MF_GRAYED); GetSystemMenu(FALSE)->EnableMenuItem(SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED); としてみましたが、駄目でした。 # この方法ではシステムメニュー内の項目も無効表示にはなりませんでした。 続いて、WM_INITMENUのハンドラで以下のようにしてみたところ、システムメニューの項目は無効表示になりましたが、タイトルバー右端の最大化・最小化ボタンは有効状態のまま変わりませんでした。 void OnInitMenu(CMenu* pMenu) { pMenu->EnableMenuItem(SC_MINIMIZE, MF_BYCOMMAND | MF_GRAYED); pMenu->EnableMenuItem(SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED); } ちなみに、WM_SYSCOMMANDハンドラ(OnSysCommand)で最大化・最小化のコマンドを無視する事で動作そのものを無視する事は出来ています。 後はボタンを無効表示にするだけなのですが... どうか、よろしくお願いします。

  • 最大化時のフルスクリーン

    いつもお世話になっております。 VS2005 を使ってWindowsアプリケーションの実装を行っています。 最大化時にフルスクリーンにしたくプログラムを作成しているのですが、 WndProc内で下記のプログラムを実行し、 最大化アイコンをクリックするとバグ?が起きてしまいます。 -------------------------------------------------- case WM_SIZE:   cxClient = LOWORD(lParam);   cyClient = HIWORD(lParam);   if(wParam == SIZE_MAXIMIZED){ //最大化されたら     ShowWindow(hWnd, SW_SHOWNORMAL); //(1)ウィンドウを元のサイズに戻す     //(2)アプリケーションのウィンドウのフレームを「なし」にする     GetWindowLong(hWnd, GWL_STYLE); //ウインドウ・スタイルの取得     SetWindowLong(hWnd, GWL_STYLE, WS_POPUP); //ウインドウ・スタイルの設定     SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);     ShowWindow(hWnd, SW_MAXIMIZE); //(3)ウィンドウ最大化   } return 0; -------------------------------------------------- 実行したアプリケーションの右上の最大化ボタンを押すと、 見た感じではif文の中を繰り返し行っているような・・・ 元のサイズに戻って最大化になってを数秒繰り返して 最後にペイントして停止します。(高速なため確かではありません) 上記プログラムをどう直したらよいのでしょう。 ご教授お願いいたします。

  • オーナー付きウィンドウと子ウィンドウについて

    http://web.kyoto-inet.or.jp/people/ysskondo/chap7.html​ のサイトで気になったのですが、 このサイトの hChildWnd=CreateWindow( "SubWindowClass","子ウインドウ", WS_CAPTION|WS_THICKFRAME|WS_CHILD, 10,10,200,100,hwnd,(HMENU)1, cs->hInstance,0); の|WS_CHILDを消すと if((hOwnedWnd==NULL)||(hChildWnd==NULL)) return -1; のところで終了してしまうのですが、 なぜなのでしょうか?

  • ウインドウスタイルの、WS_EX_TOPMOST

    引き続きVC++2008でWindowsフォームアプリケーションを作っています。 WindowsAPIでのウインドウ製作中です。 今Form1を親とするウインドウで、CreateWindowEx内のウインドウスタイルの個所の引数にWS_EX_TOPMOSTを指定したのですが どうも最前面に表示されてくれないようです。 これは何か他にやらないといけない事があるのでしょうか? なお、CreateWindowEx関数は現在、最初の引数を WS_EX_TOOLWINDOW にして、WS_EX_TOPMOST以外のウインドウスタイルは WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX がある状態です。

  • VC++2010 MFC サイズの最大化について

    VC++2010 MFCで作成しているんですが、 ShowWindow(SW_MAXIMIZE)を使用し最大化で表示出来たんですが、上のメニューの所を ダブルクリックすると元のサイズに戻ってしまうんですが、どのようにすれば元のサイズに戻らず サイズも変更されずに最大化のまま表示できますか? よろしくお願いします。

  • ライブラリ??

    VCをつかってコーディングしています。 C言語仕様のネットワークプログラミングです。 socketをつくりデータのやり取りをするのですが gethostbyname()という関数が動作しません。 ちゃんとコンパイルもビルドもとおります。 ライブラリもwsock32.libやws2_32.libをリンクしています。 なにが原因なのかわかりません。 WINDOWSがまずいのでしょうか? 宜しくお願いします。

専門家に質問してみよう