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

解決


ココ  2009-02-20 21:33:06  No: 69705

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


gak  2009-02-24 02:00:22  No: 69706

> 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 20:49:05  No: 69707

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

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


ココ  2009-02-25 20:00:57  No: 69708

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


ココ  2009-02-26 02:40:42  No: 69709

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


yoh2  2009-02-26 07:42:34  No: 69710

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


ココ  2009-03-03 05:48:56  No: 69711

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加