//----------------------------------------------------------------------------- // File: cdeviceview.h // // Desc: CDeviceView is a window class derived from CFlexWnd. It represents // the device view window in which the device and callouts are drawn. // Each CDeviceView only represents one view. A device that has more // than one view should have a corresponding number of CDeviceView for it. // // Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved. //----------------------------------------------------------------------------- #ifdef FORWARD_DECLS enum DVIMAGE; class CDeviceView; #define DEFAULTVIEWSBWIDTH 11 #else // FORWARD_DECLS #ifndef __CDEVICEVIEW_H__ #define __CDEVICEVIEW_H__ enum DVIMAGE { DVI_IMAGE, DVI_THUMB, DVI_SELTHUMB }; class CDeviceView : public CFlexWnd { private: friend class CDeviceUI; // CDeviceUI has exclusive right to create/destroy views friend class CDIDeviceActionConfigPage; CDeviceView(CDeviceUI &ui); ~CDeviceView(); CDeviceUI &m_ui; public: // Header information (for list view) BOOL CalculateHeaderRect(); // Compute rect used for headers. // control information int GetNumControls(); CDeviceControl *GetControl(int nControl); CDeviceControl *GetControlFromOfs(DWORD dwOfs) { return GetControl(GetIndexFromOfs(dwOfs)); } // text information int GetNumTexts(); CDeviceViewText *GetText(int nText); // text addition CDeviceViewText *NewText(); CDeviceViewText *AddText( HFONT, COLORREF, COLORREF, const RECT &, LPCTSTR text); CDeviceViewText *AddText( HFONT, COLORREF, COLORREF, const POINT &, LPCTSTR text); CDeviceViewText *AddWrappedLineOfText( HFONT, COLORREF, COLORREF, LPCTSTR text); void SetImage(CBitmap *&refpbm); void SetImagePath(LPCTSTR tszPath); // imaging CBitmap *GetImage(DVIMAGE dvi); // editing //@@BEGIN_MSINTERNAL #ifdef DDKBUILD void SelectImages(); void EditMenu(POINT point, CDeviceControl *pControl = NULL); #endif //@@END_MSINTERNAL void Remove(CDeviceControl *pControl); void RemoveAll(BOOL bUser = TRUE); BOOL DoesCalloutOtherThanSpecifiedExistForOffset(CDeviceControl *, DWORD); BOOL DoesCalloutExistForOffset(DWORD); BOOL IsUnassignedOffsetAvailable(); int GetViewIndex(); int GetIndexFromOfs(DWORD dwOfs); // For writing to INI //@@BEGIN_MSINTERNAL #ifdef DDKBUILD BOOL InMoveOverlayStateForControl(CDeviceControl *pControl); #endif //@@END_MSINTERNAL void MakeMissingImages(); CDeviceControl *NewControl(); protected: virtual void OnPaint(HDC hDC); //@@BEGIN_MSINTERNAL #ifdef DDKBUILD virtual LRESULT OnCommand(WORD wNotifyCode, WORD wID, HWND hWnd); #endif //@@END_MSINTERNAL virtual void OnMouseOver(POINT point, WPARAM fwKeys); virtual void OnClick(POINT point, WPARAM fwKeys, BOOL bLeft); virtual void OnDoubleClick(POINT point, WPARAM fwKeys, BOOL bLeft); virtual void OnWheel(POINT point, WPARAM wParam); virtual LRESULT WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); private: // helpers void Unpopulate(BOOL bInternalOnly = FALSE); // images/visualization CBitmap *m_pbmImage, *m_pbmThumb, *m_pbmSelThumb; LPTSTR m_ptszImagePath; CBitmap *GrabViewImage(); //@@BEGIN_MSINTERNAL #ifdef DDKBUILD void ManualLoadImage(LPCTSTR tszPath); #endif //@@END_MSINTERNAL LPCTSTR GetImagePath() { return m_ptszImagePath; } // headers BOOL m_bControlHeaderClipped, m_bActionHeaderClipped; // Whether the header labels are clipped (flag for tooltip). RECT m_HeaderRectControl[2]; // 2 possible columns. Coord relative to parent's client space. RECT m_HeaderRectAction[2]; // 2 possible columns. Coord relative to parent's client space. // controls CArray m_arpControl; // text CArray m_arpText; POINT m_ptNextWLOText; // Special painting virtual void DoOnPaint(HDC hDC); BOOL m_bForcePaint; // This indicates that we need painting even if GetUpdateRect returns FALSE. // Sort assigned for keyboard devices void SwapControls(int i, int j); void SortAssigned(BOOL bSort); void SortCallouts(int iStart, int iEnd); // editting state machine int m_SuperState, m_State, m_SubState; int m_OldSuperState, m_OldState, m_OldSubState; CDeviceControl *m_pControlContext; //@@BEGIN_MSINTERNAL #ifdef DDKBUILD BOOL InEditState(); void SetEditState(UINT cmd); void StateEvent(POINT point, BOOL bClick, BOOL bLeft, WPARAM nKeyState); void EndState(); void IndicateState(BOOL bFirst = FALSE); void EndEditState(); void SaveOrExport(); BOOL WriteToINI(); HRESULT ExportCodeTo(LPCTSTR tszFile); #endif //@@END_MSINTERNAL // scrolling (vertical only) BOOL m_bScrollEnable; int m_nScrollOffset; int m_nViewHeight; public: void EnableScrolling() {m_bScrollEnable = TRUE;} void ScrollToMakeControlVisible(const RECT &rc); void CalcDimensions(); private: void DisableScrollBar(); void EnableScrollBar(); CFlexScrollBar m_sb; }; #endif //__CDEVICEVIEW_H__ #endif // FORWARD_DECLS