MFCのFormViewを用いてWindowsアプリを開発しております。
タスクバー上にウインドウが表示されないようにするには、
WS_EX_TOOLWINDOWを使用するという方法、ダミーのメインウインドウを
作成する方法が考えられると思いますが、前者はウインドウの
スタイルがフローティングウインドウスタイルになってしまい、
後者はWin32 SDKのみの場合は可能ですがMFCの場合はCMainFrame
ウインドウにダミーの親ウインドウを作成する方法がわからず、
困っています。
すみませんが、どなたかご教授頂けないでしょうか。
> 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;
}
gakさん大変ありがとうございます。
別スレッドを見ていてCOMインターフェイスを使用する方法
http://www.runan.net/program/tips/sdk_10_ITaskbarList.shtml
を見つけたので、試してみようと思っていましたが、
こちらの方法も確認してみようと思います。
PreCreateWindowで親ウインドウを入れ替えるとは。。。考えてみると
個人的には至極まっとうな方法のように思えます。
MFC内部で問題が出るかどうかは、色々テストしてみます。
P.S.
環境すらかかずに失礼いたしました。Win XP上のVC2005+MFC8.0で
開発しております。
gakさんの方法でうまくいきました。
いまのところ何も問題は出ておりません。
大変感謝しております。
本当にありがとうございました。m(_ _)m
問題がありました(;_;)…
メインウインドウがWS_EX_TOOLWINDOWスタイルを指定している
ため、ALT+Tabでタスクの切り替え時に表示されませんね…
Alt-Tabによるタスク切り替えの対象にしたければ、dummy_のスタイルからWS_EX_TOOLWINDOWを抜けばいいはず。
dummy_が非表示である限り、WS_EX_TOOLWINDOWがなくてもタスクバーには表れませんし。
yoh2さんありがとうございます。
そうですね。。。いろいろ調べるうちに大分
頭が混乱していたような。。。
助けてくださり本当にありがたいです。
しかも無償でなんて、その精神には頭がさがります。m(_ _)m
今度こそ解決しそうです。
gakさん、yoh2さん、ありがとうございました。
ツイート | ![]() |