WS_EX_TOOLWINDOWを使わずにタスクバーにウインドウが表示されないようにするには

解決


ココ  2009-02-20 12:33:06  No: 69705  IP: 192.*.*.*

MFCのFormViewを用いてWindowsアプリを開発しております。
タスクバー上にウインドウが表示されないようにするには、
WS_EX_TOOLWINDOWを使用するという方法、ダミーのメインウインドウを
作成する方法が考えられると思いますが、前者はウインドウの
スタイルがフローティングウインドウスタイルになってしまい、
後者はWin32 SDKのみの場合は可能ですがMFCの場合はCMainFrame
ウインドウにダミーの親ウインドウを作成する方法がわからず、
困っています。
すみませんが、どなたかご教授頂けないでしょうか。

編集 削除
gak  2009-02-23 17:00:22  No: 69706  IP: 192.*.*.*

> CMainFrameウインドウにダミーの親ウインドウを作成する方法がわからず、
組んでみた。特段イリーガルな事はしていないと思うが、MFC内部で問題が発生しないという
保証は当然できない。

class MyWinApp : public CWinApp {
public:
    CWnd dummy_;
};

BOOL MyWinApp::InitInstance() {
    dummy_.CreateEx(WS_EX_TOOLWINDOW, AfxRegisterWndClass(0), NULL, WS_OVERLAPPED,
        0, 0, 0, 0, NULL, NULL);
      :
    if (!ProcessShellCommand(cmdInfo))
      :
}
int MyWinApp::ExitInstance() {
    dummy_.DestroyWindow();
    return CWinApp::ExitInstance();
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    cs.hwndParent = static_cast<MyWinApp*>(AfxGetApp())->dummy_;
    return TRUE;
}

編集 削除
ココ  2009-02-24 11:49:05  No: 69707  IP: 192.*.*.*

gakさん大変ありがとうございます。
別スレッドを見ていてCOMインターフェイスを使用する方法
http://www.runan.net/program/tips/sdk_10_ITaskbarList.shtml
を見つけたので、試してみようと思っていましたが、
こちらの方法も確認してみようと思います。
PreCreateWindowで親ウインドウを入れ替えるとは。。。考えてみると
個人的には至極まっとうな方法のように思えます。
MFC内部で問題が出るかどうかは、色々テストしてみます。

P.S.
環境すらかかずに失礼いたしました。Win XP上のVC2005+MFC8.0で
開発しております。

編集 削除
ココ  2009-02-25 11:00:57  No: 69708  IP: 192.*.*.*

gakさんの方法でうまくいきました。
いまのところ何も問題は出ておりません。
大変感謝しております。
本当にありがとうございました。m(_ _)m

編集 削除
ココ  2009-02-25 17:40:42  No: 69709  IP: 192.*.*.*

問題がありました(;_;)…
メインウインドウがWS_EX_TOOLWINDOWスタイルを指定している
ため、ALT+Tabでタスクの切り替え時に表示されませんね…

編集 削除
yoh2  2009-02-25 22:42:34  No: 69710  IP: 192.*.*.*

Alt-Tabによるタスク切り替えの対象にしたければ、dummy_のスタイルからWS_EX_TOOLWINDOWを抜けばいいはず。
dummy_が非表示である限り、WS_EX_TOOLWINDOWがなくてもタスクバーには表れませんし。

編集 削除
ココ  2009-03-02 20:48:56  No: 69711  IP: 192.*.*.*

yoh2さんありがとうございます。
そうですね。。。いろいろ調べるうちに大分
頭が混乱していたような。。。
助けてくださり本当にありがたいです。
しかも無償でなんて、その精神には頭がさがります。m(_ _)m
今度こそ解決しそうです。
gakさん、yoh2さん、ありがとうございました。

編集 削除