diff options
author | bseifert <none@none> | 2003-10-30 09:08:04 +0300 |
---|---|---|
committer | bseifert <none@none> | 2003-10-30 09:08:04 +0300 |
commit | f049e2df4b09dc19a7d76e2d33b8cfcb5370e9dc (patch) | |
tree | f2f04cd33835591b8e32953d093a1527a75f3464 /windirstat/ModalApiShuttle.h | |
parent | 98a363ad8bd075b1abd702b7d380692ec0c470d6 (diff) |
Initial revision
Diffstat (limited to 'windirstat/ModalApiShuttle.h')
-rw-r--r-- | windirstat/ModalApiShuttle.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/windirstat/ModalApiShuttle.h b/windirstat/ModalApiShuttle.h new file mode 100644 index 0000000..3e3e51a --- /dev/null +++ b/windirstat/ModalApiShuttle.h @@ -0,0 +1,60 @@ +// modalapishuttle.h - Declaration of CModalApiShuttle +// +// WinDirStat - Directory Statistics +// Copyright (C) 2003 Bernhard Seifert +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// Author: bseifert@users.sourceforge.net, bseifert@daccord.net + +#pragma once + + +// +// CModalApiShuttle. (Base class for CModalShellApi and CModalSendMail.) +// +// Both the SHFileOperation() and MAPISendMail() functions show modeless dialogs, +// but we want them to be modal. +// +// My first approximation was: +// +// AfxGetMainWnd()->EnableWindow(false); +// Do the operation (SHFileOperation respectively MAPISendMail) +// AfxGetMainWnd()->EnableWindow(true); +// +// But when the operation window is destroyed, the system brings +// some other window to the foreground and WinDirStat ends up in the background. +// That's because it is still disabled at that moment. +// +// So my solution is this: +// First create an invisible (zero size) (but enabled) modal dialog, +// then do the operation in its OnInitDialog function +// and end the dialog. +// +class CModalApiShuttle: public CDialog +{ + DECLARE_DYNAMIC(CModalApiShuttle) + +public: + CModalApiShuttle(CWnd* pParent = NULL); + virtual ~CModalApiShuttle(); + +protected: + enum { IDD = IDD_MODALAPISHUTTLE }; + virtual BOOL OnInitDialog(); + DECLARE_MESSAGE_MAP() + + virtual void DoOperation() =0; +}; |