2012-04-02 95 views
4

私はネイティブのC + +のMFCアプリケーションを持っています。これにはCWndに基づくメインウィンドウがあり、ユーザーアクションはモーダルダイアログを作成することができます。ダイアログがアクティブな間、私はメインウィンドウが消えて、ダイアログが見えるようにし、メインウィンドウのアイコンをタスクバーに残したい。モーダルダイアログがアクティブな間にメインMFCウィンドウを非表示にしますか?

どうすればこの問題を解決できますか?

メインウィンドウ(ShowWindow(SW_HIDE))を非表示にすると、タスクバーのアイコンが消えます。メインウィンドウ(SW_MINIMIZE)を最小化すると、アイコンが残ります。ただし、ダイアログはメインウィンドウによって所有されているため、ダイアログも非表示になります。

ダイアログが作成されたら、タスクバーのアイコンをクリックするとダイアログが表示されます。もちろん、ユーザーにこれを要求することは望ましくありません。

ダイアログのOnInitハンドラにShowWindow(SW_SHOW)を挿入しても、ダイアログは表示されません。 Spy ++は可視ビットが設定されていることを示します。 OnInitにSetWindowActiveを追加すると同じです。

私はUIデザインの変更に関心がありません。ダイアログがアクティブな間、ユーザーはそのダイアログとだけやりとりし、メインウィンドウの何かには関心がありません。したがって、メインウィンドウが消えるはずです。

Windows VS2005をWinXP32で使用しています。

答えて

1

ダイアログを作成してモーダル表示するコードブロックでは、デスクトップウィンドウを親のものにしている限り、アプリケーションのメインウィンドウ(表示/非表示)に何でもできます。あなたのダイアログ。通常、CDialogと派生クラスのコンストラクタは、フレームワークがAfxGetMainWnd()の代わりになる親ウィンドウのNULLの既定の引数をとります。代わりにCWnd :: GetDesktopWindow()をダイアログの親として渡してください。すると、おそらくメインウィンドウを非表示にする必要があります。しかし、あなたはまだタスクバーに問題があるかもしれませんが、私はそれについて何も知らないので、他の人にヒントを教えてもらうでしょう。

+0

を追加します。http://stackoverflow.com/questions/7219063/win32-how-to-hide-3rd-party-windows-in-taskbar -by-hwnd – Flot2011

+1

GetDesktopWindow()をモーダルダイアログのコンストラクタに渡すと、非オーナーウィンドウ(Spy ++)が返されますが、モーダルウィンドウは表示されません。モーダルダイアログのタスクバーの追加アイコン。 モーダルダイアログのOnInitDialogハンドラにShowWindow(SW_SHOW)および/またはSW_RESTOREを追加しても効果はありません。 いずれかのタスクバーのアイコンをクリックすると、対応するウィンドウが復元されます。 コード: 'CMyDialog * pDlg = new CMyDialog(GetDesktopWindow()); //親としてデスクトップで作成 ShowWindow(SW_MINIMIZE); //メインを最小化する pDlg-> DoModal(); ' CMyDialog :: OnInitDialog: 'ShowWindow(SW_RESTORE); ShowWindow(SW_SHOW); // 万一に備えて – Woody20

0

あなたはOSと戦っています。モーダルダイアログは、定義上、「メイン」(親)ウィンドウを無効にしますが、隠すことはありません。 を別のウィンドウにしたい場合は、もう1つは作成しますが、最初のウィンドウではモーダルダイアログとして処理するようにOSに指示しないでください。

0

おそらく、あなたは本当に小さなサイズにメインウィンドウのサイズを変更し、常にモーダルダイアログの後ろにそれを保つことができます。 OnInitDialogで

1

、以下のコードタスクバーに隠れて

//Set windows size zero, the windows disappear. 
MoveWindow(0,0,0,0); 

//If you want it invisible on taskbar. add following codes. 
DWORD dwStyle = GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE); 
dwStyle &=~WS_EX_APPWINDOW; 
dwStyle |= WS_EX_TOOLWINDOW;  
SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, dwStyle); 
関連する問題