/*--------------------------------------------------------------------------* * * Microsoft Windows * Copyright (C) Microsoft Corporation, 1992 - 1999 * * File: taskui.h * * Contents: Interface file for console taskpad UI classes. * * History: 29-Oct-98 jeffro Created * *--------------------------------------------------------------------------*/ #ifndef TASKUI_H #define TASKUI_H #pragma once #include "tstring.h" #include "dlgs.h" #include "task.h" #include "cmenuinfo.h" /* * forward declarations */ class CMTNode; class CTaskpadGeneralPage; class CTaskpadTasksPage; class CTaskpadPropertySheet; class CTaskpadOptionsDlg; class CContextMenuVisitor; class CMTBrowserCtrl; class CConsoleExtendTaskPadImpl; class CContextMenu; class CConsoleTask; class CTaskpadGroupPropertySheet; class CTaskpadGroupGeneralPage; class CConsoleView; // property page classes class CTaskNamePage; class CTaskCmdLinePage; class CTaskSymbolDlg; #include // for Win64 // ATL does not allow chaining more than one class or member at a time. This works around that. #define CHAIN_MSG_MAP_EX(theChainClass) \ { \ theChainClass::ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult); \ } //############################################################################ //############################################################################ // // class CBrowserCookie // // a class to store the Node's for each MTNode. Used by CMTBrowserCtrl //############################################################################ //############################################################################ class CBrowserCookie { CMTNode * m_pMTNode; CNode * m_pNode; public: CBrowserCookie(); CBrowserCookie(CMTNode *pMTNode, CNode *pNode); void DeleteNode(); CNode * PNode() {return m_pNode;} CMTNode * PMTNode() const {ASSERT(m_pMTNode); return m_pMTNode;} void SetNode(CNode *pNode); bool operator < (const CBrowserCookie &rhs) const {return m_pMTNode < rhs.m_pMTNode;} }; //############################################################################ //############################################################################ // inlines //############################################################################ //############################################################################ inline CBrowserCookie::CBrowserCookie() : m_pMTNode(NULL), m_pNode(NULL) {} inline CBrowserCookie::CBrowserCookie(CMTNode *pMTNode, CNode *pNode) : m_pMTNode(pMTNode), m_pNode(pNode){} inline void CBrowserCookie::SetNode(CNode *pNode) { ASSERT(!m_pNode); m_pNode = pNode; } class CBrowserCookieList : public std::list { public: ~CBrowserCookieList(); }; //############################################################################ //############################################################################ // // class CMTBrowserCtrl // // PURPOSE: Implements a general purpose scope tree browser that enables a // user to browse down the master scope tree and select a node. // // USAGE: Add an object of this class to your dialog, and construct it with // the ID of the tree control to use. Chain the object into the // message loop. If needed, subclass this class and override any // methods appropriately. // //############################################################################ //############################################################################ class CMTBrowserCtrl : public CWindowImpl { typedef CWindowImpl BC; public: typedef std::vector CMTNodeCollection; struct InitData { InitData () : hwnd(NULL), pScopeTree(NULL), pmtnRoot(NULL), pmtnSelect(NULL) {} HWND hwnd; CScopeTree* pScopeTree; CMTNode* pmtnRoot; CMTNode* pmtnSelect; CMTNodeCollection vpmtnExclude; }; public: // constructor /destructor CMTBrowserCtrl(); ~CMTBrowserCtrl(); BEGIN_MSG_MAP(CMTBrowserCtrl) REFLECTED_NOTIFY_CODE_HANDLER (TVN_ITEMEXPANDING, OnItemExpanding); //CHAIN_MSG_MAP(BC) DEFAULT_REFLECTION_HANDLER () END_MSG_MAP(); void Initialize (const InitData& init); HTREEITEM InsertItem (const CBrowserCookie &browserCookie, HTREEITEM hParent, HTREEITEM hInsertAfter); bool SelectNode (CMTNode* pmtnSelect); CMTNode* GetSelectedMTNode () const; CBrowserCookie* CookieFromItem (HTREEITEM hti) const; CBrowserCookie* CookieFromItem (const TV_ITEM* ptvi) const; CBrowserCookie* CookieFromLParam (LPARAM lParam) const; CMTNode* MTNodeFromItem (HTREEITEM hti) const; CMTNode* MTNodeFromItem (const TV_ITEM* ptvi) const; protected: LRESULT OnItemExpanding (int idCtrl, LPNMHDR pnmh, BOOL& bHandled); bool ExpandItem (const TV_ITEM& itemExpand); HTREEITEM FindChildItemByMTNode (HTREEITEM htiParent, const CMTNode* pmtnToFind); private: // set this to non-zero to optimize access to m_vpmtnExclude enum { OptimizeExcludeList = 0 }; // implementation int m_id; // the ID of the tree control int ID() {return m_id;} CMTNodeCollection m_vpmtnExclude; CScopeTree * m_pScopeTree; CScopeTree * PScopeTree() {return m_pScopeTree;} CBrowserCookieList m_browserCookieList; CBrowserCookieList *PBrowserCookieList() {return &m_browserCookieList;} bool IsMTNodeExcluded (CMTNode* pmtn) const; }; //############################################################################ //############################################################################ // // class CTempAMCView // //############################################################################ //############################################################################ class CTempAMCView { public: CTempAMCView() : m_pViewData(NULL) {} ~CTempAMCView() { Destroy(); } CNode* Create (CConsoleFrame* pFrame, CNode* pRootNode); CNode* Create (CConsoleFrame* pFrame, CMTNode* pRootMTNode); CNode* Create (CConsoleFrame* pFrame, MTNODEID idRootNode); bool Destroy () { if (m_pViewData == NULL) return (false); GetChildFrame().SendMessage (WM_CLOSE); m_pViewData = NULL; return (true); } CViewData* GetViewData() const { return (m_pViewData); } MMC_ATL::CWindow GetChildFrame() const { return ((m_pViewData != NULL) ? m_pViewData->GetChildFrame() : NULL); } CConsoleView* GetConsoleView() const { return ((m_pViewData != NULL) ? m_pViewData->GetConsoleView() : NULL); } MMC_ATL::CWindow GetListCtrl() const { return ((m_pViewData != NULL) ? m_pViewData->GetListCtrl() : NULL); } private: CViewData* m_pViewData; }; //############################################################################ //############################################################################ // // class CMirrorListView // // CMirrorListView is a list view control that will mirror the contents of // another list view control. // //############################################################################ //############################################################################ class CMirrorListView : public CWindowImpl { typedef CMirrorListView ThisClass; typedef CWindowImpl BaseClass; public: CMirrorListView(); void AttachSource (HWND hwndList, HWND hwndSourceList); LPARAM GetSelectedItemData (); BEGIN_MSG_MAP(ThisClass) MESSAGE_HANDLER (LVM_GETITEM, ForwardMessage); REFLECTED_NOTIFY_CODE_HANDLER (LVN_GETDISPINFO, OnGetDispInfo); REFLECTED_NOTIFY_CODE_HANDLER (LVN_ODCACHEHINT, ForwardVirtualNotification); REFLECTED_NOTIFY_CODE_HANDLER (LVN_ODFINDITEM, ForwardVirtualNotification); REFLECTED_NOTIFY_CODE_HANDLER (LVN_ODSTATECHANGED, ForwardVirtualNotification); DEFAULT_REFLECTION_HANDLER () END_MSG_MAP(); protected: LRESULT ForwardMessage (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnGetDispInfo (int idCtrl, LPNMHDR pnmh, BOOL& bHandled); LRESULT ForwardNotification (int idCtrl, LPNMHDR pnmh, BOOL& bHandled); LRESULT ForwardVirtualNotification (int idCtrl, LPNMHDR pnmh, BOOL& bHandled); private: void InsertColumns (); private: WTL::CListViewCtrl m_wndSourceList; bool m_fVirtualSource; }; //############################################################################ //############################################################################ // // class MMC:CEdit // //############################################################################ //############################################################################ namespace MMC { class CEdit : public WTL::CEdit { public: void Initialize(CWindow *pwndParent, int idEdit, int cchMax = -1, LPCTSTR sz = NULL); void Empty(LPCTSTR sz = _T("")) { SetSel(0, -1); ReplaceSel(sz); } }; }; // namespace MMC //############################################################################ //############################################################################ // // class CDialogBase // //############################################################################ //############################################################################ template class CDialogBase : public CDialogImpl { typedef CDialogBase ThisClass; typedef CDialogImpl BaseClass; public: CDialogBase (bool fAutoCenter = false); BEGIN_MSG_MAP(ThisClass) MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER (IDOK, OnOK) COMMAND_ID_HANDLER (IDCANCEL, OnCancel) REFLECT_NOTIFICATIONS() END_MSG_MAP() virtual LRESULT OnInitDialog (HWND hwndFocus, LPARAM lParam, BOOL& bHandled); virtual bool OnApply () = 0; public: BOOL EnableDlgItem (int idControl, bool fEnable); void CheckDlgItem (int idControl, int nCheck); tstring GetDlgItemText (int idControl); BOOL SetDlgItemText (int idControl, tstring str); // Generated message map functions protected: LRESULT OnInitDialog (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); virtual LRESULT OnOK (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); virtual LRESULT OnCancel (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); private: bool m_fAutoCenter; }; //############################################################################ //############################################################################ // // class CMyComboBox // //############################################################################ //############################################################################ class CMyComboBox : public WTL::CComboBox { typedef WTL::CComboBox BaseClass; public: CMyComboBox (HWND hwnd = NULL) : BaseClass(hwnd) {} CMyComboBox& operator= (HWND hwnd) { m_hWnd = hwnd; return *this; } void InsertStrings (const int rgStringIDs[], int cStringIDs); LPARAM GetSelectedItemData () const; void SelectItemByData (LPARAM lParam); int FindItemByData (LPARAM lParam) const; }; //############################################################################ //############################################################################ // // class CContextMenuVisitor // // PURPOSE: Enables traversal of a tree of context menu items by // any class that derives from this one. // //############################################################################ //############################################################################ class CContextMenuVisitor { SC ScTraverseContextMenu(CContextMenu *pContextMenu); protected: SC ScTraverseContextMenu(CNode *pNodeTarget, CScopeTree *pCScopeTree, BOOL fScopeItem, CNode *pNodeScope, LPARAM resultItemParam, bool bShowSaveList = false); virtual SC ScOnVisitContextMenu(CMenuItem &menuItem) = 0; // defined by derived class. protected: virtual SC ScShouldItemBeVisited(CMenuItem *pMenuItem, CContextMenuInfo *pContextInfo, /*out*/ bool &bVisitItem); // should this item be visited? virtual ~CContextMenuVisitor() {}; }; //############################################################################ //############################################################################ // // class CTaskpadFrame // //############################################################################ //############################################################################ class CTaskpadFrame { protected: CConsoleTaskpad * m_pConsoleTaskpad; bool m_fNew; // is this a new taskpad? CViewData * m_pViewData; LPARAM m_lCookie; bool m_fCookieValid; CNode * m_pNodeTarget; bool m_bTargetNodeSelected; // has the target node been selected, if there is one public: CScopeTree * PScopeTree() {return dynamic_cast(m_pViewData->GetScopeTree());} CNode * PNodeTarget() {return m_pNodeTarget;} CConsoleTaskpad * PConsoleTaskpad() {return m_pConsoleTaskpad;} bool FNew() {return m_fNew;} void SetNew(bool b) {m_fNew = b;} LPARAM Cookie() {return m_lCookie;} bool FCookieValid() {return m_fCookieValid;} CViewData * PViewData() {return m_pViewData;} void SetConsoleTaskpad(CConsoleTaskpad *pConsoleTaskpad) {m_pConsoleTaskpad = pConsoleTaskpad;} bool FTargetNodeSelected() {return m_bTargetNodeSelected;} void SetTargetNodeSelected(bool b) {m_bTargetNodeSelected = b;} CTaskpadFrame(CNode *pNodeTarget, CConsoleTaskpad* pConsoleTaskpad, CViewData *pViewData, bool fCookieValid, LPARAM lCookie); CTaskpadFrame(const CTaskpadFrame &rhs); }; //############################################################################ //############################################################################ // // class CTaskpadStyle // // PURPOSE: Stores details of a taskpad style. Used by CTaskpadGeneralPage // //############################################################################ //############################################################################ class CTaskpadStyle { private: /* * NOTE: this class has a custom assignment operator. Be sure to * update it if you add member variables to this class. */ ListSize m_eSize; DWORD m_dwOrientation; int m_idsDescription; // eg "Horizontal listpad with tasks underneath." int m_nPreviewBitmapID; mutable CStr m_strDescription; mutable WTL::CBitmap m_PreviewBitmap; public: CTaskpadStyle (ListSize eSize, int idsDescription, int nPreviewBitmapID, DWORD dwOrientation); CTaskpadStyle (ListSize eSize, DWORD dwOrientation); CTaskpadStyle (const CTaskpadStyle& other); CTaskpadStyle& operator= (const CTaskpadStyle& other); bool operator== (const CTaskpadStyle& other) const { return ((m_dwOrientation == other.m_dwOrientation) && ((m_eSize == other.m_eSize) || (m_eSize == eSize_None))); } const CStr& GetDescription() const; HBITMAP GetPreviewBitmap() const; }; //############################################################################ //############################################################################ // // class CTaskpadFramePtr // // PURPOSE: holds a pointer to the taskpad frame. // If multiple base classes inherit from this class, declare this // class to be a static base. // //############################################################################ //############################################################################ class CTaskpadFramePtr { public: CTaskpadFramePtr(CTaskpadFrame * pTaskpadFrame): m_pTaskpadFrame(pTaskpadFrame){} protected: // attributes CTaskpadFrame * PTaskpadFrame() const { return (m_pTaskpadFrame); } CConsoleTaskpad * PConsoleTaskpad() { return PTaskpadFrame()->PConsoleTaskpad();} private: CTaskpadFrame * m_pTaskpadFrame; }; //############################################################################ //############################################################################ // // class CTaskpadStyleBase // //############################################################################ //############################################################################ class CTaskpadStyleBase:public virtual CTaskpadFramePtr { typedef CTaskpadStyleBase ThisClass; static CTaskpadStyle s_rgTaskpadStyle[]; WTL::CStatic m_wndPreview; WTL::CComboBox m_wndSizeCombo; public: CTaskpadStyleBase(CTaskpadFrame * pTaskpadFrame); protected: virtual HWND HWnd() =0; BEGIN_MSG_MAP(ThisClass) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_HANDLER(IDC_Style_VerticalList, BN_CLICKED, OnSettingChanged) COMMAND_HANDLER(IDC_Style_HorizontalList, BN_CLICKED, OnSettingChanged) COMMAND_HANDLER(IDC_Style_TasksOnly, BN_CLICKED, OnSettingChanged) COMMAND_HANDLER(IDC_Style_TooltipDesc, BN_CLICKED, OnSettingChanged) COMMAND_HANDLER(IDC_Style_TextDesc, BN_CLICKED, OnSettingChanged) COMMAND_HANDLER(IDC_Style_SizeCombo, CBN_SELCHANGE, OnSettingChanged) END_MSG_MAP(); bool Apply(); // must call this explicitly LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnSettingChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); void GetSettings (DWORD& dwOrientation, ListSize& eSize); void UpdateControls (); int FindStyle (DWORD dwOrientation, ListSize eSize); }; //############################################################################ //############################################################################ // // class CTaskpadGeneralPage // //############################################################################ //############################################################################ class CTaskpadGeneralPage : public WTL::CPropertyPageImpl, public CTaskpadStyleBase { MMC::CEdit m_strName; MMC::CEdit m_strDescription; MMC::CEdit m_strTooltip; public: typedef WTL::CPropertyPageImpl BC; typedef CTaskpadStyleBase BC2; enum { IDD = IDD_TASKPAD_GENERAL}; //constructor/destructor CTaskpadGeneralPage(CTaskpadFrame * pTaskpadFrame); public: // Notification handlers bool OnApply(); protected: BEGIN_MSG_MAP(CTaskpadGeneralPage) CHAIN_MSG_MAP_EX(BC2) // This MUST be the first entry. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CONTEXT_HELP_HANDLER() COMMAND_ID_HANDLER(IDC_Options, OnOptions) CHAIN_MSG_MAP(BC) END_MSG_MAP(); IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASKPAD_GENERAL); // for the base classes virtual HWND HWnd() {return m_hWnd;} LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnOptions (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); }; //############################################################################ //############################################################################ // // class CTaskpadWizardWelcomePage // //############################################################################ //############################################################################ class CTaskpadWizardWelcomePage : public CWizard97WelcomeFinishPage { typedef CTaskpadWizardWelcomePage ThisClass; typedef CWizard97WelcomeFinishPage BaseClass; public: // Construction/Destruction CTaskpadWizardWelcomePage() {} public: // Dialog data enum { IDD = IDD_TASKPAD_WIZARD_WELCOME}; // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); bool OnSetActive(); bool OnKillActive(); LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); }; //############################################################################ //############################################################################ // // class CTaskpadWizardFinishPage // //############################################################################ //############################################################################ class CTaskpadWizardFinishPage : public CWizard97WelcomeFinishPage { typedef CTaskpadWizardFinishPage ThisClass; typedef CWizard97WelcomeFinishPage BaseClass; public: // Construction/Destruction CTaskpadWizardFinishPage(bool *pfStartTaskWizard) {m_pfStartTaskWizard = pfStartTaskWizard;} public: // Dialog data enum { IDD = IDD_TASKPAD_WIZARD_FINISH}; BOOL OnSetActive(); BOOL OnWizardFinish(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); private: bool * m_pfStartTaskWizard; }; //############################################################################ //############################################################################ // // class CTaskpadNamePage // //############################################################################ //############################################################################ class CTaskpadNamePage : public CWizard97InteriorPage, public virtual CTaskpadFramePtr { typedef CTaskpadNamePage ThisClass; typedef CWizard97InteriorPage BaseClass; public: // Construction/Destruction CTaskpadNamePage(CTaskpadFrame * pTaskpadFrame); public: // Dialog data enum { IDD = IDD_TASKPAD_WIZARD_NAME_PAGE, IDS_Title = IDS_TaskpadWiz_NamePageTitle, IDS_Subtitle = IDS_TaskpadWiz_NamePageSubtitle, }; BOOL OnSetActive(); int OnWizardNext(); int OnWizardBack(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); private: MMC::CEdit m_strName; MMC::CEdit m_strDescription; }; //############################################################################ //############################################################################ // // class CTaskpadStylePage // //############################################################################ //############################################################################ class CTaskpadStylePage : public CWizard97InteriorPage, public CTaskpadStyleBase { typedef CTaskpadStylePage ThisClass; typedef CWizard97InteriorPage BaseClass; typedef CTaskpadStyleBase BC2; public: // Construction/Destruction CTaskpadStylePage(CTaskpadFrame * pTaskpadFrame); public: // Dialog data enum { IDD = IDD_TASKPAD_WIZARD_STYLE_PAGE, IDS_Title = IDS_TaskpadWiz_StylePageTitle, IDS_Subtitle = IDS_TaskpadWiz_StylePageSubtitle, }; // Implementation protected: BEGIN_MSG_MAP( ThisClass ) CHAIN_MSG_MAP_EX(BC2) // This must be the first entry. CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); bool OnSetActive(); bool OnKillActive(); // for the base classes virtual HWND HWnd() {return m_hWnd;} }; //############################################################################ //############################################################################ // // class CTaskpadNodetypeBase // //############################################################################ //############################################################################ class CTaskpadNodetypeBase : public virtual CTaskpadFramePtr { typedef CTaskpadNodetypeBase ThisClass; typedef CTaskpadFramePtr BC; bool m_bApplytoNodetype; bool m_bSetDefaultForNodetype; protected: virtual HWND HWnd() =0; public: CTaskpadNodetypeBase(CTaskpadFrame *pTaskpadFrame); BEGIN_MSG_MAP(ThisClass) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_HANDLER (IDC_UseForSimilarNodes, BN_CLICKED, OnUseForNodetype) COMMAND_HANDLER (IDC_DontUseForSimilarNodes,BN_CLICKED, OnDontUseForNodetype) COMMAND_HANDLER (IDC_SetDefaultForNodetype, BN_CLICKED, OnSetAsDefault) END_MSG_MAP(); bool OnApply(); void EnableControls(); LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnUseForNodetype (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnDontUseForNodetype(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnSetAsDefault (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); }; //############################################################################ //############################################################################ // // class CTaskpadNodetypePage // //############################################################################ //############################################################################ class CTaskpadNodetypePage : public CWizard97InteriorPage, public CTaskpadNodetypeBase { typedef CTaskpadNodetypePage ThisClass; typedef CWizard97InteriorPage BaseClass; typedef CTaskpadNodetypeBase BC2; protected: virtual HWND HWnd() {return m_hWnd;} public: enum { IDD = IDD_TASKPAD_WIZARD_NODETYPE_PAGE, IDS_Title = IDS_TaskpadWiz_NodeTypePageTitle, IDS_Subtitle = IDS_TaskpadWiz_NodeTypePageSubtitle, }; CTaskpadNodetypePage(CTaskpadFrame *pTaskpadFrame); BEGIN_MSG_MAP( ThisClass ) CHAIN_MSG_MAP_EX(BC2) // This must be the first entry. CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); bool OnApply() {return BC2::OnApply();} }; //############################################################################ //############################################################################ // // class CTaskpadOptionsDlg // //############################################################################ //############################################################################ #include // for Win64 class CTaskpadOptionsDlg : public CDialogBase, public CTaskpadNodetypeBase { typedef CTaskpadOptionsDlg ThisClass; typedef CDialogBase BaseClass; typedef CTaskpadNodetypeBase BC4; public: enum { IDD = IDD_TASKPAD_ADVANCED }; //constructor/destructor CTaskpadOptionsDlg(CTaskpadFrame* pTaskpadFrame); ~CTaskpadOptionsDlg(); protected: BEGIN_MSG_MAP(ThisClass) CONTEXT_HELP_HANDLER() //CHAIN_MSG_MAP_EX(BC3) // This MUST be the second entry. CHAIN_MSG_MAP (BC4) // This MUST be the third entry. CHAIN_MSG_MAP (BaseClass) END_MSG_MAP(); IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASKPAD_ADVANCED); virtual HWND HWnd() {return m_hWnd;} // for the base classes. virtual LRESULT OnInitDialog (HWND hwndFocus, LPARAM lParam, BOOL& bHandled); virtual bool OnApply (); void EnableControls(); }; #include // for Win64 //############################################################################ //############################################################################ // // class CTaskPropertiesBase // //############################################################################ //############################################################################ typedef std::map IntToTaskMap; class CTaskPropertiesBase : public CContextMenuVisitor, public virtual CTaskpadFramePtr { public: CTaskPropertiesBase(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew); protected: virtual IntToTaskMap & GetTaskMap() =0; virtual WTL::CListBox& GetListBox() =0; protected: LRESULT OnCommandListSelChange (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); virtual SC ScOnVisitContextMenu(CMenuItem &menuItem); CScopeTree * PScopeTree() const { return (PTaskpadFrame()->PScopeTree()); } CNode * PNodeTarget() const { return (PTaskpadFrame()->PNodeTarget()); } bool FCookieValid() const { return (PTaskpadFrame()->FCookieValid()); } LPARAM Cookie() const { return (PTaskpadFrame()->Cookie()); } CConsoleTask & ConsoleTask() const { return *m_pTask;} private: CConsoleTask * m_pTask; const bool m_fNew; IContextMenuCallbackPtr m_spContextMenuCallback; }; //############################################################################ //############################################################################ // // class CTasksListDialog // //############################################################################ //############################################################################ template class CTasksListDialog : public WTL::CPropertyPageImpl // do NOT inherit from CTaskpadFramePtr. { public: typedef CTasksListDialog ThisClass; typedef WTL::CPropertyPageImpl BC; private: typedef CConsoleTaskpad::TaskIter TaskIter; CNode * PNodeTarget() {return PTaskpadFrame()->PNodeTarget();} CConsoleTaskpad * PConsoleTaskpad() {return PTaskpadFrame()->PConsoleTaskpad();} std::map m_mapTaskIterators; std::map & MapTaskIterators(){return m_mapTaskIterators;} WTL::CButton m_buttonNewTask; WTL::CButton m_buttonRemoveTask; WTL::CButton m_buttonModifyTask; WTL::CButton m_buttonMoveUp; WTL::CButton m_buttonMoveDown; WTL::CListViewCtrl m_listboxTasks; WTL::CListViewCtrl * PListBoxTasks() {return &m_listboxTasks;} int GetCurSel(); bool m_bDisplayProperties; // should task properties be displayed? bool m_bNewTaskOnInit; // display the NewTask dialog on init. bool FNewTaskOnInit() {return m_bNewTaskOnInit;} public: //constructor/destructor CTasksListDialog(CTaskpadFrame * pTaskpadFrame, bool bNewTaskOnInit, bool bDisplayProperties) ; protected: BEGIN_MSG_MAP(CTasksPage) COMMAND_ID_HANDLER(IDC_NEW_TASK_BT, OnNewTask) COMMAND_ID_HANDLER(IDC_REMOVE_TASK, OnRemoveTask) COMMAND_ID_HANDLER(IDC_MODIFY, OnTaskProperties) COMMAND_ID_HANDLER(IDC_MOVE_UP, OnMoveUp) COMMAND_ID_HANDLER(IDC_MOVE_DOWN, OnMoveDown) NOTIFY_HANDLER (IDC_LIST_TASKS, NM_CUSTOMDRAW, OnCustomDraw) NOTIFY_HANDLER (IDC_LIST_TASKS, LVN_ITEMCHANGED, OnTaskChanged) NOTIFY_HANDLER (IDC_LIST_TASKS, NM_DBLCLK, OnTaskProperties) MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog) CONTEXT_HELP_HANDLER() CHAIN_MSG_MAP(BC) END_MSG_MAP(); IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASKS); LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnNewTask(); LRESULT OnNewTask( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) {return OnNewTask();} LRESULT OnRemoveTask( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnMoveUp( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnMoveDown( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnTaskProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) {OnTaskProperties(); return 0;} LRESULT OnTaskProperties(int id, LPNMHDR pnmh, BOOL& bHandled ) {OnTaskProperties(); return 0;} LRESULT OnCustomDraw( int id, LPNMHDR pnmh, BOOL& bHandled ); LRESULT OnTaskChanged( int id, LPNMHDR pnmh, BOOL& bHandled ); void OnTaskProperties(); // operations LRESULT DrawItem(NMCUSTOMDRAW *pnmcd); void UpdateTaskListbox(TaskIter taskIteratorSelected); void EnableButtons(); void EnableButtonAndCorrectFocus( WTL::CButton& button, BOOL bEnable ); private: CTaskpadFrame * PTaskpadFrame() { return m_pTaskpadFrame;} CTaskpadFrame * m_pTaskpadFrame; }; //############################################################################ //############################################################################ // // class CTasksPage // //############################################################################ //############################################################################ class CTasksPage : public CTasksListDialog, public virtual CTaskpadFramePtr { public: typedef CTasksListDialog BC; enum { IDD = IDD_TASKS}; //constructor/destructor CTasksPage(CTaskpadFrame * pTaskpadFrame, bool bNewTaskOnInit) : BC(pTaskpadFrame, bNewTaskOnInit, true), CTaskpadFramePtr(pTaskpadFrame) {} }; //############################################################################ //############################################################################ // // class CTaskWizardWelcomePage // //############################################################################ //############################################################################ class CTaskWizardWelcomePage : public CWizard97WelcomeFinishPage, public virtual CTaskpadFramePtr { typedef CTaskWizardWelcomePage ThisClass; typedef CWizard97WelcomeFinishPage BaseClass; public: // Construction/Destruction CTaskWizardWelcomePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew) : CTaskpadFramePtr(pTaskpadFrame){} public: // Dialog data enum { IDD = IDD_TASK_WIZARD_WELCOME}; // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); bool OnSetActive(); bool OnKillActive(); LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); private: // attributes CConsoleTask * m_pConsoleTask; CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;} }; //############################################################################ //############################################################################ // // class CTaskWizardFinishPage // //############################################################################ //############################################################################ class CTaskWizardFinishPage : public CTasksListDialog, public virtual CTaskpadFramePtr { typedef CTaskWizardFinishPage ThisClass; typedef CTasksListDialog BaseClass; public: // Construction/Destruction CTaskWizardFinishPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool *pfRestartTaskWizard); public: // Dialog data enum { IDD = IDD_TASK_WIZARD_FINISH}; BOOL OnWizardFinish(); int OnWizardBack(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); BOOL OnSetActive(); LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); private: CTaskpadFrame m_taskpadFrameTemp; // for the list dialog CConsoleTaskpad m_consoleTaskpadTemp; // bool * m_pfRestartTaskWizard; // attributes CConsoleTask * m_pConsoleTask; CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;} }; //############################################################################ //############################################################################ // // class CTaskWizardTypePage // //############################################################################ //############################################################################ class CTaskWizardTypePage : public CWizard97InteriorPage, public virtual CTaskpadFramePtr { typedef CTaskWizardTypePage ThisClass; typedef CWizard97InteriorPage BaseClass; public: // Construction/Destruction CTaskWizardTypePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew); public: // Dialog data enum { IDD = IDD_TASK_WIZARD_TYPE_PAGE, IDS_Title = IDS_TaskWiz_TypePageTitle, IDS_Subtitle = IDS_TaskWiz_TypePageSubtitle, }; int OnWizardNext(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER(IDC_MENU_TASK, OnMenuTask) COMMAND_ID_HANDLER(IDC_CMDLINE_TASK, OnCmdLineTask) COMMAND_ID_HANDLER(IDC_NAVIGATION_TASK, OnFavoriteTask) CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnMenuTask ( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnCmdLineTask( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnFavoriteTask(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); private: // attributes CConsoleTask * m_pConsoleTask; CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;} }; //############################################################################ //############################################################################ // // class CTaskNamePage // //############################################################################ //############################################################################ class CTaskNamePage : public WTL::CPropertyPageImpl, public virtual CTaskpadFramePtr { typedef CTaskNamePage ThisClass; typedef WTL::CPropertyPageImpl BaseClass; public: // Construction/Destruction CTaskNamePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew); public: // Dialog data enum { IDD = IDD_TASK_PROPS_NAME_PAGE, IDD_WIZ = IDD_TASK_WIZARD_NAME_PAGE }; BOOL OnSetActive(); BOOL OnKillActive(); int OnWizardBack(); int OnWizardNext(); protected: BEGIN_MSG_MAP( ThisClass ); CONTEXT_HELP_HANDLER() CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASK_PROPS_NAME_PAGE); private: // Implementation BOOL SetTaskName(bool fCheckIfOK); // attributes CConsoleTask * m_pConsoleTask; CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;} bool m_fRunAsWizard; }; class CTaskNameWizardPage: public CTaskNamePage { typedef CTaskNamePage BC; public: CTaskNameWizardPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew) : CTaskpadFramePtr(pTaskpadFrame), BC(pTaskpadFrame, consoleTask, fNew) { m_psp.pszTemplate = MAKEINTRESOURCE(BC::IDD_WIZ); /* * Wizard97-style pages have titles, subtitles and header bitmaps */ VERIFY (m_strTitle. LoadString(GetStringModule(), IDS_TaskWiz_NamePageTitle)); VERIFY (m_strSubtitle.LoadString(GetStringModule(), IDS_TaskWiz_NamePageSubtitle)); m_psp.dwFlags |= PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; m_psp.pszHeaderTitle = m_strTitle.data(); m_psp.pszHeaderSubTitle = m_strSubtitle.data(); } private: tstring m_strTitle; tstring m_strSubtitle; }; //############################################################################ //############################################################################ // // class CTaskWizardMenuPage // //############################################################################ //############################################################################ class CTaskWizardMenuPage : public CWizard97InteriorPage, public CTaskPropertiesBase { typedef CTaskWizardMenuPage ThisClass; typedef CWizard97InteriorPage BaseClass; typedef CTaskPropertiesBase BC2; public: // Construction/Destruction CTaskWizardMenuPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew); public: // Dialog data enum { IDD = IDD_TASK_WIZARD_MENU_PAGE, IDS_Title = IDS_TaskWiz_MenuPageTitle, IDS_Subtitle = IDS_TaskWiz_MenuPageSubtitle, }; BOOL OnSetActive(); BOOL OnKillActive(); int OnWizardBack() {return IDD_TASK_WIZARD_TYPE_PAGE;} int OnWizardNext(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_HANDLER (IDC_CommandList, LBN_SELCHANGE, BC2::OnCommandListSelChange) NOTIFY_HANDLER (IDC_ScopeTree, TVN_SELCHANGED, OnScopeItemChanged) NOTIFY_HANDLER (IDC_ResultList, LVN_ITEMCHANGED, OnResultItemChanged) COMMAND_HANDLER (IDC_TASK_SOURCE_COMBO, CBN_SELCHANGE, OnSettingChanged) CHAIN_MSG_MAP(BaseClass) REFLECT_NOTIFICATIONS() END_MSG_MAP(); LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnScopeItemChanged (int id, LPNMHDR pnmh, BOOL& bHandled ); LRESULT OnResultItemChanged(int id, LPNMHDR pnmh, BOOL& bHandled); LRESULT OnSettingChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); void EnableWindows(); virtual IntToTaskMap & GetTaskMap() { return m_TaskMap;} virtual WTL::CListBox& GetListBox() { return m_wndCommandListbox;} void InitResultView (CNode* pRootNode); void ShowWindow(HWND hWnd, bool bShowWindow); void SelectFirstResultItem(bool bSelect = true); void OnSettingsChanged(); private: struct _TaskSource { int idsName; eConsoleTaskType type; }; // attributes static _TaskSource s_rgTaskSource[]; IntToTaskMap m_TaskMap; WTL::CListBox m_wndCommandListbox; CMTBrowserCtrl m_wndScopeTree; WTL::CComboBox m_wndSourceCombo; CMirrorListView m_wndResultView; CTempAMCView m_MirroredView; CNode* m_pMirrorTargetNode; }; //############################################################################ //############################################################################ // // class CTaskWizardFavoritePage // //############################################################################ //############################################################################ class CTaskWizardFavoritePage : public CWizard97InteriorPage, public virtual CTaskpadFramePtr { typedef CTaskWizardFavoritePage ThisClass; typedef CWizard97InteriorPage BaseClass; enum { IDC_FavoritesTree = 16384}; // this shouldn't occur on the page. public: // Construction/Destruction CTaskWizardFavoritePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew); ~CTaskWizardFavoritePage(); public: // Dialog data enum { IDD = IDD_TASK_WIZARD_FAVORITE_PAGE, IDD_WIZ = IDD_TASK_WIZARD_FAVORITE_PAGE, IDS_Title = IDS_TaskWiz_FavoritePage_Title, IDS_Subtitle = IDS_TaskWiz_FavoritePage_Subtitle, }; BOOL OnSetActive(); BOOL OnKillActive(); int OnWizardBack(); int OnWizardNext(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(MMC_MSG_FAVORITE_SELECTION, OnItemChanged) CHAIN_MSG_MAP(BaseClass) REFLECT_NOTIFICATIONS() END_MSG_MAP(); LRESULT OnInitDialog (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnItemChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnSelChanged ( int id, LPNMHDR pnmh, BOOL& bHandled ); void SetItemSelected(bool bItemSelected); private: // attributes CConsoleTask * m_pConsoleTask; CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;} bool m_bItemSelected; }; //############################################################################ //############################################################################ // // class CTaskCmdLinePage // //############################################################################ //############################################################################ class CTaskCmdLinePage : public CWizard97InteriorPage, public virtual CTaskpadFramePtr { typedef CTaskCmdLinePage ThisClass; typedef CWizard97InteriorPage BaseClass; public: // Construction/Destruction CTaskCmdLinePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew); ~CTaskCmdLinePage(); public: // Dialog data enum { IDD = IDD_TASK_PROPS_CMDLINE_PAGE, IDD_WIZ = IDD_TASK_WIZARD_CMDLINE_PAGE, IDS_Title = IDS_TaskWiz_CmdLinePageTitle, IDS_Subtitle = IDS_TaskWiz_CmdLinePageSubtitle, }; BOOL OnSetActive(); BOOL OnKillActive(); int OnWizardBack() {return IDD_TASK_WIZARD_TYPE_PAGE;} int OnWizardNext(); // Implementation protected: BEGIN_MSG_MAP( ThisClass ); COMMAND_ID_HANDLER (IDC_BrowseForCommand, OnBrowseForCommand) COMMAND_ID_HANDLER (IDC_BrowseForWorkingDir, OnBrowseForWorkingDir) COMMAND_ID_HANDLER (IDC_BrowseForArguments, OnBrowseForArguments) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CONTEXT_HELP_HANDLER() CHAIN_MSG_MAP(BaseClass) END_MSG_MAP(); IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASK_PROPS_CMDLINE_PAGE); LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnBrowseForCommand (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnBrowseForWorkingDir (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnBrowseForArguments (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); private: // attributes CConsoleTask * m_pConsoleTask; CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;} WTL::CButton m_wndRightArrowButton; HBITMAP m_hBitmapRightArrow; CMyComboBox m_wndWindowStateCombo; static const int const s_rgidWindowStates[]; }; class CTaskCmdLineWizardPage: public CTaskCmdLinePage { typedef CTaskCmdLinePage BC; public: CTaskCmdLineWizardPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew) : CTaskpadFramePtr(pTaskpadFrame), CTaskCmdLinePage(pTaskpadFrame, consoleTask, fNew) { m_psp.pszTemplate = MAKEINTRESOURCE(BC::IDD_WIZ); } }; //############################################################################ //############################################################################ // // class CTaskPropertySheet // //############################################################################ //############################################################################ class CTaskPropertySheet : public WTL::CPropertySheet { public: CTaskPropertySheet(HWND hWndParent, CTaskpadFrame * pTaskpadFrame, CConsoleTask &consoleTask, bool fNew); CConsoleTask & ConsoleTask() {return m_consoleTask;} private: CConsoleTask m_consoleTask; // the task that the wizard creates. CTaskNamePage m_namePage; CTaskCmdLinePage m_cmdLinePage; CTaskSymbolDlg m_taskSymbolDialog; }; //############################################################################ //############################################################################ // // class CTaskWizard // similar to CTaskPropertySheet // //############################################################################ //############################################################################ class CTaskWizard { public: CTaskWizard() {} HRESULT Show(HWND hWndParent, CTaskpadFrame * pTaskpadFrame, bool fNew, bool *pfRestartTaskWizard); CConsoleTask & ConsoleTask() {return m_consoleTask;} private: CConsoleTask m_consoleTask; // the task that the wizard creates. }; //############################################################################ //############################################################################ // // class CTaskpadPropertySheet // //############################################################################ //############################################################################ class CTaskpadPropertySheet : public WTL::CPropertySheet, public CTaskpadFrame { typedef WTL::CPropertySheet BC; public: enum eReason // the reason for bringing up the sheet { eReason_PROPERTIES, eReason_NEWTASK }; private: // Attributes: CTaskpadGeneralPage m_proppTaskpadGeneral; CTaskpadGeneralPage * PproppTaskpadGeneral() {return &m_proppTaskpadGeneral;} CTasksPage m_proppTasks; CTasksPage * PproppTasks() {return &m_proppTasks;} bool m_fInsertNode; // TRUE if the taskpad node should be inserted when the sheet is closed. bool FInsertNode() {return m_fInsertNode;} bool m_fNew; // is this a new taskpad? bool FNew() {return m_fNew;} eReason m_eReason; // why was the sheet created? eReason Reason() {return m_eReason;} tstring m_strTitle; public: //constructor/destructor CTaskpadPropertySheet(CNode *pNodeTarget, CConsoleTaskpad & rConsoleTaskPad, bool fNew, LPARAM lparamSelectedNode, bool fLParamValid, CViewData *pViewData, eReason reason = eReason_PROPERTIES); ~CTaskpadPropertySheet(); // operations int DoModal(); }; //############################################################################ //############################################################################ // // class CTaskpadWizard // similar to CTaskpadPropertySheet // //############################################################################ //############################################################################ class CTaskpadWizard : public CTaskpadFrame { typedef CTaskpadFrame BC; public: CTaskpadWizard(CNode *pNodeTarget, CConsoleTaskpad & rConsoleTaskPad, bool fNew, LPARAM lparamSelectedNode, bool fLParamValid, CViewData *pViewData); HRESULT Show(HWND hWndParent, bool *pfStartTaskWizard); }; //############################################################################ //############################################################################ // // class CExtendPropSheetImpl // //############################################################################ //############################################################################ class CExtendPropSheetImpl : public IExtendPropertySheet2, public CComObjectRoot { public: void AddPage (HPROPSHEETPAGE hPage); void SetHeaderID (int nHeaderID); void SetWatermarkID (int nWatermarkID); protected: BEGIN_COM_MAP(CExtendPropSheetImpl) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendPropertySheet2) END_COM_MAP() // IExtendPropertySheet2 STDMETHOD(CreatePropertyPages)(IPropertySheetCallback* pPSC, LONG_PTR handle, IDataObject* pDO); STDMETHOD(QueryPagesFor)(IDataObject* pDO); STDMETHOD(GetWatermarks)(IDataObject* pDO, HBITMAP* phbmWatermark, HBITMAP* phbmHeader, HPALETTE* phPal, BOOL* pbStretch); private: std::vector m_vPages; int m_nWatermarkID; int m_nHeaderID; }; typedef CComObject CExtendPropSheet; /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// ////////////// INLINES /////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// namespace MMC { inline void CEdit::Initialize(CWindow *pwndParent, int idEdit, int cchMax, LPCTSTR sz) { Attach (pwndParent->GetDlgItem( idEdit )); ASSERT( m_hWnd != NULL ); if(sz) SetWindowText( sz ); if(cchMax >=0) SetLimitText( 128 ); } tstring GetWindowText (HWND hwnd); }; // namespace MMC void PreventMFCAutoCenter (MMC_ATL::CWindow* pwnd); HBITMAP LoadSysColorBitmap (HINSTANCE hInst, UINT id, bool bMono = false); #include #endif /* TASKUI_H */