1*7f2fe78bSCy Schubert // ************************************************************************************** 2*7f2fe78bSCy Schubert // File: LeashView.h 3*7f2fe78bSCy Schubert // By: Arthur David Leather 4*7f2fe78bSCy Schubert // Created: 12/02/98 5*7f2fe78bSCy Schubert // Copyright @1998 Massachusetts Institute of Technology - All rights reserved. 6*7f2fe78bSCy Schubert // Description: H file for LeashView.cpp. Contains variables and functions 7*7f2fe78bSCy Schubert // for the Leash FormView 8*7f2fe78bSCy Schubert // 9*7f2fe78bSCy Schubert // History: 10*7f2fe78bSCy Schubert // 11*7f2fe78bSCy Schubert // MM/DD/YY Inits Description of Change 12*7f2fe78bSCy Schubert // 12/02/98 ADL Original 13*7f2fe78bSCy Schubert // ************************************************************************************** 14*7f2fe78bSCy Schubert 15*7f2fe78bSCy Schubert 16*7f2fe78bSCy Schubert #if !defined(AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_) 17*7f2fe78bSCy Schubert #define AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_ 18*7f2fe78bSCy Schubert 19*7f2fe78bSCy Schubert #if _MSC_VER >= 1000 20*7f2fe78bSCy Schubert #pragma once 21*7f2fe78bSCy Schubert #endif // _MSC_VER >= 1000 22*7f2fe78bSCy Schubert 23*7f2fe78bSCy Schubert #define GOOD_TICKETS 1 // Don't change this value 24*7f2fe78bSCy Schubert #define EXPIRED_TICKETS 2 // Don't change this value 25*7f2fe78bSCy Schubert #define TICKETS_LOW 3 26*7f2fe78bSCy Schubert #define ONE_SECOND 1000 27*7f2fe78bSCy Schubert #define SMALL_ICONS 16 28*7f2fe78bSCy Schubert #define LARGE_ICONS 32 29*7f2fe78bSCy Schubert 30*7f2fe78bSCy Schubert #define UPDATE_DISPLAY_TIME 60 //seconds 31*7f2fe78bSCy Schubert 32*7f2fe78bSCy Schubert #define ACTIVE_CLOCK 0 33*7f2fe78bSCy Schubert #define LOW_CLOCK 1 34*7f2fe78bSCy Schubert #define EXPIRED_CLOCK 2 35*7f2fe78bSCy Schubert #define ACTIVE_TICKET 3 36*7f2fe78bSCy Schubert #define LOW_TICKET 4 37*7f2fe78bSCy Schubert #define EXPIRED_TICKET 5 38*7f2fe78bSCy Schubert #define TICKET_NOT_INSTALLED 6 39*7f2fe78bSCy Schubert #define ACTIVE_PARENT_NODE 7 40*7f2fe78bSCy Schubert #define LOW_PARENT_NODE 8 41*7f2fe78bSCy Schubert #define EXPIRED_PARENT_NODE 9 42*7f2fe78bSCy Schubert #define NONE_PARENT_NODE 10 43*7f2fe78bSCy Schubert #define LOW_TRAY_ICON 11 44*7f2fe78bSCy Schubert #define EXPIRED_TRAY_ICON 12 45*7f2fe78bSCy Schubert #define ACTIVE_TRAY_ICON 13 46*7f2fe78bSCy Schubert #define NONE_TRAY_ICON 14 47*7f2fe78bSCy Schubert #define TKT_ADDRESS 15 48*7f2fe78bSCy Schubert #define TKT_SESSION 16 49*7f2fe78bSCy Schubert #define TKT_ENCRYPTION 17 50*7f2fe78bSCy Schubert #define IMAGE_COUNT 18 51*7f2fe78bSCy Schubert 52*7f2fe78bSCy Schubert #define NODE_IS_EXPANDED 2 53*7f2fe78bSCy Schubert 54*7f2fe78bSCy Schubert #define CX_BORDER 1 55*7f2fe78bSCy Schubert #define CY_BORDER 1 56*7f2fe78bSCy Schubert 57*7f2fe78bSCy Schubert #ifdef NO_TICKETS 58*7f2fe78bSCy Schubert #undef NO_TICKETS // XXX - this is evil but necessary thanks to silliness... 59*7f2fe78bSCy Schubert #endif 60*7f2fe78bSCy Schubert 61*7f2fe78bSCy Schubert #define WM_TRAYICON (WM_USER+100) 62*7f2fe78bSCy Schubert #define WM_WARNINGPOPUP (WM_USER+101) 63*7f2fe78bSCy Schubert 64*7f2fe78bSCy Schubert enum ticketTimeLeft{NO_TICKETS, ZERO_MINUTES_LEFT, FIVE_MINUTES_LEFT, TEN_MINUTES_LEFT, 65*7f2fe78bSCy Schubert FIFTEEN_MINUTES_LEFT, TWENTY_MINUTES_LEFT, PLENTY_OF_TIME, 66*7f2fe78bSCy Schubert NOT_INSTALLED}; 67*7f2fe78bSCy Schubert // Don't change 'NO_TICKET's' value 68*7f2fe78bSCy Schubert 69*7f2fe78bSCy Schubert class CLeashDebugWindow; 70*7f2fe78bSCy Schubert class ViewColumnInfo 71*7f2fe78bSCy Schubert { 72*7f2fe78bSCy Schubert public: 73*7f2fe78bSCy Schubert const char * m_name; 74*7f2fe78bSCy Schubert int m_enabled; 75*7f2fe78bSCy Schubert int m_id; 76*7f2fe78bSCy Schubert int m_columnWidth; 77*7f2fe78bSCy Schubert }; 78*7f2fe78bSCy Schubert 79*7f2fe78bSCy Schubert enum eViewColumn { 80*7f2fe78bSCy Schubert PRINCIPAL, 81*7f2fe78bSCy Schubert TIME_ISSUED, 82*7f2fe78bSCy Schubert RENEWABLE_UNTIL, 83*7f2fe78bSCy Schubert VALID_UNTIL, 84*7f2fe78bSCy Schubert ENCRYPTION_TYPE, 85*7f2fe78bSCy Schubert TICKET_FLAGS, 86*7f2fe78bSCy Schubert CACHE_NAME, 87*7f2fe78bSCy Schubert NUM_VIEW_COLUMNS 88*7f2fe78bSCy Schubert }; 89*7f2fe78bSCy Schubert 90*7f2fe78bSCy Schubert class CCacheDisplayData 91*7f2fe78bSCy Schubert { 92*7f2fe78bSCy Schubert public: CCacheDisplayData(const char * ccache_name)93*7f2fe78bSCy Schubert CCacheDisplayData(const char *ccache_name) : 94*7f2fe78bSCy Schubert m_next(NULL), 95*7f2fe78bSCy Schubert m_ccacheName(strdup(ccache_name)), 96*7f2fe78bSCy Schubert m_index(-1), 97*7f2fe78bSCy Schubert m_focus(-1), 98*7f2fe78bSCy Schubert m_expanded(0), 99*7f2fe78bSCy Schubert m_selected(0), 100*7f2fe78bSCy Schubert m_isRenewable(0), 101*7f2fe78bSCy Schubert m_isDefault(0) 102*7f2fe78bSCy Schubert { 103*7f2fe78bSCy Schubert } 104*7f2fe78bSCy Schubert ~CCacheDisplayData()105*7f2fe78bSCy Schubert ~CCacheDisplayData() 106*7f2fe78bSCy Schubert { 107*7f2fe78bSCy Schubert if (m_ccacheName) 108*7f2fe78bSCy Schubert free(m_ccacheName); 109*7f2fe78bSCy Schubert } 110*7f2fe78bSCy Schubert 111*7f2fe78bSCy Schubert CCacheDisplayData *m_next; 112*7f2fe78bSCy Schubert char *m_ccacheName; 113*7f2fe78bSCy Schubert int m_index; // item index in list view 114*7f2fe78bSCy Schubert int m_focus; // sub-item with focus 115*7f2fe78bSCy Schubert unsigned int m_expanded; // true when each individual ticket is displayed 116*7f2fe78bSCy Schubert unsigned int m_selected; // true when this ccache is selected 117*7f2fe78bSCy Schubert unsigned int m_isRenewable; // true when tgt is renewable 118*7f2fe78bSCy Schubert unsigned int m_isDefault; // true when this is the default ccache 119*7f2fe78bSCy Schubert }; 120*7f2fe78bSCy Schubert 121*7f2fe78bSCy Schubert struct ListItemInfo 122*7f2fe78bSCy Schubert { ListItemInfoListItemInfo123*7f2fe78bSCy Schubert ListItemInfo() : m_font(NULL), m_durationFont(NULL) {} 124*7f2fe78bSCy Schubert HFONT m_durationFont; // For renewable/valid until; italic when expired 125*7f2fe78bSCy Schubert HFONT m_font; // For all other items 126*7f2fe78bSCy Schubert }; 127*7f2fe78bSCy Schubert 128*7f2fe78bSCy Schubert class CLeashView : public CListView 129*7f2fe78bSCy Schubert { 130*7f2fe78bSCy Schubert private: 131*7f2fe78bSCy Schubert ////@#+Remove 132*7f2fe78bSCy Schubert CLeashDebugWindow* m_pDebugWindow; 133*7f2fe78bSCy Schubert CCacheDisplayData* m_ccacheDisplay; 134*7f2fe78bSCy Schubert CImageList m_imageList; 135*7f2fe78bSCy Schubert CWinApp* m_pApp; 136*7f2fe78bSCy Schubert HTREEITEM m_hPrincipal; 137*7f2fe78bSCy Schubert HTREEITEM m_hKerb5; 138*7f2fe78bSCy Schubert HTREEITEM m_hk5tkt; 139*7f2fe78bSCy Schubert TV_INSERTSTRUCT m_tvinsert; 140*7f2fe78bSCy Schubert HMENU m_hMenu; 141*7f2fe78bSCy Schubert BOOL m_startup; 142*7f2fe78bSCy Schubert BOOL m_isMinimum; 143*7f2fe78bSCy Schubert BOOL m_debugStartUp; 144*7f2fe78bSCy Schubert BOOL m_alreadyPlayed; 145*7f2fe78bSCy Schubert INT m_upperCaseRealm; 146*7f2fe78bSCy Schubert INT m_destroyTicketsOnExit; 147*7f2fe78bSCy Schubert INT m_debugWindow; 148*7f2fe78bSCy Schubert INT m_largeIcons; 149*7f2fe78bSCy Schubert INT m_lowTicketAlarm; 150*7f2fe78bSCy Schubert INT m_hPrincipalState; 151*7f2fe78bSCy Schubert INT m_hKerb5State; 152*7f2fe78bSCy Schubert CString* m_pWarningMessage; 153*7f2fe78bSCy Schubert BOOL m_bIconAdded; 154*7f2fe78bSCy Schubert BOOL m_bIconDeleted; 155*7f2fe78bSCy Schubert HFONT m_BaseFont; 156*7f2fe78bSCy Schubert HFONT m_BoldFont; 157*7f2fe78bSCy Schubert HFONT m_ItalicFont; 158*7f2fe78bSCy Schubert HFONT m_BoldItalicFont; 159*7f2fe78bSCy Schubert ListItemInfo* m_aListItemInfo; 160*7f2fe78bSCy Schubert 161*7f2fe78bSCy Schubert static ViewColumnInfo sm_viewColumns[NUM_VIEW_COLUMNS]; 162*7f2fe78bSCy Schubert 163*7f2fe78bSCy Schubert static INT m_autoRenewTickets; 164*7f2fe78bSCy Schubert static INT m_ticketStatusKrb5; 165*7f2fe78bSCy Schubert static INT m_autoRenewalAttempted; 166*7f2fe78bSCy Schubert static INT m_warningOfTicketTimeLeftKrb5; 167*7f2fe78bSCy Schubert static INT m_warningOfTicketTimeLeftLockKrb5; 168*7f2fe78bSCy Schubert static INT m_updateDisplayCount; 169*7f2fe78bSCy Schubert static INT m_alreadyPlayedDisplayCount; 170*7f2fe78bSCy Schubert static time_t m_ticketTimeLeft; 171*7f2fe78bSCy Schubert static BOOL m_lowTicketAlarmSound; 172*7f2fe78bSCy Schubert static LONG m_timerMsgNotInProgress; 173*7f2fe78bSCy Schubert 174*7f2fe78bSCy Schubert void ToggleViewColumn(eViewColumn viewOption); 175*7f2fe78bSCy Schubert VOID ResetTreeNodes(); 176*7f2fe78bSCy Schubert VOID ApplicationInfoMissingMsg(); 177*7f2fe78bSCy Schubert VOID GetScrollBarState(CSize sizeClient, CSize& needSb, 178*7f2fe78bSCy Schubert CSize& sizeRange, CPoint& ptMove, 179*7f2fe78bSCy Schubert BOOL bInsideClient); 180*7f2fe78bSCy Schubert VOID UpdateBars(); 181*7f2fe78bSCy Schubert VOID GetScrollBarSizes(CSize& sizeSb); 182*7f2fe78bSCy Schubert BOOL GetTrueClientSize(CSize& size, CSize& sizeSb); 183*7f2fe78bSCy Schubert HFONT GetSubItemFont(int iItem, int iSubItem); 184*7f2fe78bSCy Schubert 185*7f2fe78bSCy Schubert //void GetRowWidthHeight(CDC* pDC, LPCSTR theString, int& nRowWidth, 186*7f2fe78bSCy Schubert // int& nRowHeight, int& nCharWidth); 187*7f2fe78bSCy Schubert static VOID AlarmBeep(); 188*7f2fe78bSCy Schubert static VOID CALLBACK EXPORT TimerProc(HWND hWnd, UINT nMsg, UINT_PTR nIDEvent, 189*7f2fe78bSCy Schubert DWORD dwTime); 190*7f2fe78bSCy Schubert static VOID UpdateTicketTime(TICKETINFO& ticketinfo); 191*7f2fe78bSCy Schubert static INT GetLowTicketStatus(int); 192*7f2fe78bSCy Schubert static time_t LeashTime(); 193*7f2fe78bSCy Schubert static BOOL IsExpired(TicketList *ticket); 194*7f2fe78bSCy Schubert static BOOL IsExpired(TICKETINFO *info); 195*7f2fe78bSCy Schubert static VOID AddDisplayItem(CListCtrl &list, 196*7f2fe78bSCy Schubert CCacheDisplayData *elem, 197*7f2fe78bSCy Schubert int iItem, 198*7f2fe78bSCy Schubert char *principal, 199*7f2fe78bSCy Schubert time_t issued, 200*7f2fe78bSCy Schubert time_t valid_until, 201*7f2fe78bSCy Schubert time_t renew_until, 202*7f2fe78bSCy Schubert char *encTypes, 203*7f2fe78bSCy Schubert unsigned long flags, 204*7f2fe78bSCy Schubert char *cache_name); 205*7f2fe78bSCy Schubert 206*7f2fe78bSCy Schubert void SetTrayIcon(int nim, int state=0); 207*7f2fe78bSCy Schubert void SetTrayText(int nim, CString tip); 208*7f2fe78bSCy Schubert 209*7f2fe78bSCy Schubert BOOL UpdateDisplay(); 210*7f2fe78bSCy Schubert static UINT InitTicket(void *); 211*7f2fe78bSCy Schubert static UINT RenewTicket(void *); 212*7f2fe78bSCy Schubert static UINT ImportTicket(void *); 213*7f2fe78bSCy Schubert // Queue a warning popup message. 214*7f2fe78bSCy Schubert // This is a workaround to the MFC deficiency that you cannot safely create 215*7f2fe78bSCy Schubert // a modal dialog while processing messages within AfxPreTranslateMessage() 216*7f2fe78bSCy Schubert // returns TRUE if message is queued successfully. 217*7f2fe78bSCy Schubert BOOL PostWarningMessage(const CString& message); 218*7f2fe78bSCy Schubert afx_msg LRESULT OnWarningPopup(WPARAM wParam, LPARAM lParam); 219*7f2fe78bSCy Schubert 220*7f2fe78bSCy Schubert BOOL IsExpanded(TICKETINFO *); 221*7f2fe78bSCy Schubert 222*7f2fe78bSCy Schubert protected: // create from serialization only 223*7f2fe78bSCy Schubert DECLARE_DYNCREATE(CLeashView) 224*7f2fe78bSCy Schubert 225*7f2fe78bSCy Schubert // Attributes 226*7f2fe78bSCy Schubert public: 227*7f2fe78bSCy Schubert CLeashView(); 228*7f2fe78bSCy Schubert //LeashDoc* GetDocument(); 229*7f2fe78bSCy Schubert 230*7f2fe78bSCy Schubert //{{AFX_DATA(CLeashView) 231*7f2fe78bSCy Schubert enum { IDD = IDD_DIALOG1 }; 232*7f2fe78bSCy Schubert // NOTE: the ClassWizard will add data members here 233*7f2fe78bSCy Schubert //}}AFX_DATA 234*7f2fe78bSCy Schubert 235*7f2fe78bSCy Schubert // Operations 236*7f2fe78bSCy Schubert public: 237*7f2fe78bSCy Schubert 238*7f2fe78bSCy Schubert // Overrides 239*7f2fe78bSCy Schubert // ClassWizard generated virtual function overrides 240*7f2fe78bSCy Schubert //{{AFX_VIRTUAL(CLeashView) 241*7f2fe78bSCy Schubert public: 242*7f2fe78bSCy Schubert virtual BOOL PreCreateWindow(CREATESTRUCT& cs); 243*7f2fe78bSCy Schubert virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); 244*7f2fe78bSCy Schubert virtual VOID OnInitialUpdate(); 245*7f2fe78bSCy Schubert virtual BOOL PreTranslateMessage(MSG* pMsg); 246*7f2fe78bSCy Schubert protected: 247*7f2fe78bSCy Schubert virtual VOID OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView); 248*7f2fe78bSCy Schubert //}}AFX_VIRTUAL 249*7f2fe78bSCy Schubert 250*7f2fe78bSCy Schubert // Implementation 251*7f2fe78bSCy Schubert public: 252*7f2fe78bSCy Schubert virtual ~CLeashView(); 253*7f2fe78bSCy Schubert 254*7f2fe78bSCy Schubert #ifdef _DEBUG 255*7f2fe78bSCy Schubert virtual VOID AssertValid() const; 256*7f2fe78bSCy Schubert virtual VOID Dump(CDumpContext& dc) const; 257*7f2fe78bSCy Schubert #endif 258*7f2fe78bSCy Schubert 259*7f2fe78bSCy Schubert // Generated message map functions 260*7f2fe78bSCy Schubert protected: 261*7f2fe78bSCy Schubert //{{AFX_MSG(CLeashView) 262*7f2fe78bSCy Schubert afx_msg VOID OnItemexpandedTreeview(NMHDR* pNMHDR, LRESULT* pResult); 263*7f2fe78bSCy Schubert afx_msg INT OnCreate(LPCREATESTRUCT lpCreateStruct); 264*7f2fe78bSCy Schubert afx_msg VOID OnShowWindow(BOOL bShow, UINT nStatus); 265*7f2fe78bSCy Schubert afx_msg VOID OnClose(void); 266*7f2fe78bSCy Schubert afx_msg VOID OnInitTicket(); 267*7f2fe78bSCy Schubert afx_msg VOID OnRenewTicket(); 268*7f2fe78bSCy Schubert afx_msg VOID OnDestroyTicket(); 269*7f2fe78bSCy Schubert afx_msg VOID OnMakeDefault(); 270*7f2fe78bSCy Schubert afx_msg VOID OnChangePassword(); 271*7f2fe78bSCy Schubert afx_msg VOID OnUpdateDisplay(); 272*7f2fe78bSCy Schubert afx_msg VOID OnSynTime(); 273*7f2fe78bSCy Schubert afx_msg VOID OnDebugMode(); 274*7f2fe78bSCy Schubert afx_msg VOID OnLargeIcons(); 275*7f2fe78bSCy Schubert afx_msg VOID OnTimeIssued(); 276*7f2fe78bSCy Schubert afx_msg VOID OnValidUntil(); 277*7f2fe78bSCy Schubert afx_msg VOID OnRenewableUntil(); 278*7f2fe78bSCy Schubert afx_msg VOID OnShowTicketFlags(); 279*7f2fe78bSCy Schubert afx_msg VOID OnEncryptionType(); 280*7f2fe78bSCy Schubert afx_msg VOID OnCcacheName(); 281*7f2fe78bSCy Schubert afx_msg VOID OnUppercaseRealm(); 282*7f2fe78bSCy Schubert afx_msg VOID OnKillTixOnExit(); 283*7f2fe78bSCy Schubert afx_msg VOID OnDestroy(); 284*7f2fe78bSCy Schubert afx_msg VOID OnUpdateDestroyTicket(CCmdUI* pCmdUI); 285*7f2fe78bSCy Schubert afx_msg VOID OnUpdateInitTicket(CCmdUI* pCmdUI); 286*7f2fe78bSCy Schubert afx_msg VOID OnUpdateRenewTicket(CCmdUI* pCmdUI); 287*7f2fe78bSCy Schubert afx_msg VOID OnUpdateTimeIssued(CCmdUI* pCmdUI); 288*7f2fe78bSCy Schubert afx_msg VOID OnUpdateValidUntil(CCmdUI* pCmdUI); 289*7f2fe78bSCy Schubert afx_msg VOID OnUpdateRenewableUntil(CCmdUI* pCmdUI); 290*7f2fe78bSCy Schubert afx_msg VOID OnUpdateShowTicketFlags(CCmdUI* pCmdUI); 291*7f2fe78bSCy Schubert afx_msg VOID OnUpdateEncryptionType(CCmdUI* pCmdUI); 292*7f2fe78bSCy Schubert afx_msg VOID OnUpdateCcacheName(CCmdUI* pCmdUI); 293*7f2fe78bSCy Schubert afx_msg VOID OnUpdateUppercaseRealm(CCmdUI* pCmdUI); 294*7f2fe78bSCy Schubert afx_msg VOID OnUpdateKillTixOnExit(CCmdUI* pCmdUI); 295*7f2fe78bSCy Schubert afx_msg VOID OnUpdateLowTicketAlarm(CCmdUI* pCmdUI); 296*7f2fe78bSCy Schubert afx_msg VOID OnUpdateAutoRenew(CCmdUI* pCmdUI); 297*7f2fe78bSCy Schubert afx_msg VOID OnUpdateMakeDefault(CCmdUI* pCmdUI); 298*7f2fe78bSCy Schubert afx_msg VOID OnAppAbout(); 299*7f2fe78bSCy Schubert afx_msg VOID OnUpdateDebugMode(CCmdUI* pCmdUI); 300*7f2fe78bSCy Schubert afx_msg VOID OnUpdateCfgFiles(CCmdUI* pCmdUI); 301*7f2fe78bSCy Schubert afx_msg VOID OnKrb5Properties(); 302*7f2fe78bSCy Schubert afx_msg void OnLeashProperties(); 303*7f2fe78bSCy Schubert afx_msg void OnLeashRestore(); 304*7f2fe78bSCy Schubert afx_msg void OnLeashMinimize(); 305*7f2fe78bSCy Schubert afx_msg void OnLowTicketAlarm(); 306*7f2fe78bSCy Schubert afx_msg void OnUpdateKrb5Properties(CCmdUI* pCmdUI); 307*7f2fe78bSCy Schubert afx_msg void OnKrbProperties(); 308*7f2fe78bSCy Schubert afx_msg void OnUpdateProperties(CCmdUI* pCmdUI); 309*7f2fe78bSCy Schubert afx_msg void OnHelpKerberos(); 310*7f2fe78bSCy Schubert afx_msg void OnHelpLeash32(); 311*7f2fe78bSCy Schubert afx_msg void OnHelpWhyuseleash32(); 312*7f2fe78bSCy Schubert afx_msg void OnSysColorChange(); 313*7f2fe78bSCy Schubert afx_msg void OnAutoRenew(); 314*7f2fe78bSCy Schubert afx_msg LRESULT OnGoodbye(WPARAM wParam, LPARAM lParam); 315*7f2fe78bSCy Schubert afx_msg LRESULT OnTrayIcon(WPARAM wParam, LPARAM lParam); 316*7f2fe78bSCy Schubert afx_msg LRESULT OnObtainTGTWithParam(WPARAM wParam, LPARAM lParam); 317*7f2fe78bSCy Schubert afx_msg void OnItemChanged(NMHDR* pNmHdr, LRESULT* pResult); 318*7f2fe78bSCy Schubert //}}AFX_MSG 319*7f2fe78bSCy Schubert DECLARE_MESSAGE_MAP() 320*7f2fe78bSCy Schubert public: 321*7f2fe78bSCy Schubert afx_msg void OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult); 322*7f2fe78bSCy Schubert afx_msg void OnLvnItemActivate(NMHDR *pNMHDR, LRESULT *pResult); 323*7f2fe78bSCy Schubert afx_msg void OnLvnKeydown(NMHDR *pNMHDR, LRESULT *pResult); 324*7f2fe78bSCy Schubert afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult); 325*7f2fe78bSCy Schubert }; 326*7f2fe78bSCy Schubert 327*7f2fe78bSCy Schubert /* 328*7f2fe78bSCy Schubert #ifndef _DEBUG // debug version in CLeashView.cpp 329*7f2fe78bSCy Schubert inline LeashDoc* CLeashView::GetDocument() 330*7f2fe78bSCy Schubert { return (LeashDoc*)m_pDocument; } 331*7f2fe78bSCy Schubert #endif 332*7f2fe78bSCy Schubert */ 333*7f2fe78bSCy Schubert 334*7f2fe78bSCy Schubert ///////////////////////////////////////////////////////////////////////////// 335*7f2fe78bSCy Schubert 336*7f2fe78bSCy Schubert //{{AFX_INSERT_LOCATION}} 337*7f2fe78bSCy Schubert // Microsoft Developer Studio will insert additional declarations immediately before the previous line. 338*7f2fe78bSCy Schubert 339*7f2fe78bSCy Schubert #endif // !defined(AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_) 340