?? tabbedmdisave.h
字號:
CTabbedMDIChildModifiedItem();
BEGIN_COM_MAP(CTabbedMDIChildModifiedItem)
COM_INTERFACE_ENTRY(ITabbedMDIChildModifiedItem)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct();
void FinalRelease();
// ITabbedMDIChildModifiedItem
public:
STDMETHOD(get_Window)(
HWND* window);
STDMETHOD(put_Window)(
HWND window);
STDMETHOD(get_Name)(
BSTR* name);
STDMETHOD(put_Name)(
const wchar_t* name);
STDMETHOD(get_DisplayName)(
BSTR* displayName);
STDMETHOD(put_DisplayName)(
const wchar_t* displayName);
STDMETHOD(get_Description)(
BSTR* description);
STDMETHOD(put_Description)(
const wchar_t* description);
STDMETHOD(get_LastModifiedUTC)(
DATE* lastModified);
STDMETHOD(put_LastModifiedUTC)(
DATE lastModified);
STDMETHOD(get_Icon)(
HICON* icon);
STDMETHOD(put_Icon)(
HICON icon);
STDMETHOD(get_UserData)(
IUnknown** userData);
STDMETHOD(putref_UserData)(
IUnknown* userData);
STDMETHOD(get_ParentList)(
ITabbedMDIChildModifiedList** parentList);
STDMETHOD(putref_ParentList)(
ITabbedMDIChildModifiedList* parentList);
STDMETHOD(get_SubItems)(
ITabbedMDIChildModifiedList** subItems);
STDMETHOD(CopyTo)(
ITabbedMDIChildModifiedItem* destination);
// Methods not exposed over iterface:
public:
STDMETHOD(InitNew)(HWND window,
const wchar_t* name, const wchar_t* displayName, const wchar_t* description,
DATE lastModified, HICON icon);
protected:
HWND m_window;
ATL::CComBSTR m_name;
ATL::CComBSTR m_displayName;
ATL::CComBSTR m_description;
DATE m_lastModified;
HICON m_icon;
ATL::CComPtr<IUnknown> m_userData;
// We keep a strong reference to the sub item list,
// and the sub item list keeps a weak reference to us
// (to avoid circular reference)
ATL::CComPtr<ITabbedMDIChildModifiedList> m_subItems;
// We keep a weak reference to our parent list,
// and the parent list keeps a strong reference to us.
// One implication is that an item can only belong
// to one parent. To allow an item to belong to multiple
// parents, update the code related to setting the parent.
ITabbedMDIChildModifiedList* m_parentList;
};
/////////////////////////////////////////////////////////////////////////////
// Global functions
HRESULT CreateTabbedMDIChildModifiedList(ITabbedMDIChildModifiedList** list);
HRESULT CreateTabbedMDIChildModifiedItem(HWND window,
const wchar_t* name, const wchar_t* displayName, const wchar_t* description,
DATE lastModified, HICON icon,
ITabbedMDIChildModifiedItem** item);
HRESULT CreateEmptyTabbedMDIChildModifiedItem(ITabbedMDIChildModifiedItem** item);
/////////////////////////////////////////////////////////////////////////////
// CSaveModifiedItemsDialog
class CSaveModifiedItemsDialog :
//public ATL::CDialogImpl<CSaveModifiedItemsDialog>,
public DynamicDialog::CDynamicDialogImpl<CSaveModifiedItemsDialog>,
public WTL::CDialogResize<CSaveModifiedItemsDialog>
{
protected:
//typedef ATL::CDialogImpl<CSaveModifiedItemsDialog> baseClass;
typedef DynamicDialog::CDynamicDialogImpl<CSaveModifiedItemsDialog> baseClass;
typedef WTL::CDialogResize<CSaveModifiedItemsDialog> resizeClass;
// Public enumarations
public:
enum DialogControlIds
{
_IDC_LIST = 1000,
};
enum CheckState
{
eCheckState_Unchecked = INDEXTOSTATEIMAGEMASK(1),
eCheckState_Checked = INDEXTOSTATEIMAGEMASK(2),
eCheckState_Indeterminate = INDEXTOSTATEIMAGEMASK(3),
};
enum ColumnIndex
{
eColumn_Name = 0,
eColumn_Description = 1,
eColumn_LastModified = 2,
eColumn_Last = eColumn_LastModified,
eColumn_Count = eColumn_Last + 1,
};
enum Constants
{
eMinimumColumnWidth = 40
};
// Constructors
public:
CSaveModifiedItemsDialog(ITabbedMDIChildModifiedList* list = NULL, bool canCancel = true);
virtual ~CSaveModifiedItemsDialog();
// Public Methods (Call before DoModal)
public:
bool HideColumn(ColumnIndex column);
// Message Handling
public:
//enum { IDD = IDD_SAVEMODIFIEDFILES };
BEGIN_MSG_MAP(CSaveModifiedItemsDialog)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
COMMAND_ID_HANDLER(IDYES, OnYes)
COMMAND_ID_HANDLER(IDNO, OnEndDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnEndDialog)
NOTIFY_CODE_HANDLER(LVN_INSERTITEM, OnListViewInsertItem)
NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnListViewDeleteItem)
NOTIFY_CODE_HANDLER(LVN_KEYDOWN, OnListViewKeyDownToToggleCheck)
NOTIFY_CODE_HANDLER(NM_CLICK, OnListViewClickToToggleCheck)
NOTIFY_CODE_HANDLER(NM_DBLCLK, OnListViewClickToToggleCheck)
CHAIN_MSG_MAP(resizeClass)
ALT_MSG_MAP(1)
// List View Control Messages
MESSAGE_HANDLER(WM_ERASEBKGND, OnListViewEraseBackground)
MESSAGE_HANDLER(WM_PAINT, OnListViewPaint)
MESSAGE_HANDLER(WM_PRINTCLIENT, OnListViewPaint)
NOTIFY_CODE_HANDLER(HDN_BEGINTRACKA, OnHeaderBeginTrack)
NOTIFY_CODE_HANDLER(HDN_BEGINTRACKW, OnHeaderBeginTrack)
NOTIFY_CODE_HANDLER(HDN_TRACKA, OnHeaderTrack)
NOTIFY_CODE_HANDLER(HDN_TRACKW, OnHeaderTrack)
NOTIFY_CODE_HANDLER(HDN_ENDTRACKA, OnHeaderEndTrack)
NOTIFY_CODE_HANDLER(HDN_ENDTRACKW, OnHeaderEndTrack)
NOTIFY_CODE_HANDLER(HDN_ITEMCHANGINGA, OnHeaderItemChanging)
NOTIFY_CODE_HANDLER(HDN_ITEMCHANGINGW, OnHeaderItemChanging)
NOTIFY_CODE_HANDLER(HDN_DIVIDERDBLCLICKA, OnHeaderDividerDoubleClick)
NOTIFY_CODE_HANDLER(HDN_DIVIDERDBLCLICKW, OnHeaderDividerDoubleClick)
END_MSG_MAP()
BEGIN_DLGRESIZE_MAP(CSaveModifiedItemsDialog)
DLGRESIZE_CONTROL(_IDC_LIST, (DLSZ_SIZE_X | DLSZ_SIZE_Y))
DLGRESIZE_CONTROL(IDYES, (DLSZ_MOVE_X | DLSZ_MOVE_Y))
DLGRESIZE_CONTROL(IDNO, (DLSZ_MOVE_X | DLSZ_MOVE_Y))
DLGRESIZE_CONTROL(IDCANCEL, (DLSZ_MOVE_X | DLSZ_MOVE_Y))
END_DLGRESIZE_MAP()
// Handler prototypes (uncomment arguments if needed):
// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnYes(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnEndDialog(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnListViewInsertItem(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnListViewDeleteItem(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnListViewKeyDownToToggleCheck(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnListViewClickToToggleCheck(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnListViewEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnListViewPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnHeaderBeginTrack(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnHeaderTrack(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnHeaderEndTrack(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnHeaderItemChanging(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnHeaderDividerDoubleClick(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
// CDialogResize overrides
public:
void DlgResize_UpdateLayout(int cxWidth, int cyHeight);
// DynamicDialog::CDynamicDialogImpl overrides
public:
bool ConstructDialogResource(void);
protected:
bool InitializeControls(void);
bool InitializeValues(void);
bool InitializeColumns(void);
int AutoHideUnusedColumns(void);
bool FindUsedColumns(ITabbedMDIChildModifiedList* list, int columnUseCount[eColumn_Count]);
bool AddItems(ITabbedMDIChildModifiedList* list, int indent);
_CSTRING_NS::CString FormatLastModifiedDateString(DATE lastModifiedUTC);
IUnknown* GetIUnknownForItem(int index);
int FindItemIndex(ITabbedMDIChildModifiedItem* item);
int FindParentIndex(int item);
void ToggleCheckState(int item);
void SetTristateCheckState(int item, CheckState checkState);
CheckState GetTristateCheckState(int item);
void UpdateParentCheckState(int item, CheckState checkState);
void CreateDefaultImages(void);
void CreateDefaultStateImages(void);
int AddCheckStateImage(HDC dcScreen, int cx, int cy, enum CheckState checkState);
// Members
protected:
ATL::CComPtr<ITabbedMDIChildModifiedList> m_modifiedList;
bool m_canCancel;
bool m_haveAtLeastOneModifiedDate;
ATL::CContainedWindowT<WTL::CListViewCtrl> m_list;
WTL::CHeaderCtrl m_header;
WTL::CImageList m_images;
WTL::CImageList m_stateImages;
HICON m_dialogIcon;
int m_imageUnchecked;
int m_imageChecked;
int m_imageIndeterminate;
int m_trackColumnWidth;
int m_trackColumnIndex;
ColumnIndex m_lastVisibleColumn;
bool m_showColumn[eColumn_Count];
};
#endif // WTL_TABBED_MDI_SAVE_IMPLEMENTATION
#endif // __TabbedMDISave_h__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -