/***********************************************************************/ /* Copyright (C) 2002 Definitive Solutions, Inc. All Rights Reserved. */ /* THIS COMPUTER PROGRAM IS PROPRIETARY AND CONFIDENTIAL TO DEFINITIVE */ /* SOLUTIONS, INC. AND ITS LICENSORS AND CONTAINS TRADE SECRETS OF */ /* DEFINITIVE SOLUTIONS, INC. THAT ARE PROVIDED PURSUANT TO A WRITTEN */ /* AGREEMENT CONTAINING RESTRICTIONS ON USE AND DISCLOSURE. ANY USE, */ /* REPRODUCTION, OR TRANSFER EXCEPT AS PROVIDED IN SUCH AGREEMENT */ /* IS STRICTLY PROHIBITED. */ /***********************************************************************/ #include "stdafx.h" #include "MyModelessDlg.h" #include "MyApp.h" #include "MyLog.h" #include "Generic.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // MyModelessDlg dialog // Constructor. MyModelessDlg::MyModelessDlg(CWnd* pParent /* = NULL */ ) : CDialog(MyModelessDlg::IDD, pParent) , m_bCanceled(false) { HRESULT hr(S_OK); //{{AFX_DATA_INIT(MyModelessDlg) m_sMsg = _T(""); //}}AFX_DATA_INIT // Create and show the window. EC_B(Create(MyModelessDlg::IDD, pParent)); EC_V(ShowWindow(SW_SHOWNOACTIVATE)); SetMessage(m_sMsg); // Now sure why this is necessary, but if you remove it you'll notice that // the parent window goes to the bottom of the z-order. I don't know why, // but this seems to fix it. if (! pParent) { pParent = AfxGetMainWnd(); } if (pParent) { EC_B(pParent->SetWindowPos(&CWnd::wndTop, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE)); } } // Destructor. /* virtual */ MyModelessDlg::~MyModelessDlg() { HRESULT hr(S_OK); if (m_hWnd && ::IsWindow(m_hWnd)) { TRACE("Destroying modeless dialog box...\n"); EC_B(DestroyWindow()); } } // void MyModelessDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(MyModelessDlg) DDX_Control(pDX, IDC_MYMODELESSDLG_ANIMATE, m_animate); DDX_Text(pDX, IDC_MYMODELESSDLG_STATIC_MSG, m_sMsg); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(MyModelessDlg, CDialog) //{{AFX_MSG_MAP(MyModelessDlg) ON_BN_CLICKED(IDC_MYMODELESSDLG_BUTTON_CANCEL, OnButtonModelessCancel) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // MyModelessDlg message handlers // WM_INITDIALOG. BOOL MyModelessDlg::OnInitDialog() { VALIDATE; CDialog::OnInitDialog(); HRESULT hr(S_OK); EC_B(m_animate.Open(IDR_MYMODELESSDLG_AVI)); EC_B(m_animate.Play(0, -1, -1)); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } // Set the message. void MyModelessDlg::SetMessage(const CString& sMsg) const { VALIDATE; // It's silly to force callers to make their methods non-const just to // send a message to the screen, so we cast away non-const-ness. const_cast (this)->m_sMsg = sMsg; const_cast (this)->UpdateData(false); // Be sure we can see the message. Generic::SpinTheMessageLoop( /* bNoDrawing */ false, /* bOnlyDrawing */ true); DEBUG_ONLY(::Sleep(250)); } // If the user clicks cancel. void MyModelessDlg::OnButtonModelessCancel() { VALIDATE; if (GetDlgItem(IDC_MYMODELESSDLG_BUTTON_CANCEL)) { GetDlgItem(IDC_MYMODELESSDLG_BUTTON_CANCEL)->EnableWindow(false); m_bCanceled = true; } }