私はネイティブのC + +のMFCアプリケーションを持っています。これにはCWndに基づくメインウィンドウがあり、ユーザーアクションはモーダルダイアログを作成することができます。ダイアログがアクティブな間、私はメインウィンドウが消えて、ダイアログが見えるようにし、メインウィンドウのアイコンをタスクバーに残したい。モーダルダイアログがアクティブな間にメインMFCウィンドウを非表示にしますか?
どうすればこの問題を解決できますか?
メインウィンドウ(ShowWindow(SW_HIDE))を非表示にすると、タスクバーのアイコンが消えます。メインウィンドウ(SW_MINIMIZE)を最小化すると、アイコンが残ります。ただし、ダイアログはメインウィンドウによって所有されているため、ダイアログも非表示になります。
ダイアログが作成されたら、タスクバーのアイコンをクリックするとダイアログが表示されます。もちろん、ユーザーにこれを要求することは望ましくありません。
ダイアログのOnInitハンドラにShowWindow(SW_SHOW)を挿入しても、ダイアログは表示されません。 Spy ++は可視ビットが設定されていることを示します。 OnInitにSetWindowActiveを追加すると同じです。
私はUIデザインの変更に関心がありません。ダイアログがアクティブな間、ユーザーはそのダイアログとだけやりとりし、メインウィンドウの何かには関心がありません。したがって、メインウィンドウが消えるはずです。
Windows VS2005をWinXP32で使用しています。
を追加します。http://stackoverflow.com/questions/7219063/win32-how-to-hide-3rd-party-windows-in-taskbar -by-hwnd – Flot2011
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