タイトルバーなしのウィンドウの作成方法は? – プログラミング – Home

タイトルバーなしのウィンドウの作成方法...
 
通知
すべてクリア

[解決済] タイトルバーなしのウィンドウの作成方法は?

固定ページ 1 / 3

MK
 MK
(@MK)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

ダイアログではなくメインウィンドウのタイトルバー及びフレームも無くした
クライアント領域のみにする方法を教えて下さい。

また、そのようにした時に、真っ白いクライアント領域をデスクトップ一杯の
大きさに出来るのでしょうか?

ご存知の方よろしくお願い致します。

環境 WIN98 VC++6.0 MFCにて


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> ダイアログではなくメインウィンドウのタイトルバー及びフレームも無くした
> クライアント領域のみにする方法を教えて下さい。
>
CWndから派生させたクラスを定義して、アプリケーションクラスのInitInstance()内で
生成させることになると思います。
アプリケーションウィザードが勝手に生成するコーディングは、不要になるわけです。
タイトルバーを持つか持たないかは、そのウィンドウにWS_CAPTIONスタイルが
含まれているか、ということになります。

> また、そのようにした時に、真っ白いクライアント領域をデスクトップ一杯の
> 大きさに出来るのでしょうか?
>
単に、そのウィンドウのサイズをデスクトップの大きさにすればよろしいかと。


返信引用
MK
 MK
(@MK)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

sugarさん 早々の回答有難う御座います。

実はまだ初心者で、最近ようやくVC++が判り始めました。

おっしゃっていることの雰囲気はわかります。
(というかまったく判らないと言う程の超初心者ではありません)

ということで、もう少し詳細或いは参考になるサイト等
教えていただけるとありがたいです。

>> また、そのようにした時に、真っ白いクライアント領域をデスクトップ一杯の
>> 大きさに出来るのでしょうか?

正確にはデスクトップ以上にできるか?ということです。

無理なお願いでしたら、無視してください。
今後とも宜しくお願いします。


返信引用
Shimura
 Shimura
(@Shimura)
ゲスト
結合: 22年前
投稿: 36
 

CFrameWnd::PreCreateWindow() を処理すりゃいいと思うが?
「PreCreateWindow」で検索してごらん。

>正確にはデスクトップ以上にできるか?ということです。
好きなだけ大きくなります。


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

>ダイアログではなくメインウィンドウのタイトルバー及びフレームも無くした
>クライアント領域のみにする方法を教えて下さい。

リソースエディタでダイアログのプロパティを開いて、
「スタイル」の「境界線」を「しない」に変更するのでは駄目ですか。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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の処理とかは、別途必要になります。


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

http://www.expertmg.co.jp/html/cti/vctips/
ここの「非矩形ウィンドウの作成」これのことですかね


返信引用
Shimura
 Shimura
(@Shimura)
ゲスト
結合: 22年前
投稿: 36
 

>確かにシンプルで簡単ですね(その手があったか)。
「ダイアログではない」というのが質問者の前提だと思うが。:-p


返信引用
MK
 MK
(@MK)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

皆さん回答ありがとう御座います。

Shimuraさんがおっしゃっているように、「ダイアログではない」というのが前提です。
Shimuraさんの方法が取っ付き易かったのでTRYしました。

1.ツールバーは、プロジェクト作成時のウィザードに従い、削除できました。
2.メニューバーは、以下で消せました。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
     ・
     ・
     ・
cs.hMenu = NULL;//■メニューバーを消す
return TRUE;
}

3.あとはタイトルバーとフレームです。

そこまで出来たのなら、あとはここをこうするだけだと教えていただける
方がいましたら、よろしくお願いいたします。

またその他の方の方法も後からTRYして結果を報告します。
(まだすぐやれるほどの技能がないため、勘弁ください)


返信引用
MK
 MK
(@MK)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

以下でメニューも消えました。あとフレームのみです。

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;
}


返信引用
Shimura
 Shimura
(@Shimura)
ゲスト
結合: 22年前
投稿: 36
 

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;
}


返信引用
Shimura
 Shimura
(@Shimura)
ゲスト
結合: 22年前
投稿: 36
 

化けた。X-(
  ゥゥ・ <----・・・・


返信引用
MK
 MK
(@MK)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

Shimuraさん 出来ました。
有難う御座います。とりあえず報告です。


返信引用
MK
 MK
(@MK)
ゲスト
結合: 25年前
投稿: 66
 

皆さん いろいろ教えていただき有難うございました。

ダイアログではなくメインウィンドウでの質問でしたが、ダイアログであれば容易に
実現できることが分かって大変参考になりました。

今回はShimuraさんのやり方で実現できまし・・・・・と思っていたら、
良く見ると画面の周りにフレームらしきものが残っていました。

サイズダウンしてみるとフレームが消えていません。
ということで、分かる方がみえましたらお願いします。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

ウィンドウの幅、高さをスクリーンサイズより数ピクセル分大きい値を設定し、
ウィンドウの座標を(0, 0)ではなく、マイナスの値にしてみてはどうでしょう?

例えば...
cs.x = cs.y = -4;
cs.cx = ::GetSystemMetrics( SM_CXSCREEN) + 8;
cs.cy = ::GetSystemMetrics( SM_CYSCREEN) + 8;


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

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