いつもお世話になっております。
SDIで作成したアプリをタスクバーから消したいのですが、
どのように処理させればいいのかわかりません。
ダイアログベースで消す方法は、ネットで探してみつけました。
親を非表示にして子をメインとして使う方法なんですが、
これをSDIで行うには、SDIを新規で作成しなければならなくなり
SDIを新規で作成する方法がわかりません。
宜しくお願い
致します。
WS_EX_TOOLWINDOWを追加する。
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.dwExStyle |= WS_EX_TOOLWINDOW;
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
たいちうさん>
ありがとうございます。出来ました。
ですが、この部分は何をしているかわかりません。
すみませんが、解説をお願い致します。
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
基底クラスのPreCreateWindowを呼んでますね。
一から説明するのは勘弁。
何が分からないのか絞ってくれれば説明できるかも。
C++の継承の知識は十分身に付けてね。
επιστημηさん>
はい。ですがなぜに呼ぶ必要があるのでしょうか。
たいちうさん>
はい。上にも書きましたが
なぜにCFrameが出てきたのかがわからないんです。
継承についてですね。調べてみます。
> なぜにCFrameが出てきたのかがわからないんです。
継承元だから。
> 継承についてですね。調べてみます。
調べた後で、再質問してほしかった。
たいちうさん>
> 調べた後で、再質問してほしかった。
すみません。
調べてみたのですが
CMainFrameWndの継承したのがCFrameWndとなり
その継承元を記述しなければ
継承先のみとなってしまうからですね。
すみません うまく説明ができません。
> CMainFrameWndの継承したのがCFrameWndとなり
> その継承元を記述しなければ
> 継承先のみとなってしまうからですね。
タイポが多いと、どこまで理解しているのか分かりにくくなります。
気をつけましょう。
CFrameWndを継承したものがCMainFrameね。
CFrameWndが継承元。一般的で、ライブラリ(MFC)の一部。
CMainFrameが継承先。カスタマイズするやつ。
PreCreateWindowは、その名の通りウィンドウを作る直前に呼ばれます。
この関数内では前処理をしてやる必要がありますが、デフォルトの前処理が
CFrameWnd::PreCreateWindow()に書かれています。
共通部分は継承元にあるということ。
今回は特別な前処理を追加しますので、それを1行追加しました。
追加する場所は勿論、CMainFrameのPreCreateWindow()。
この後、本来のデフォルトの前処理を呼ぶために、
CFrameWnd::PreCreateWindow()を呼びます。
この辺はかなり複雑な仕組みなので、これもかなり端折った説明です。
それなりに理解したいのならば、C++を身に付けることと、
WinAPIのみを使ったプログラミングの知識を身に付けることをお薦めします。
たいちうさん>
説明して頂き
誠に、ありがとうございました。
>それなりに理解したいのならば、C++を身に付けることと、
>WinAPIのみを使ったプログラミングの知識を身に付けることをお薦めします。
しっかりと身に付けたいと思います。
言葉が足りなかったけど、C++とWinAPIは、MFCの為の予備知識としてあげました。
C++とWinAPIを理解 != MFCを理解
たいちうさん>
了解致しました。