//------------------------------------------------------------------------ // // File: shell\themes\test\ctlperf\CtlPerfView.h // // Contents: View window, manages the client area. All the work is done there // // Classes: CCtlPerfView // //------------------------------------------------------------------------ #pragma once #include "PerfLog.h" // We have a member of this class #include // For Options dialog DDX //----------------------------------------------------------- // // Class: CCtlPerfView // // Synopsis: View window, manages the client area. // //----------------------------------------------------------- class CCtlPerfView : public CWindowImpl { public: DECLARE_WND_CLASS(NULL) BEGIN_MSG_MAP(CCtlPerfView) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo) COMMAND_ID_HANDLER(IDM_SUITE1, OnSuite1) COMMAND_ID_HANDLER(IDM_SUITE2, OnSuite2) COMMAND_ID_HANDLER(IDM_BATCH1, OnBatch1) COMMAND_ID_HANDLER(IDM_BATCH2, OnBatch2) COMMAND_ID_HANDLER(IDM_BATCH3, OnBatch3) COMMAND_ID_HANDLER(IDM_FRAME, OnFrame) COMMAND_RANGE_HANDLER(IDM_CONTROL, IDM_CONTROL + 99, OnControl) END_MSG_MAP() //** Construction/destruction CCtlPerfView(); ~CCtlPerfView(); // Called after window destruction virtual void OnFinalMessage(HWND /*hWnd*/); //** Public methods // Receive status bar from parent void SetStatusBar(HWND hWndStatusBar); // Test a single control class void TestControl(LPTSTR szClassName); // Destroy all child windows void ClearChildren(); // Resize the controls inside the client area void ResizeChildren(); // Process INI file void ParseIniFile(); // Does the whole resizing timing void TimeResize(); // Processes all the control classes void RunSuite(); //** Message handlers LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnGetMinMaxInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnRunBatch(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); //** Command handlers LRESULT OnControl(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnFrame(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnSuite1(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnSuite2(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnBatch1(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnBatch2(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnBatch3(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); private: //** Private members // The status bar window, in the parent frame HWND m_hWndStatusBar; // Array of handles to the children HWND* m_rgWnds; // Array of control class names LPTSTR* m_rgzClasses; // Number of elements in m_rgzClasses UINT m_cClasses; // Number of controls to create horizontally UINT m_cxCtrl; // Number of controls to create vertically UINT m_cyCtrl; // Number of iterations to do for each test UINT m_cLoops; // Maximum frame window width UINT m_cX; // Maximum frame window height UINT m_cY; // Are we doing two passes? bool m_bTwoPasses; // Are we in batch mode (command line)? bool m_bBatch; // Do we have to be silent (command line)? bool m_bSilent; // Name of pass 1 TCHAR m_szPass1[256]; // Name of pass 2 TCHAR m_szPass2[256]; // Name of viewer app TCHAR m_szViewer[_MAX_PATH + 1]; // Name of log file TCHAR m_szLogFileName[_MAX_PATH + 1]; // specify type of output TCHAR m_szNumberOnly[10 * sizeof(TCHAR) + 1]; // The logging object CPerfLog m_perfLog; //** Private classes //----------------------------------------------------------- // // Class: COptionsDialog // // Synopsis: Options dialog, to display/override the INI file settings. // //----------------------------------------------------------- class COptionsDialog : public CSimpleDialog // Centers automatically , public CWinDataExchange // For DDX { public: explicit COptionsDialog(CCtlPerfView *pView); BEGIN_MSG_MAP(COptionsDialog) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_RANGE_HANDLER(IDOK, IDNO, OnCloseCmd) CHAIN_MSG_MAP(thisClass) END_MSG_MAP() BEGIN_DDX_MAP(COptionsDialog) DDX_INT(IDC_EDIT_CTLX, m_pView->m_cxCtrl); DDX_INT(IDC_EDIT_CTLY, m_pView->m_cyCtrl); DDX_INT(IDC_EDIT_CX, m_pView->m_cX); DDX_INT(IDC_EDIT_CY, m_pView->m_cY); DDX_INT(IDC_EDIT_NUMLOOPS, m_pView->m_cLoops); DDX_TEXT(IDC_EDIT_PASS1, m_pView->m_szPass1); DDX_TEXT(IDC_EDIT_PASS2, m_pView->m_szPass2); DDX_TEXT(IDC_EDIT_LOGFILE, m_pView->m_szLogFileName); END_DDX_MAP() LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); private: CCtlPerfView* m_pView; }; // Let this dialog operate directly on our memebers friend class COptionsDialog; };