XTPSyntaxEditAutoCompleteWnd.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:14k
源码类别:
对话框与窗口
开发平台:
Visual C++
- // XTPSyntaxEditAutoCompleteWnd.h: interface for the CXTPSyntaxEditAutoCompleteWnd class.
- //
- // This file is a part of the XTREME TOOLKIT PRO MFC class library.
- // (c)1998-2008 Codejock Software, All Rights Reserved.
- //
- // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
- // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
- // CONSENT OF CODEJOCK SOFTWARE.
- //
- // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
- // IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
- // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
- // SINGLE COMPUTER.
- //
- // CONTACT INFORMATION:
- // support@codejock.com
- // http://www.codejock.com
- //
- //////////////////////////////////////////////////////////////////////
- //{{AFX_CODEJOCK_PRIVATE
- #if !defined(__XTPSYNTAXEDITAUTOCOMPLETEWND_H__)
- #define __XTPSYNTAXEDITAUTOCOMPLETEWND_H__
- //}}AFX_CODEJOCK_PRIVATE
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- class CXTPSyntaxEditCtrl;
- //===========================================================================
- // Summary:
- // XTP_EDIT_ACDATA structure defines items displayed data. Provides text and
- // icon for each displayed line in Auto-complete window.
- //===========================================================================
- struct XTP_EDIT_ACDATA
- {
- int m_nIcon; // The icon ID.
- CString m_strText; // The item text.
- //-----------------------------------------------------------------------
- // Summary:
- // Default class constructor.
- // Parameters:
- // nIcon - The icon ID.
- // strText - The item text.
- //-----------------------------------------------------------------------
- XTP_EDIT_ACDATA(int nIcon, CString strText)
- {
- m_nIcon = nIcon;
- m_strText = strText;
- }
- };
- //===========================================================================
- // Summary:
- // CXTPSyntaxEditACDataArray type defines a custom array to store AutoComplete items
- // displayed data.
- // See Also:
- // PXTP_EDIT_ACDATA
- //===========================================================================
- typedef CArray<XTP_EDIT_ACDATA*, XTP_EDIT_ACDATA*> CXTPSyntaxEditACDataArray;
- //===========================================================================
- // Summary:
- // CXTPSyntaxEditACGrid type defines a custom array to store and manage visible
- // rectangle arrays that represented lines of data in AutoComplete window.
- //===========================================================================
- typedef CArray<CRect, CRect> CXTPSyntaxEditACGrid;
- //===========================================================================
- // Summary:
- // This class implements AutoComplete window. It provides facilities
- // to display predefined strings of data in the sorted order. Then
- // user can navigate over list of strings and choose desired text to
- // complete his input. AutoComplete window provides some ways to
- // navigate by using vertical scroll bar, up/down keys, mouse.
- // If user types alphanumeric keys after AutoComplete window was
- // appeared it uses user input as search criteria and tries to find
- // text from its predefined strings of data that are like user input.
- //===========================================================================
- class _XTP_EXT_CLASS CXTPSyntaxEditAutoCompleteWnd : public CWnd
- {
- //{{AFX_CODEJOCK_PRIVATE
- friend class CXTPSyntaxEditCtrl;
- //}}AFX_CODEJOCK_PRIVATE
- public:
- //-----------------------------------------------------------------------
- // Summary:
- // Default class constructor.
- //-----------------------------------------------------------------------
- CXTPSyntaxEditAutoCompleteWnd();
- //-----------------------------------------------------------------------
- // Summary:
- // Destroys a CXTPSyntaxEditAutoCompleteWnd object, handles cleanup
- // and de-allocation.
- //-----------------------------------------------------------------------
- virtual ~CXTPSyntaxEditAutoCompleteWnd();
- //-----------------------------------------------------------------------
- // Summary:
- // Creates AutoComplete window and sets predefined properties.
- // Parameters:
- // pParentWnd: [in] Pointer to the parent window.
- // Remarks:
- // Before create Auto-complete window you should construct
- // CXTPSyntaxEditAutoCompleteWnd object by calling constrictor.
- // Returns:
- // TRUE if success; FALSE otherwise.
- //-----------------------------------------------------------------------
- virtual BOOL Create(CWnd* pParentWnd);
- //-----------------------------------------------------------------------
- // Summary:
- // Sets list of data to be displayed in AutoComplete window.
- // Parameters:
- // parrData: [in] reference to array of data.
- // Remarks:
- // AutoComplete window displays list of data for user choice.If
- // AutoComplete window has already had a list of displayed data it will
- // be replaced by new one. Before add to the AutoComplete window new
- // data is sorted.
- // See Also:
- // CXTPSyntaxEditACDataArray
- //-----------------------------------------------------------------------
- virtual void SetList(CXTPSyntaxEditACDataArray& parrData);
- //-----------------------------------------------------------------------
- // Summary:
- // Sets list of open tags for AutoComplete window.
- // Parameters:
- // strOpenTags: [in] string with new open tags.
- // Remarks:
- // Open Tags are treated by AutoComplete window as command to be
- // displayed and activated. Each tag may consists of one or more symbols.
- // Tags must be separated by "~" sign. If AutoComplete window has
- // already had a list of tags it will be replaced by new one.
- //-----------------------------------------------------------------------
- virtual void SetOpenTags(CString strOpenTags);
- //-----------------------------------------------------------------------
- // Summary:
- // Determines if user input is open tag.
- // Parameters:
- // strToTest: [in] string to test.
- // Remarks:
- // Call this function to determine if user enters open tag.
- // Function uses incremental search and temporary stores input
- // that resembles initial part of open tags that consist of
- // number of symbols.
- // Returns:
- // TRUE if open tag detected; FALSE otherwise.
- //-----------------------------------------------------------------------
- BOOL IsOpenTag(CString strToTest);
- //-----------------------------------------------------------------------
- // Summary:
- // Sets list of close tags for AutoComplete window.
- // Parameters:
- // strCloseTags: [in] string with new close tags.
- // Remarks:
- // Close Tags are treated by AutoComplete window as command to be
- // hidden and deactivated. Each tag may consists of one or more symbols.
- // Tags must be separated by "~" sign. If AutoComplete window has
- // already had a list of tags it will be replaced by new one.
- //-----------------------------------------------------------------------
- virtual void SetCloseTags(CString strCloseTags);
- //-----------------------------------------------------------------------
- // Summary:
- // Determines if user input is Close tag.
- // Parameters:
- // strToTest: [in] String to test.
- // Remarks:
- // Call this function to determine if user enters close tag.
- // Function uses incremental search and temporary stores input that
- // resembles initial part of close tags that consist of number of
- // symbols.
- // Returns:
- // TRUE if close tag detected; FALSE otherwise.
- //-----------------------------------------------------------------------
- BOOL IsCloseTag(CString strToTest);
- //-----------------------------------------------------------------------
- // Summary:
- // Shows AutoComplete window.
- // Parameters:
- // pt: [in] Point where left upper corner of AutoComplete
- // window should appears.
- // strSearch: [in] Search string.
- // Remarks:
- // Shows AutoComplete window at specified point and try to filter
- // dataset by previously typed piece of word and highlighted line
- // according search string.
- //-----------------------------------------------------------------------
- virtual void Show(CPoint pt, CString strSearch = _T(""));
- //-----------------------------------------------------------------------
- // Summary:
- // Hides AutoComplete window.
- //-----------------------------------------------------------------------
- virtual void Hide();
- //-----------------------------------------------------------------------
- // Summary:
- // Returns active flag for AutoComplete window.
- // Returns:
- // TRUE if window is visible and active; FALSE otherwise.
- //-----------------------------------------------------------------------
- BOOL IsActive();
- //-----------------------------------------------------------------------
- // Summary:
- // Updates display settings from system settings.
- //-----------------------------------------------------------------------
- virtual void RefreshMetrics();
- // Summary:
- // This member function registers the window class if it has not
- // already been registered.
- // Parameters:
- // hInstance - Instance of resource where control is located
- // Returns:
- // A boolean value that specifies if the window is successfully
- // registered.<p/>
- // TRUE if the window class is successfully registered.<p/>
- // Otherwise FALSE.
- // -----------------------------------------------------------------
- virtual BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
- //-----------------------------------------------------------------------
- // Summary:
- // This member function is used to obtain width of the auto-complete window.
- // Returns:
- // A window width in pixels.
- //-----------------------------------------------------------------------
- int GetWndWidth() const;
- //-----------------------------------------------------------------------
- // Summary:
- // This member function is used to set width of the auto-complete window.
- // Parameters:
- // nWidth - A window width in pixels.
- //-----------------------------------------------------------------------
- void SetWndWidth(int nWidth);
- protected:
- //-----------------------------------------------------------------------
- // Summary:
- // Returns text line where user click mouse.
- // Parameters:
- // ptTest: [in] tested point.
- // Returns:
- // Integer identifier of affected text line.
- //-----------------------------------------------------------------------
- int HitTest(CPoint ptTest);
- //{{AFX_CODEJOCK_PRIVATE
- // message handlers
- void OnLButtonDown(UINT nFlags, CPoint point);
- void OnRButtonDown(UINT nFlags, CPoint point);
- void OnLButtonDblClk( UINT nFlags, CPoint point );
- BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
- void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
- void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );
- void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
- void OnPaint();
- BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
- DECLARE_MESSAGE_MAP()
- //}}AFX_CODEJOCK_PRIVATE
- protected:
- CString m_strSearch; // Temporary stores chain of chars from user input to perform
- // incremental search
- CString m_strCloseTags; // Stores set of closed tags divided by ~
- // input closed tags lead to close AutoComplete window
- CString m_strTmpCloseTag;// Temporary stores chain of chars from user input to
- // recognize close tags
- CString m_strOpenTags; // Stores open tags
- CString m_strTmpOpenTag;// Temporary stores chain of chars from user input to
- // recognize Open tags
- CXTPSyntaxEditCtrl* m_pParentWnd; // Pointer to the parent window
- CFont m_fontBasic; // Font to display text
- COLORREF m_clrWindow; // Standard window color
- COLORREF m_clrHighLight; // Standard window highlight color
- COLORREF m_clrWindowText; // Standard windows text color
- COLORREF m_clrHighLightText;// Standard windows highlight text color
- CXTPSyntaxEditACDataArray m_arrACData;// Stores list of choices (line of text and image)
- CXTPSyntaxEditACDataArray m_arrACDataFiltered; // Stores filtered list of choices (line of text and image)
- CXTPSyntaxEditACGrid m_arrGrid; // Stores list of rectangle areas where were
- // displayed textimage strings from m_arrACData
- int m_nBordersHeight; // Stores summary thickness of vertical window borders
- int m_nLineHeight; // Stores height of line
- int m_nLines; // Number of visible lines
- int m_nWndHeight; // Height of window
- int m_nWndWidth; // Width of window
- int m_nHighLightLine; // Current highlight line identifier
- int m_nFirstDisplayedStr; // Current first visible (upper) line
- BOOL m_bFixedBottom; // Store autocomplete window position: above or below at the cursor.
- BOOL m_bActive; // Active flag
- BOOL m_bFilteredMode; // Flag to identify is current mode (filtered/full);
- BOOL m_bHighLight; // This flag determines if selected string is highlighted.
- int m_nStartReplacePos; // Position of first char in the Edit Control which will be replaced
- // by the chosen text
- int m_nEndReplacePos; // Position of last char in the Edit Control which will be replaced
- // by the chosen text
- CImageList m_ilACGlyphs; // Images for AutoComplete list
- CString m_strDelims; // stores char list that are tag delimiters
- private:
- BOOL AdjusLayout(int nHeightMax = 0);
- void _AdjustWndRect(CRect& rrcWndRect);
- void RemoveAll();
- BOOL ScrollTo(int nNewLine);
- void UpdateFilteredList();
- void ReturnSelected(BOOL bAdjust = FALSE);
- void Sort();
- static int _cdecl CompareACData(const XTP_EDIT_ACDATA** p1, const XTP_EDIT_ACDATA** p2);
- int Search(CString strSearch = _T(""));
- int Filter(CString strSearch = _T(""));
- static int _cdecl CompareACDataToSearch(const XTP_EDIT_ACDATA** ppKey, const XTP_EDIT_ACDATA** ppElem);
- };
- /////////////////////////////////////////////////////////////////////////////
- AFX_INLINE int CXTPSyntaxEditAutoCompleteWnd::GetWndWidth() const {
- return m_nWndWidth;
- }
- #endif // !defined(__XTPSYNTAXEDITAUTOCOMPLETEWND_H__)