ダイアログではなくメインウィンドウのタイトルバー及びフレームも無くした
クライアント領域のみにする方法を教えて下さい。
また、そのようにした時に、真っ白いクライアント領域をデスクトップ一杯の
大きさに出来るのでしょうか?
ご存知の方よろしくお願い致します。
環境 WIN98 VC++6.0 MFCにて
> ダイアログではなくメインウィンドウのタイトルバー及びフレームも無くした
> クライアント領域のみにする方法を教えて下さい。
>
CWndから派生させたクラスを定義して、アプリケーションクラスのInitInstance()内で
生成させることになると思います。
アプリケーションウィザードが勝手に生成するコーディングは、不要になるわけです。
タイトルバーを持つか持たないかは、そのウィンドウにWS_CAPTIONスタイルが
含まれているか、ということになります。
> また、そのようにした時に、真っ白いクライアント領域をデスクトップ一杯の
> 大きさに出来るのでしょうか?
>
単に、そのウィンドウのサイズをデスクトップの大きさにすればよろしいかと。
sugarさん 早々の回答有難う御座います。
実はまだ初心者で、最近ようやくVC++が判り始めました。
おっしゃっていることの雰囲気はわかります。
(というかまったく判らないと言う程の超初心者ではありません)
ということで、もう少し詳細或いは参考になるサイト等
教えていただけるとありがたいです。
>> また、そのようにした時に、真っ白いクライアント領域をデスクトップ一杯の
>> 大きさに出来るのでしょうか?
正確にはデスクトップ以上にできるか?ということです。
無理なお願いでしたら、無視してください。
今後とも宜しくお願いします。
CFrameWnd::PreCreateWindow() を処理すりゃいいと思うが?
「PreCreateWindow」で検索してごらん。
>正確にはデスクトップ以上にできるか?ということです。
好きなだけ大きくなります。
>ダイアログではなくメインウィンドウのタイトルバー及びフレームも無くした
>クライアント領域のみにする方法を教えて下さい。
リソースエディタでダイアログのプロパティを開いて、
「スタイル」の「境界線」を「しない」に変更するのでは駄目ですか。
dairygoods さんの方法は、確かにシンプルで簡単ですね(その手があったか)。
ダイアログベースのアプリ作りでいけるわけですから。
もう少し詳細を、ということですが。
①Class WizardでCWndを継承したクラスを生成
②InitInstance()で以下実施
CString sreClassName = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);
m_pMainWnd = new CHogeWnd;
m_pMainWnd->CreateEx(0, sreClassName, ", WS_POPUP|WS_VISIBLE,
0, 0, 100, 60, NULL, NULL);
とりあえず縁なしウィンドウは生成できます。
※WM_PAINTの処理とかは、別途必要になります。
>確かにシンプルで簡単ですね(その手があったか)。
「ダイアログではない」というのが質問者の前提だと思うが。:-p
皆さん回答ありがとう御座います。
Shimuraさんがおっしゃっているように、「ダイアログではない」というのが前提です。
Shimuraさんの方法が取っ付き易かったのでTRYしました。
1.ツールバーは、プロジェクト作成時のウィザードに従い、削除できました。
2.メニューバーは、以下で消せました。
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
・
・
・
cs.hMenu = NULL;//■メニューバーを消す
return TRUE;
}
3.あとはタイトルバーとフレームです。
そこまで出来たのなら、あとはここをこうするだけだと教えていただける
方がいましたら、よろしくお願いいたします。
またその他の方の方法も後からTRYして結果を報告します。
(まだすぐやれるほどの技能がないため、勘弁ください)
以下でメニューも消えました。あとフレームのみです。
BOOL CxxxApp::InitInstance()
{
・
・
・
//■ここから追加
// ウィンドウが表示(ShowWindow)される前にWS_CAPTIONスタイルを削除
m_pMainWnd->ModifyStyle(WS_CAPTION, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE |
SWP_FRAMECHANGED);
//■ここまで追加
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
ゥゥ・
cs.style = WS_POPUP;
cs.x = cs.y = 0;
cs.cx = ::GetSystemMetrics( SM_CXSCREEN);
cs.cy = ::GetSystemMetrics( SM_CYSCREEN);
ゥゥ・
return TRUE;
}
化けた。X-(
ゥゥ・ <----・・・・
Shimuraさん 出来ました。
有難う御座います。とりあえず報告です。
皆さん いろいろ教えていただき有難うございました。
ダイアログではなくメインウィンドウでの質問でしたが、ダイアログであれば容易に
実現できることが分かって大変参考になりました。
今回はShimuraさんのやり方で実現できまし・・・・・と思っていたら、
良く見ると画面の周りにフレームらしきものが残っていました。
サイズダウンしてみるとフレームが消えていません。
ということで、分かる方がみえましたらお願いします。
ウィンドウの幅、高さをスクリーンサイズより数ピクセル分大きい値を設定し、
ウィンドウの座標を(0, 0)ではなく、マイナスの値にしてみてはどうでしょう?
例えば...
cs.x = cs.y = -4;
cs.cx = ::GetSystemMetrics( SM_CXSCREEN) + 8;
cs.cy = ::GetSystemMetrics( SM_CYSCREEN) + 8;