XTPControlComboBox.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:55k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPControlComboBox.h : interface for the CXTPControlComboBox class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPCONTOLCOMBOBOX_H__)
  22. #define __XTPCONTOLCOMBOBOX_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPControl.h"
  28. #include "XTPControlPopup.h"
  29. #include "XTPPopupBar.h"
  30. //{{AFX_CODEJOCK_PRIVATE
  31. #ifndef SHACF_DEFAULT
  32. #define SHACF_FILESYSTEM                0x00000001  // This includes the File System as well as the rest of the shell (DesktopMy ComputerControl Panel)
  33. #define SHACF_URLALL                    (SHACF_URLHISTORY | SHACF_URLMRU)  // Include the URL's in the users History and Recently Used lists. Equivalent to SHACF_URLHISTORY | SHACF_URLMRU.
  34. #define SHACF_URLHISTORY                0x00000002  // URLs in the User's History
  35. #define SHACF_URLMRU                    0x00000004  // URLs in the User's Recently Used list.
  36. #define SHACF_FILESYS_ONLY              0x00000010  // Include only the file system. Do not include virtual folders such as Desktop or Control Panel.
  37. #define SHACF_USETAB                    0x00000008  // Use the tab to move thru the autocomplete possibilities instead of to the next dialog/window control.
  38. #endif
  39. //}}AFX_CODEJOCK_PRIVATE
  40. class CXTPControlComboBox;
  41. class CXTPControlComboBoxAutoCompleteWnd;
  42. //===========================================================================
  43. // Summary:
  44. //     CXTPEdit is a CEdit derived class. It is for internal usage only.
  45. //===========================================================================
  46. class _XTP_EXT_CLASS CXTPEdit : public CEdit
  47. {
  48. private:
  49. class _XTP_EXT_CLASS CRichEditContext
  50. {
  51. public:
  52. CRichEditContext();
  53. ~CRichEditContext();
  54. public:
  55. HINSTANCE m_hInstance;
  56. CString m_strClassName;
  57. BOOL m_bRichEdit2;
  58. };
  59. DECLARE_DYNCREATE(CXTPEdit)
  60. public:
  61. //-----------------------------------------------------------------------
  62. // Summary:
  63. //     Constructs a CXTPEdit object
  64. //-----------------------------------------------------------------------
  65. CXTPEdit();
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Called by the framework to route and dispatch command messages
  69. //     and to handle the update of command user-interface objects.
  70. // Parameters:
  71. //     nID          - Contains the command ID.
  72. //     nCode        - Identifies the command notification code.
  73. //     pExtra       - Used according to the value of nCode.
  74. //     pHandlerInfo - If not NULL, OnCmdMsg fills in the pTarget and
  75. //                    pmf members of the pHandlerInfo structure instead
  76. //                    of dispatching the command. Typically, this parameter
  77. //                    should be NULL.
  78. // Returns:
  79. //     Nonzero if the message is handled; otherwise 0.
  80. //-----------------------------------------------------------------------
  81. virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
  82. //-----------------------------------------------------------------------
  83. // Summary:
  84. //     The framework calls this member function when the user selects
  85. //     an item from a menu, when a child control sends a notification
  86. //     message, or when an accelerator keystroke is translated.
  87. // Parameters:
  88. //     wParam - The low-order word of wParam identifies the command
  89. //              ID of the menu item, control, or accelerator. The
  90. //              high-order word of wParam specifies the notification
  91. //              message if the message is from a control. If the message
  92. //              is from an accelerator, the high-order word is 1. If
  93. //              the message is from a menu, the high-order word is 0.
  94. //     lParam   - Specifies additional message-dependent information.
  95. // Returns:
  96. //     An application returns nonzero if it processes this message;
  97. //     otherwise 0.
  98. //-----------------------------------------------------------------------
  99. virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //     This member function displays a popup context menu.
  103. // Parameters:
  104. //     pControl - Pointer to a CXTPControl control.
  105. //     point - CPoint object specifies xy coordinates.
  106. // Returns:
  107. //     TRUE if successful; otherwise returns FALSE.
  108. //-----------------------------------------------------------------------
  109. virtual BOOL ShowContextMenu(CXTPControl* pControl, CPoint point);
  110. //-----------------------------------------------------------------------
  111. // Summary:
  112. //     This member function displays a popup context menu.
  113. // Parameters:
  114. //     dwStyle - Specifies object's style flags.
  115. //     pParentWnd - Pointer to the parent window.
  116. // Returns:
  117. //     TRUE if successful; otherwise returns FALSE.
  118. //-----------------------------------------------------------------------
  119. virtual BOOL CreateEdit(DWORD dwStyle, CWnd* pParentWnd);
  120. //-----------------------------------------------------------------------
  121. // Summary:
  122. //     This method determines whether the specified character is intended for a edit. If it is, this method processes the message.
  123. // Parameters:
  124. //     nChar - Specifies the virtual key code of the given key.
  125. //     lParam   - Specifies additional message-dependent information.
  126. // Returns:
  127. //     TRUE if successful; otherwise returns FALSE.
  128. //-----------------------------------------------------------------------
  129. BOOL IsDialogCode(UINT nChar, LPARAM lParam);
  130. //-----------------------------------------------------------------------
  131. // Summary:
  132. //     Returns window text of edit
  133. // Parameters:
  134. //     rString - String to return text
  135. //-----------------------------------------------------------------------
  136. void GetWindowTextEx(CString& rString);
  137. void SetWindowTextEx(LPCTSTR lpszString);
  138. protected:
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     Call this method to get rich edit version information.
  142. //-----------------------------------------------------------------------
  143. CRichEditContext& GetRichEditContext();
  144. protected:
  145. //-----------------------------------------------------------------------
  146. // Summary:
  147. //     Determines if edit command is enable,
  148. // Parameters:
  149. //     nID - Edit command
  150. // Returns:
  151. //     TRUE if edit command is enabled for control
  152. //-----------------------------------------------------------------------
  153. BOOL IsCommandEnabled(UINT nID);
  154. //{{AFX_CODEJOCK_PRIVATE
  155. DECLARE_MESSAGE_MAP()
  156. //{{AFX_MSG(CXTPEdit)
  157. afx_msg void OnImeStartComposition();
  158. afx_msg void OnImeEndComposition();
  159. afx_msg void OnKillFocus(CWnd* pNewWnd);
  160. afx_msg void OnPaint();
  161. //}}AFX_MSG
  162. //}}AFX_CODEJOCK_PRIVATE
  163. protected:
  164. BOOL m_bImeMode;            // TRUE if IME editor currently enabled.
  165. BOOL m_bComposited;         // TRUE if control is AERO composited.
  166. BOOL m_bIgonoreEditChanged;
  167. };
  168. //{{AFX_CODEJOCK_PRIVATE
  169. // CXTPControlComboBoxAutoCompleteWnd implementation.
  170. // used internally in CXTPControlComboBox and CXTPControlEdit controls
  171. class _XTP_EXT_CLASS CXTPControlComboBoxAutoCompleteWnd : public CXTPHookManagerHookAble
  172. {
  173. public:
  174. CXTPControlComboBoxAutoCompleteWnd();
  175. ~CXTPControlComboBoxAutoCompleteWnd();
  176. public:
  177. HRESULT ShellAutoComplete(HWND hEdit, DWORD dwFlags);
  178. void CloseWindow();
  179. void SetupMessageHook(BOOL bSetup);
  180. BOOL IsDialogCode(UINT nChar, LPARAM lParam);
  181. private:
  182. static CXTPControlComboBoxAutoCompleteWnd* m_pWndMonitor;
  183. static LRESULT CALLBACK CallWndProc(int code, WPARAM wParam, LPARAM lParam);
  184. virtual int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  185. void SetAutoCompeteHandle(HWND);
  186. public:
  187. HWND m_hWndAutoComplete;
  188. private:
  189. static HHOOK m_hHookMessage;
  190. HWND m_hWndEdit;
  191. };
  192. //}}AFX_CODEJOCK_PRIVATE
  193. ///===========================================================================
  194. // Summary:
  195. //     CXTPControlComboBoxPopupBar is a CXTPPopupBar derived class.
  196. //     It represents base class for combo popups.
  197. //===========================================================================
  198. class _XTP_EXT_CLASS CXTPControlComboBoxPopupBar : public CXTPPopupBar
  199. {
  200. DECLARE_XTP_COMMANDBAR(CXTPControlComboBoxPopupBar)
  201. public:
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     Constructs a CXTPControlComboBoxPopupBar object
  205. //-----------------------------------------------------------------------
  206. CXTPControlComboBoxPopupBar();
  207. public:
  208. //{{AFX_CODEJOCK_PRIVATE
  209. //{{AFX_VIRUAL(CXTPControlComboBoxPopupBar)
  210. virtual int GetCurSel() const {
  211. return LB_ERR;
  212. }
  213. virtual int FindString(int /*nStartAfter*/, LPCTSTR /*lpszItem*/) const{
  214. return LB_ERR;
  215. }
  216. virtual int FindStringExact(int /*nIndexStart*/, LPCTSTR /*lpsz*/) const {
  217. return LB_ERR;
  218. }
  219. virtual int SetTopIndex(int /*nIndex*/) {
  220. return LB_ERR;
  221. }
  222. virtual void SetCurSel(int /*nIndex*/) {
  223. }
  224. virtual void GetText(int /*nIndex*/, CString& /*rString*/) const {
  225. }
  226. virtual BOOL ProcessHookKeyDown(CXTPControlComboBox* pComboBox, UINT nChar, LPARAM lParam);
  227. BOOL OnHookKeyDown(UINT nChar, LPARAM lParam);
  228. //}}AFX_VIRUAL
  229. //}}AFX_CODEJOCK_PRIVATE
  230. };
  231. //===========================================================================
  232. // Summary:
  233. //     CXTPControlComboBoxList is a CXTPControlComboBoxPopupBar derived class.
  234. //     It represents a list box of CXTPControlComboBox control.
  235. //===========================================================================
  236. class _XTP_EXT_CLASS CXTPControlComboBoxList : public CXTPControlComboBoxPopupBar
  237. {
  238. public:
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Constructs a CXTPControlButton object
  242. //-----------------------------------------------------------------------
  243. CXTPControlComboBoxList();
  244. public:
  245. //-----------------------------------------------------------------------
  246. // Summary:
  247. //     Creates list box.
  248. //-----------------------------------------------------------------------
  249. virtual void CreateListBox();
  250. //-----------------------------------------------------------------------
  251. // Summary:
  252. //     Retrieves list box  window.
  253. //-----------------------------------------------------------------------
  254. CListBox* GetListBoxCtrl() const;
  255. protected:
  256. //-----------------------------------------------------------------------
  257. // Summary:
  258. //     This member function is called by WindowProc, or is called during
  259. //                message reflection.
  260. // Parameters:
  261. //     hWnd     - Window handle that the message belongs to.
  262. //     nMessage - Specifies the message to be sent.
  263. //     wParam   - Specifies additional message-dependent information.
  264. //     lParam   - Specifies additional message-dependent information.
  265. //     lResult  - The return value of WindowProc. Depends on the message;
  266. //                may be NULL.
  267. //-----------------------------------------------------------------------
  268. int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  269. //-----------------------------------------------------------------------
  270. // Summary:
  271. //     This method is called, then PopupBar becomes visible.
  272. // Parameters:
  273. //     pControlPopup - Points to a CXTPControlPopup object
  274. //     bSelectFirst  - TRUE to select the first item.
  275. // Returns:
  276. //     TRUE if successful; otherwise returns FALSE.
  277. //-----------------------------------------------------------------------
  278. virtual BOOL Popup(CXTPControlPopup* pControlPopup, BOOL bSelectFirst = FALSE);
  279. //-----------------------------------------------------------------------
  280. // Summary:
  281. //     Call this member to change the tracking state.
  282. // Parameters:
  283. //     bMode - TRUE to set the tracking mode; otherwise FALSE.
  284. //     bSelectFirst - TRUE to select the first item.
  285. //     bKeyboard    - TRUE if the item is popuped by the keyboard.
  286. // See Also: IsTrackingMode.
  287. // Returns:
  288. //     TRUE if the method was successful.
  289. //-----------------------------------------------------------------------
  290. virtual BOOL SetTrackingMode(int bMode, BOOL bSelectFirst, BOOL bKeyboard = FALSE);
  291. //-----------------------------------------------------------------------
  292. // Summary:
  293. //     This method is called to draw the command bar in the given context.
  294. // Parameters:
  295. //     pDC - Pointer to a valid device context.
  296. //     rcClipBox - The rectangular area of the control that is invalid
  297. //-----------------------------------------------------------------------
  298. virtual void DrawCommandBar(CDC* pDC, CRect rcClipBox);
  299. //-----------------------------------------------------------------------
  300. // Summary:
  301. //     The framework calls this member function when a non-system key
  302. //     is pressed.
  303. // Parameters:
  304. //     nChar - Specifies the virtual key code of the given key.
  305. //     lParam   - Specifies additional message-dependent information.
  306. // Returns:
  307. //     TRUE if key handled, otherwise returns FALSE
  308. //-----------------------------------------------------------------------
  309. virtual BOOL OnHookKeyDown(UINT nChar, LPARAM lParam);
  310. //-----------------------------------------------------------------------
  311. // Summary:
  312. //     Call this member to retrieve the customize mode of the command
  313. //     bars.
  314. // Returns:
  315. //     TRUE if command bars are in customized mode; otherwise returns
  316. //     FALSE.
  317. //-----------------------------------------------------------------------
  318. virtual BOOL IsCustomizable() const { return FALSE; }
  319. //-----------------------------------------------------------------------
  320. // Summary:
  321. //     Reads or writes this object from or to an archive.
  322. // Parameters:
  323. //     pPX - A CXTPPropExchange object to serialize to or from.
  324. //----------------------------------------------------------------------
  325. virtual void DoPropExchange(CXTPPropExchange* pPX);
  326. //-----------------------------------------------------------------------
  327. // Summary:
  328. //     This method makes a copy of the command bar.
  329. // Parameters:
  330. //     pCommandBar - Command bar needed to be copied.
  331. //     bRecursive - TRUE to copy recursively.
  332. //-----------------------------------------------------------------------
  333. virtual void Copy(CXTPCommandBar* pCommandBar, BOOL bRecursive = FALSE);
  334. protected:
  335. //{{AFX_CODEJOCK_PRIVATE
  336. //{{AFX_VIRUAL(CXTPControlComboBoxList)
  337. virtual int GetCurSel() const {
  338. return GetListBoxCtrl()->GetCurSel();
  339. }
  340. virtual int FindString(int nStartAfter, LPCTSTR lpszItem) const {
  341. return GetListBoxCtrl()->FindString(nStartAfter, lpszItem);
  342. }
  343. virtual int FindStringExact(int nIndexStart, LPCTSTR lpsz) const {
  344. return GetListBoxCtrl()->FindStringExact(nIndexStart, lpsz);
  345. }
  346. virtual int SetTopIndex(int nIndex) {
  347. return GetListBoxCtrl()->SetTopIndex(nIndex);
  348. }
  349. virtual void SetCurSel(int nIndex) {
  350. GetListBoxCtrl()->SetCurSel(nIndex);
  351. }
  352. virtual void GetText(int nIndex, CString& rString) const {
  353. GetListBoxCtrl()->GetText(nIndex, rString);
  354. }
  355. //}}AFX_VIRUAL
  356. //}}AFX_CODEJOCK_PRIVATE
  357. protected:
  358. //{{AFX_CODEJOCK_PRIVATE
  359. DECLARE_MESSAGE_MAP()
  360. //{{AFX_MSG(CXTPControlComboBoxList)
  361. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  362. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  363. afx_msg void OnNcPaint();
  364. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  365. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  366. //}}AFX_MSG
  367. //}}AFX_CODEJOCK_PRIVATE
  368. //-----------------------------------------------------------------------
  369. // Summary:
  370. //     This method is called to process key down event
  371. // Parameters:
  372. //     pComboBox - Owner combo box pointer
  373. //     nChar - Specifies the virtual key code of the given key.
  374. //     lParam - keystroke-message information
  375. // Returns:
  376. //     TRUE if message was processed.
  377. //-----------------------------------------------------------------------
  378. BOOL ProcessHookKeyDown(CXTPControlComboBox* pComboBox, UINT nChar, LPARAM lParam);
  379. virtual void DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct);
  380. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  381. private:
  382. DECLARE_XTP_COMMANDBAR(CXTPControlComboBoxList)
  383. friend class CXTPControlComboBox;
  384. int m_nListIconId;          // Icon identifier
  385. };
  386. //////////////////////////////////////////////////////////////////////////
  387. //===========================================================================
  388. // Summary:
  389. //     Inplace Edit control of the combo.
  390. //===========================================================================
  391. class _XTP_EXT_CLASS CXTPControlComboBoxEditCtrl : public CXTPEdit
  392. {
  393. public:
  394. //-----------------------------------------------------------------------
  395. // Summary:
  396. //     Retrieves parent CXTPControlComboBox object.
  397. // Returns:
  398. //     Pointer to parent CXTPControlComboBox.
  399. //-----------------------------------------------------------------------
  400. CXTPControlComboBox* GetControlComboBox() const;
  401. protected:
  402. //-------------------------------------------------------------------------
  403. // Summary:
  404. //     This method is called to refresh char format of edit control
  405. //-------------------------------------------------------------------------
  406. void UpdateCharFormat();
  407. //{{AFX_CODEJOCK_PRIVATE
  408. DECLARE_MESSAGE_MAP()
  409. BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  410. //{{AFX_MSG(CXTPControlComboBoxEditCtrl)
  411. afx_msg void OnSetFocus(CWnd* pOldWnd);
  412. afx_msg void OnKillFocus(CWnd* pNewWnd);
  413. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  414. afx_msg void OnDestroy();
  415. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  416. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  417. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  418. afx_msg void OnEditChanged();
  419. afx_msg LRESULT OnWindowFromPoint(WPARAM, LPARAM);
  420. afx_msg void OnShellAutoCompleteStart();
  421. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  422. //}}AFX_MSG
  423. //}}AFX_CODEJOCK_PRIVATE
  424. protected:
  425. CXTPControlComboBox* m_pControl;        // Parent Combo Box.
  426. private:
  427. friend class CXTPControlComboBox;
  428. };
  429. //-----------------------------------------------------------------------
  430. // Summary:
  431. //     CXTPControlComboBox is a CXTPControl derived class. It represents a combo box control.
  432. //-----------------------------------------------------------------------
  433. class _XTP_EXT_CLASS CXTPControlComboBox : public CXTPControlPopup
  434. {
  435. public:
  436. //-----------------------------------------------------------------------
  437. // Summary:
  438. //     Constructs a CXTPControlComboBox object
  439. // Parameters:
  440. //     pCommandBars - Pointer to parent CommandBars class.
  441. //-----------------------------------------------------------------------
  442. CXTPControlComboBox(CXTPCommandBars* pCommandBars = NULL);
  443. //-----------------------------------------------------------------------
  444. // Summary:
  445. //     Destroys a CXTPControlComboBox object, handles cleanup and deallocation
  446. //-----------------------------------------------------------------------
  447. virtual ~CXTPControlComboBox();
  448. public:
  449. //-----------------------------------------------------------------------
  450. // Summary:
  451. //     Call this member to get the style of edit control.
  452. // Returns:
  453. //     The style of the edit control.
  454. // See Also: SetEditStyle
  455. //-----------------------------------------------------------------------
  456. DWORD GetEditStyle() const;
  457. //-----------------------------------------------------------------------
  458. // Summary:
  459. //     Call this member to set the style of edit control
  460. // Parameters:
  461. //     dwStyle - The style to be set
  462. // See Also: GetEditStyle
  463. //-----------------------------------------------------------------------
  464. void SetEditStyle(DWORD dwStyle);
  465. //-----------------------------------------------------------------------
  466. // Summary:
  467. //     Call this member to insertdelete an edit box in the combo box
  468. //     when the control has focus.
  469. // Parameters:
  470. //     bSet - TRUE if the combo box has an edit control.
  471. // Remarks:
  472. //     If bSet is TRUE, when the combo box control is click an edit
  473. //     control is used to display the text and the user can edit or
  474. //     copy the text.
  475. // See Also: GetDropDownListStyle
  476. //-----------------------------------------------------------------------
  477. void SetDropDownListStyle(BOOL bSet = TRUE);
  478. //-----------------------------------------------------------------------
  479. // Summary:
  480. //     Call this member to determine if the combo box has an edit control.
  481. // Returns:
  482. //     TRUE is the combo box has an edit control, FALSE otherwise.
  483. // See Also: SetDropDownListStyle
  484. //-----------------------------------------------------------------------
  485. BOOL GetDropDownListStyle() const;
  486. //-----------------------------------------------------------------------
  487. // Summary:
  488. //     Call this member to set the width of the dropdown list.
  489. // Parameters:
  490. //     nWidth - The width of the dropdown list.
  491. //-----------------------------------------------------------------------
  492. void SetDropDownWidth(int nWidth);
  493. //-----------------------------------------------------------------------
  494. // Summary:
  495. //     Call this member to set the count of items in the dropdown list.
  496. // Parameters:
  497. //     nDropDownItemCount - The count of items in the dropdown list.
  498. //-----------------------------------------------------------------------
  499. void SetDropDownItemCount(int nDropDownItemCount);
  500. //-----------------------------------------------------------------------
  501. // Summary:
  502. //     Call this member to retrieve the dropdown list width.
  503. // Returns:
  504. //     Width of the dropdown list.
  505. //-----------------------------------------------------------------------
  506. int GetDropDownWidth() const;
  507. //-----------------------------------------------------------------------
  508. // Summary:
  509. //     Call this member function to add a string to a list box.
  510. // Parameters:
  511. //     lpsz - The string that is to be added.
  512. // Returns:
  513. //     The zero-based index of the string in the list box. The return value is LB_ERR
  514. //     if an error occurs.
  515. //-----------------------------------------------------------------------
  516. int AddString(LPCTSTR lpsz);
  517. //-----------------------------------------------------------------------
  518. // Summary:
  519. //     Call this member to retrieve the number of items in a list box.
  520. // Returns:
  521. //     The number of items in the list box, or LB_ERR if an error occurs.
  522. //-----------------------------------------------------------------------
  523. int GetCount() const;
  524. //-----------------------------------------------------------------------
  525. // Summary:
  526. //     Call this member to retrieve a string from the list box of a combo box control.
  527. // Parameters:
  528. //     nIndex - Contains the zero-based index of the list-box string to be copied.
  529. //     str - A reference to a CString.
  530. //-----------------------------------------------------------------------
  531. void GetLBText(int nIndex, CString& str) const;
  532. //-----------------------------------------------------------------------
  533. // Summary:
  534. //     Call this member to removes all items from the list box of a combo box control.
  535. //-----------------------------------------------------------------------
  536. void ResetContent();
  537. //-----------------------------------------------------------------------
  538. // Summary:
  539. //     Call the FindStringExact member function to find the first list-box string
  540. //     (in a combo box) that matches the string specified in str.
  541. // Parameters:
  542. //     nIndexStart - Specifies the zero-based index of the item before the first item
  543. //     to be searched.
  544. //     lpsz - The string to search for.
  545. // Returns:
  546. //     The zero-based index of the matching item, or CB_ERR if the search was
  547. //     unsuccessful.
  548. // See Also: FindString
  549. //-----------------------------------------------------------------------
  550. int FindStringExact(int nIndexStart, LPCTSTR lpsz) const;
  551. //-----------------------------------------------------------------------
  552. // Summary:
  553. //     Call this member function to insert a string into the list box of a combo box control
  554. // Parameters:
  555. //     nIndex - Contains the zero-based index to the position in the list box that will receive
  556. //     the string.
  557. //     lpsz - The string that is to be inserted.
  558. //-----------------------------------------------------------------------
  559. int InsertString(int nIndex, LPCTSTR lpsz);
  560. //-----------------------------------------------------------------------
  561. // Summary:
  562. //     Call this member to get the currently selected item's text
  563. // Returns:
  564. //     The text that is currently selected.
  565. //-----------------------------------------------------------------------
  566. virtual CString GetListBoxText() const;
  567. //-----------------------------------------------------------------------
  568. // Summary:
  569. //     Call this member to get the edit control of the combo box control.
  570. // Returns:
  571. //     A pointer to the CEdit control.
  572. //-----------------------------------------------------------------------
  573. CXTPControlComboBoxEditCtrl* GetEditCtrl() const;
  574. //-----------------------------------------------------------------------
  575. // Summary:
  576. //     Call this member to select a string in the list box of a combo box.
  577. // Parameters:
  578. //     nIndex - Specifies the zero-based index of the string to select.
  579. //-----------------------------------------------------------------------
  580. void SetCurSel(int nIndex);
  581. //-----------------------------------------------------------------------
  582. // Summary:
  583. //     Call this member function to determine which item in the combo box is selected.
  584. // Returns:
  585. //     The zero-based index of the currently selected item in the list box of a combo box,
  586. //     or CB_ERR if no item is selected.
  587. //-----------------------------------------------------------------------
  588. int GetCurSel() const;
  589. //-----------------------------------------------------------------------
  590. // Summary:
  591. //     Call the GetDroppedState member function to determine whether the list box of a drop-down
  592. //     combo box is visible (dropped down).
  593. // Returns:
  594. //     Nonzero if the list box is visible; otherwise 0.
  595. //-----------------------------------------------------------------------
  596. BOOL GetDroppedState() const;
  597. //-----------------------------------------------------------------------
  598. // Summary:
  599. //     Call this member to get the edit text.
  600. // Returns:
  601. //     The Edit control text.
  602. //-----------------------------------------------------------------------
  603. CString GetEditText() const;
  604. //-----------------------------------------------------------------------
  605. // Summary:
  606. //     Call this member to modify style of list box
  607. // Parameters:
  608. //     dwRemove - Styles to remove.
  609. //     dwAdd - Styles to add.
  610. //-----------------------------------------------------------------------
  611. void ModifyListBoxStyle(DWORD dwRemove, DWORD dwAdd);
  612. //-----------------------------------------------------------------------
  613. // Summary:
  614. //     Call this member to set the edit control text.
  615. // Parameters:
  616. //     lpszText    - New text of the edit control.
  617. // See Also:
  618. //     FindStringExact, FindString
  619. //-----------------------------------------------------------------------
  620. void SetEditText(const CString& lpszText);
  621. //-----------------------------------------------------------------------
  622. // Summary:
  623. //     Call this member to set grayed-out text displayed in the edit control
  624. //     that displayed a helpful description of what the control is used for.
  625. // Parameters:
  626. //     lpszEditHint - Edit hint to be set
  627. // Example:
  628. //     <code>pCombo->SetEditHint(_T("Click to find a contact");</code>
  629. // See Also: GetEditHint
  630. //-----------------------------------------------------------------------
  631. void SetEditHint(LPCTSTR lpszEditHint);
  632. //-----------------------------------------------------------------------
  633. // Summary:
  634. //     Call this member to get grayed-out text displayed in the edit control
  635. //     that displayed a helpful description of what the control is used for.
  636. // Returns:
  637. //     Edit hint of the control
  638. // See Also: SetEditHint
  639. //-----------------------------------------------------------------------
  640. CString GetEditHint() const;
  641. //-----------------------------------------------------------------------
  642. // Summary:
  643. //     This method is called to get default char format of rich edit text
  644. //-----------------------------------------------------------------------
  645. virtual CHARFORMAT2 GetDefaultCharFormat();
  646. //-----------------------------------------------------------------------
  647. // Summary:
  648. //     This member function enables or disables shell auto completion.
  649. // Parameters:
  650. //     dwFlags - Flags that will be passed to SHAutoComplete function.
  651. // Remarks:
  652. //     Flags can be combined by using the bitwise
  653. //     OR (|) operator. It can be one or more of the following:
  654. //     * <b>SHACF_FILESYSTEM</b> This includes the File System as well as the rest of the shell (DesktopMy ComputerControl Panel)
  655. //     * <b>SHACF_URLALL</b>  Include the URL's in the users History and Recently Used lists. Equivalent to SHACF_URLHISTORY | SHACF_URLMRU.
  656. //     * <b>HACF_URLHISTORY</b> URLs in the User's History
  657. //     * <b>SHACF_URLMRU</b> URLs in the User's Recently Used list.
  658. //     * <b>SHACF_FILESYS_ONLY</b> Include only the file system. Do not include virtual folders such as Desktop or Control Panel.
  659. // ---------------------------------------------------------------------------
  660. void EnableShellAutoComplete(DWORD dwFlags = SHACF_FILESYSTEM | SHACF_URLALL);
  661. //-----------------------------------------------------------------------
  662. // Summary:
  663. //     This member function enables or disables auto completion.
  664. // Parameters:
  665. //     bAutoComplete - TRUE to enable auto completion, otherwise FALSE.
  666. //-----------------------------------------------------------------------
  667. void EnableAutoComplete(BOOL bAutoComplete = TRUE);
  668. //-----------------------------------------------------------------------
  669. // Summary:
  670. //     This method finds the first string in a list box that contains the specified prefix,
  671. //     without changing the list-box selection
  672. // Parameters:
  673. //     nStartAfter - Contains the zero-based index of the item before the first item to be
  674. //                   searched. When the search reaches the bottom of the list box, it continues from the
  675. //                   top of the list box back to the item specified by nStartAfter. If nStartAfter is -1,
  676. //                   the entire list box is searched from the beginning.
  677. //     lpszItem    - Points to the null-terminated string that contains the prefix to search for.
  678. //                   The search is case independent, so this string may contain any combination of uppercase
  679. //                   and lowercase letters.
  680. // Returns:
  681. //     The zero-based index of the matching item, or LB_ERR if the search was unsuccessful.
  682. // See Also: FindStringExact
  683. //-----------------------------------------------------------------------
  684. int FindString(int nStartAfter, LPCTSTR lpszItem) const;
  685. //-----------------------------------------------------------------------
  686. // Summary:
  687. //     This method retrieves the application-supplied 32-bit value associated with the
  688. //     specified combo box item.
  689. // Parameters:
  690. //     nIndex - Contains the zero-based index of an item in the combo box's list box.
  691. // Returns:
  692. //     The 32-bit value associated with the item, or CB_ERR if an error occurs.
  693. //-----------------------------------------------------------------------
  694. DWORD_PTR GetItemData(int nIndex) const;
  695. //-----------------------------------------------------------------------
  696. // Summary:
  697. //     This method sets the 32-bit value associated with the specified item in a combo box.
  698. // Parameters:
  699. //     nIndex     - Contains a zero-based index of the item to set.
  700. //     dwItemData - Contains the new value to associate with the item.
  701. // Returns:
  702. //     CB_ERR if an error occurs.
  703. //-----------------------------------------------------------------------
  704. int SetItemData(int nIndex, DWORD_PTR dwItemData);
  705. //-----------------------------------------------------------------------
  706. // Summary:
  707. //     Call this member function to delete a string.
  708. // Parameters:
  709. //     nIndex - Contains a zero-based index of the item to delete.
  710. //-----------------------------------------------------------------------
  711. void DeleteItem(long nIndex);
  712. //-----------------------------------------------------------------------
  713. // Summary:
  714. //     Call this member to enable or disable the control.
  715. //     If the control does not have flags xtpFlagManualUpdate, you must call
  716. //     the Enable member of CCmdUI in the ON_UPDATE_COMMAND_UI handler.
  717. // Parameters:
  718. //     bEnabled - TRUE if the control is enabled.
  719. // See Also: GetEnabled, SetChecked
  720. //-----------------------------------------------------------------------
  721. void SetEnabled(BOOL bEnabled);
  722. //-----------------------------------------------------------------------
  723. // Summary:
  724. //     Reads or writes this object from or to an archive.
  725. // Parameters:
  726. //     pPX - A CXTPPropExchange object to serialize to or from.
  727. //----------------------------------------------------------------------
  728. void DoPropExchange(CXTPPropExchange* pPX);
  729. //-----------------------------------------------------------------------
  730. // Summary:
  731. //     Call this member to compare controls.
  732. // Parameters:
  733. //     pOther - The control need compare with.
  734. // Returns:
  735. //     TRUE if the controls are identical.
  736. //-----------------------------------------------------------------------
  737. virtual BOOL Compare(CXTPControl* pOther);
  738. //-----------------------------------------------------------------------
  739. // Summary:
  740. //     Call this method to get with of label.
  741. // Returns:
  742. //     Width of label of edit control.
  743. // See Also: SetLabelWidth, SetStyle, GetStyle
  744. //-----------------------------------------------------------------------
  745. int GetLabelWidth() const;
  746. //-----------------------------------------------------------------------
  747. // Summary:
  748. //     This method is called to set width of the label.
  749. // Parameters:
  750. //     nLabelWidth - Width of label to be set
  751. // See Also: GetLabelWidth, SetStyle, GetStyle
  752. //-----------------------------------------------------------------------
  753. void SetLabelWidth(int nLabelWidth);
  754. //-----------------------------------------------------------------------
  755. // Summary:
  756. //     Call this member to determine if the caption of the control is visible
  757. // Returns:
  758. //     TRUE if the caption is visible.
  759. //-----------------------------------------------------------------------
  760. virtual BOOL IsCaptionVisible() const;
  761. //-----------------------------------------------------------------------
  762. // Summary:
  763. //     Determines if icon is visible for combo box control
  764. // Returns:
  765. //     TRUE if control has icon
  766. //-----------------------------------------------------------------------
  767. BOOL IsImageVisible() const;
  768. //-----------------------------------------------------------------------
  769. // Summary:
  770. //     Call this method to get with of thumb button.
  771. // Returns:
  772. //     Width of thumb button of combo box.
  773. // See Also: SetThumbWidth
  774. //-----------------------------------------------------------------------
  775. int GetThumbWidth() const;
  776. //-----------------------------------------------------------------------
  777. // Summary:
  778. //     This method is called to set width of thumb button.
  779. // Parameters:
  780. //     nThumbWidth - Width of the thumb button to be set.
  781. // See Also: GetThumbWidth
  782. //-----------------------------------------------------------------------
  783. void SetThumbWidth(int nThumbWidth);
  784. //-----------------------------------------------------------------------
  785. // Summary:
  786. //     Call this method to determine if control has focus
  787. //-----------------------------------------------------------------------
  788. BOOL HasFocus() const;
  789. //----------------------------------------------------------------------
  790. // Summary:
  791. //     This method draw text of control if style is CBS_DROPDOWNLIST
  792. // Parameters:
  793. //     pDC    - Pointer to a valid device context
  794. //     rcText - Rectangle to draw.
  795. //----------------------------------------------------------------------
  796. virtual void DrawEditText(CDC* pDC, CRect rcText);
  797. //-----------------------------------------------------------------------
  798. // Summary:
  799. //     Retrieves list box  window.
  800. //-----------------------------------------------------------------------
  801. CListBox* GetListBoxCtrl() const;
  802. //-----------------------------------------------------------------------
  803. // Summary:
  804. //     Returns child popup bar
  805. //-----------------------------------------------------------------------
  806. CXTPControlComboBoxPopupBar* GetComboBoxPopupBar() const;
  807. //-----------------------------------------------------------------------
  808. // Summary:
  809. //     Call this member to set the edit icon's identifier.
  810. // Parameters:
  811. //     nId - Icon's identifier to be set.
  812. //-----------------------------------------------------------------------
  813. void SetEditIconId(int nId);
  814. //-----------------------------------------------------------------------
  815. // Summary:
  816. //     Call this member to get the edit icon's identifier.
  817. //-----------------------------------------------------------------------
  818. int GetEditIconId() const;
  819. // Parameters:
  820. //     nId - Icon's identifier to be set.
  821. //-----------------------------------------------------------------------
  822. void SetListIconId(int nId);
  823. //-----------------------------------------------------------------------
  824. // Summary:
  825. //     Call this member to get the combo list icon's identifier.
  826. //-----------------------------------------------------------------------
  827. int GetListIconId() const;
  828. //{{AFX_CODEJOCK_PRIVATE
  829. // deprecated
  830. virtual CString GetText() const
  831. {
  832. return GetListBoxText();
  833. }
  834. //}}AFX_CODEJOCK_PRIVATE
  835. //-----------------------------------------------------------------------
  836. // Summary:
  837. //     Call this member to set focus to the control.
  838. // Parameters:
  839. //     bFocused - TRUE to set focus
  840. //-----------------------------------------------------------------------
  841. virtual void SetFocused(BOOL bFocused);
  842. //-----------------------------------------------------------------------
  843. // Summary:
  844. //     Call this member to get the focused state of the control.
  845. // Returns:
  846. //     TRUE if the control has focus; otherwise FALSE.
  847. //-----------------------------------------------------------------------
  848. virtual BOOL IsFocused() const;
  849. //-----------------------------------------------------------------------
  850. // Summary:
  851. //     This method is called then edit control text was changed
  852. //-----------------------------------------------------------------------
  853. virtual void OnEditChanged();
  854. //-----------------------------------------------------------------------
  855. // Summary:
  856. //     This method is called, then the selected string is changed.
  857. //-----------------------------------------------------------------------
  858. virtual void OnSelChanged();
  859. //-----------------------------------------------------------------------
  860. // Summary:
  861. //     This method is called when the control is executed.
  862. //-----------------------------------------------------------------------
  863. virtual void OnExecute();
  864. //-----------------------------------------------------------------------
  865. // Summary:
  866. //     This method is called to hide the control.
  867. // Parameters:
  868. //     dwFlags - Reasons to hide.
  869. // See Also: XTPControlHideFlags
  870. //-----------------------------------------------------------------------
  871. virtual void SetHideFlags(DWORD dwFlags);
  872. //-----------------------------------------------------------------------
  873. // Summary:
  874. //     This method is called when action property was changed
  875. // Parameters:
  876. //     nProperty - Property of the action
  877. // See Also: OnActionChanging
  878. //-----------------------------------------------------------------------
  879. virtual void OnActionChanged(int nProperty);
  880. //-----------------------------------------------------------------------
  881. // Summary:
  882. //     This method is called when action property is about to be changed
  883. // Parameters:
  884. //     nProperty - Property of the action
  885. // See Also: OnActionChanged
  886. //-----------------------------------------------------------------------
  887. virtual void OnActionChanging(int nProperty);
  888. protected:
  889. //----------------------------------------------------------------------
  890. // Summary:
  891. //     This method is called to check if control accept focus
  892. // See Also: SetFocused
  893. //----------------------------------------------------------------------
  894. virtual BOOL IsFocusable() const;
  895. //-----------------------------------------------------------------------
  896. // Summary:
  897. //     This method create edit control. Override it to use inherited edit control.
  898. //-----------------------------------------------------------------------
  899. virtual CXTPControlComboBoxEditCtrl* CreateEditControl();
  900. //-----------------------------------------------------------------------
  901. // Summary:
  902. //     Called after the mouse hovers over the control.
  903. //-----------------------------------------------------------------------
  904. void OnMouseHover();
  905. //-----------------------------------------------------------------------
  906. // Summary:
  907. //     This method is called, then edit control gets the focus.
  908. // Parameters:
  909. //     pOldWnd - Points to a CWnd object
  910. //-----------------------------------------------------------------------
  911. virtual void OnSetFocus(CWnd* pOldWnd);
  912. //-----------------------------------------------------------------------
  913. // Summary:
  914. //     This method is called, then the edit control loses the focus.
  915. //-----------------------------------------------------------------------
  916. virtual void OnKillFocus();
  917. //-----------------------------------------------------------------------
  918. // Summary:
  919. //     This method is called to get real rect of edit control of Combo Box
  920. // Parameters:
  921. //     rcControl - Rectangle of Combo Box area.
  922. //-----------------------------------------------------------------------
  923. virtual void DeflateEditRect(CRect& rcControl);
  924. //-----------------------------------------------------------------------
  925. // Summary:
  926. //     This method is called when the control becomes selected.
  927. // Parameters:
  928. //     bSelected - TRUE if the control becomes selected.
  929. // Returns:
  930. //     TRUE if successful; otherwise returns FALSE
  931. //-----------------------------------------------------------------------
  932. BOOL OnSetSelected(int bSelected);
  933. //-----------------------------------------------------------------------
  934. // Summary:
  935. //     Call this member to set the bounding rectangle of the control.
  936. // Parameters:
  937. //     rcControl - Bounding rectangle of the control.
  938. //-----------------------------------------------------------------------
  939. void SetRect(CRect rcControl);
  940. //-----------------------------------------------------------------------
  941. // Summary:
  942. //     This method is called when the user clicks the control.
  943. // Parameters:
  944. //     bKeyboard - TRUE if the control is selected using the keyboard.
  945. //     pt - Mouse cursor position.
  946. //-----------------------------------------------------------------------
  947. void OnClick(BOOL bKeyboard = FALSE, CPoint pt = CPoint(0, 0));
  948. //----------------------------------------------------------------------
  949. // Summary:
  950. //     This method is called when the user activate control using its underline.
  951. //----------------------------------------------------------------------
  952. virtual void OnUnderlineActivate();
  953. //-----------------------------------------------------------------------
  954. // Summary:
  955. //     This method is called to copy the control.
  956. // Parameters:
  957. //     pControl - Points to a source CXTPControl object
  958. //     bRecursive - TRUE to copy recursively.
  959. //-----------------------------------------------------------------------
  960. void Copy(CXTPControl* pControl, BOOL bRecursive = FALSE);
  961. //-----------------------------------------------------------------------
  962. // Summary:
  963. //     This method is called when a non-system key is pressed.
  964. // Parameters:
  965. //     nChar - Specifies the virtual key code of the given key.
  966. //     lParam   - Specifies additional message-dependent information.
  967. // Returns:
  968. //     TRUE if key handled, otherwise returns FALSE
  969. //-----------------------------------------------------------------------
  970. BOOL OnHookKeyDown(UINT nChar, LPARAM lParam);
  971. //-----------------------------------------------------------------------
  972. // Summary:
  973. //     This method is called to assign a parent command bar object.
  974. // Parameters:
  975. //     pParent - Points to a CXTPCommandBar object
  976. //-----------------------------------------------------------------------
  977. void SetParent(CXTPCommandBar* pParent);
  978. //-----------------------------------------------------------------------
  979. // Summary:
  980. //     This method is called before recalculating the parent command
  981. //     bar size to calculate the dimensions of the control.
  982. // Parameters:
  983. //     dwMode - Flags used to determine the height and width of the
  984. //              dynamic command bar. See Remarks section for a list of
  985. //              values.
  986. // Remarks:
  987. //     The following predefined flags are used to determine the height and
  988. //     width of the dynamic command bar. Use the bitwise-OR (|) operator to
  989. //     combine the flags.<p/>
  990. //
  991. //     * <b>LM_STRETCH</b> Indicates whether the command bar should be
  992. //                stretched to the size of the frame. Set if the bar is
  993. //                not a docking bar (not available for docking). Not set
  994. //                when the bar is docked or floating (available for
  995. //                docking). If set, LM_STRETCH returns dimensions based
  996. //                on the LM_HORZ state. LM_STRETCH works similarly to
  997. //                the the bStretch parameter used in CalcFixedLayout;
  998. //                see that member function for more information about
  999. //                the relationship between stretching and orientation.
  1000. //     * <b>LM_HORZ</b> Indicates that the bar is horizontally or
  1001. //                vertically oriented. Set if the bar is horizontally
  1002. //                oriented, and if it is vertically oriented, it is not
  1003. //                set. LM_HORZ works similarly to the the bHorz
  1004. //                parameter used in CalcFixedLayout; see that member
  1005. //                function for more information about the relationship
  1006. //                between stretching and orientation.
  1007. //     * <b>LM_MRUWIDTH</b> Most Recently Used Dynamic Width. Uses the
  1008. //                remembered most recently used width.
  1009. //     * <b>LM_HORZDOCK</b> Horizontal Docked Dimensions. Returns the
  1010. //                dynamic size with the largest width.
  1011. //     * <b>LM_VERTDOCK</b> Vertical Docked Dimensions. Returns the dynamic
  1012. //                size with the largest height.
  1013. //     * <b>LM_COMMIT</b> Resets LM_MRUWIDTH to current width of
  1014. //                floating command bar.
  1015. //
  1016. //     The framework calls this member function to calculate the dimensions
  1017. //     of a dynamic command bar.<p/>
  1018. //
  1019. //     Override this member function to provide your own layout in classes
  1020. //     you derive from CXTPControl. XTP classes derived from CXTPControl,
  1021. //     such as CXTPControlComboBox, override this member function to provide
  1022. //     their own implementation.
  1023. // See Also:
  1024. //     CXTPControl, CXTPControlCustom, CXTPControlEdit,
  1025. //     CXTPControlWindowList, CXTPControlWorkspaceActions, CXTPControlToolbars,
  1026. //     CXTPControlOleItems, CXTPControlRecentFileList, CXTPControlSelector,
  1027. //     CXTPControlListBox
  1028. //-----------------------------------------------------------------------
  1029. virtual void OnCalcDynamicSize(DWORD dwMode);
  1030. //-----------------------------------------------------------------------
  1031. // Summary:
  1032. //     This method is called to popup the control.
  1033. // Parameters:
  1034. //     bPopup - TRUE to set popup.
  1035. // Returns:
  1036. //     TRUE if successful; otherwise returns FALSE
  1037. //-----------------------------------------------------------------------
  1038. virtual BOOL OnSetPopup(BOOL bPopup);
  1039. //-----------------------------------------------------------------------
  1040. // Summary:
  1041. //     This member checks if the user can resize control.
  1042. // Returns:
  1043. //     TRUE if resize available.
  1044. //-----------------------------------------------------------------------
  1045. virtual BOOL IsCustomizeResizeAllow() const;
  1046. //-----------------------------------------------------------------------
  1047. // Summary:
  1048. //     This member returns the minimum width that the combo box
  1049. //     can be sized by the user while in customization mode.
  1050. // Returns:
  1051. //     Width of label + Width of Dropdown button + 5
  1052. //-----------------------------------------------------------------------
  1053. virtual int GetCustomizeMinWidth() const;
  1054. //-------------------------------------------------------------------------
  1055. // Summary:
  1056. //     This method is called when control was removed from parent controls collection
  1057. //-------------------------------------------------------------------------
  1058. virtual void OnRemoved();
  1059. //----------------------------------------------------------------------
  1060. // Summary:
  1061. //     This member is called when the mouse cursor moves.
  1062. // Parameters:
  1063. //     point - Specifies the x- and y-coordinate of the cursor.
  1064. //----------------------------------------------------------------------
  1065. virtual void OnMouseMove(CPoint point);
  1066. //{{AFX_CODEJOCK_PRIVATE
  1067. protected:
  1068. public:
  1069. void UpdatePopupSelection();
  1070. protected:
  1071. BOOL IsValidList() const;
  1072. void _SetEditText(const CString& lpszText);
  1073. CString _GetEditText() const;
  1074. virtual BOOL OnHookMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  1075. virtual void OnThemeChanged();
  1076. void ShowHideEditControl();
  1077. virtual void DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct);
  1078. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  1079. //}}AFX_CODEJOCK_PRIVATE
  1080. DECLARE_XTP_CONTROL(CXTPControlComboBox)
  1081. protected:
  1082. CXTPControlComboBoxEditCtrl* m_pEdit;   // Child edit control.
  1083. BOOL m_bDropDown;           // TRUE if the combo is dropdown.
  1084. XTPButtonStyle m_comboStyle; // Style of the combo box.
  1085. int m_nLastSel;             // Last user selected index, (used during display of list box)
  1086. CString m_strLastText;      // Last Text before user select focus and change it.
  1087. BOOL m_bDelayDestroy;       // TRUE if need to recreate control.
  1088. BOOL m_bDelayReposition;    // Need to reposition control.
  1089. int m_nLabelWidth;          // Width of the label.
  1090. int m_nThumbWidth;          // Width of the thumb area.
  1091. CString m_strEditHint;      // Grayed-out text displayed in the edit control that displayed a helpful description
  1092. BOOL m_bAutoComplete;       // TRUE if Auto Complete enabled
  1093. BOOL m_bIgnoreAutoComplete; // TRUE to disable auto complete till next key event.
  1094. DWORD m_dwShellAutoCompleteFlags;    // Shell auto complete flags.
  1095. BOOL m_bFocused;            // TRUE if control is focused
  1096. int m_nEditIconId;          // Edit Icon identifier
  1097. BOOL m_bSelEndOk;           // TRUE if user selects a list item.
  1098. int m_nDropDownItemCount;   // Maximum drop down items
  1099. mutable CString m_strEditText;      // Edit text.
  1100. mutable BOOL m_bEditChanged;        // TRUE if Edit Text was changed.
  1101. CXTPControlComboBoxAutoCompleteWnd* m_pAutoCompleteWnd; // Auto Complete hook window.
  1102. DWORD m_dwEditStyle;        // Edit style
  1103. private:
  1104. int m_nCurSel;
  1105. BOOL m_bIgnoreSelection;
  1106. friend class CXTPControlComboBoxList;
  1107. friend class CXTPControlComboBoxEditCtrl;
  1108. };
  1109. //////////////////////////////////////////////////////////////////////////
  1110. AFX_INLINE CListBox* CXTPControlComboBox::GetListBoxCtrl() const {
  1111. return ((CListBox*)m_pCommandBar);
  1112. }
  1113. AFX_INLINE void CXTPControlComboBox::SetDropDownWidth(int nWidth) {
  1114. m_pCommandBar->SetWidth(nWidth);
  1115. }
  1116. AFX_INLINE int CXTPControlComboBox::AddString(LPCTSTR lpsz) {
  1117. return GetListBoxCtrl()->AddString(lpsz);
  1118. }
  1119. AFX_INLINE int CXTPControlComboBox::GetCount() const{
  1120. return GetListBoxCtrl()->GetCount();
  1121. }
  1122. AFX_INLINE void CXTPControlComboBox::GetLBText(int nIndex, CString& str) const{
  1123. GetComboBoxPopupBar()->GetText(nIndex, str);
  1124. }
  1125. AFX_INLINE void CXTPControlComboBox::ResetContent() {
  1126. GetListBoxCtrl()->ResetContent();
  1127. }
  1128. AFX_INLINE int CXTPControlComboBox::FindStringExact(int nIndexStart, LPCTSTR lpsz) const {
  1129. return GetComboBoxPopupBar()->FindStringExact(nIndexStart, lpsz);
  1130. }
  1131. AFX_INLINE int CXTPControlComboBox::InsertString(int nIndex, LPCTSTR lpsz) {
  1132. return GetListBoxCtrl()->InsertString(nIndex, lpsz);
  1133. }
  1134. AFX_INLINE CXTPControlComboBoxEditCtrl* CXTPControlComboBox::GetEditCtrl() const {
  1135. return m_pEdit;
  1136. }
  1137. AFX_INLINE int CXTPControlComboBox::FindString(int nStartAfter, LPCTSTR lpszItem) const {
  1138. return GetComboBoxPopupBar()->FindString(nStartAfter, lpszItem);
  1139. }
  1140. AFX_INLINE DWORD_PTR CXTPControlComboBox::GetItemData(int nIndex) const {
  1141. return (DWORD_PTR)GetListBoxCtrl()->GetItemData(nIndex);
  1142. }
  1143. AFX_INLINE int CXTPControlComboBox::SetItemData(int nIndex, DWORD_PTR dwItemData) {
  1144. return GetListBoxCtrl()->SetItemData(nIndex, dwItemData);
  1145. }
  1146. AFX_INLINE void CXTPControlComboBox::DeleteItem(long nIndex) {
  1147. if (nIndex < GetCount()) GetListBoxCtrl()->DeleteString(nIndex);
  1148. }
  1149. AFX_INLINE BOOL CXTPControlComboBox::IsCustomizeResizeAllow() const {
  1150. return TRUE;
  1151. }
  1152. AFX_INLINE CXTPControlComboBox* CXTPControlComboBoxEditCtrl::GetControlComboBox() const {
  1153. return m_pControl;
  1154. }
  1155. AFX_INLINE int CXTPControlComboBox::GetLabelWidth() const {
  1156. return m_nLabelWidth;
  1157. }
  1158. AFX_INLINE void CXTPControlComboBox::SetLabelWidth(int nLabelWidth) {
  1159. if (m_nLabelWidth != nLabelWidth)
  1160. {
  1161. m_nLabelWidth = nLabelWidth;
  1162. m_bDelayReposition = TRUE;
  1163. }
  1164. }
  1165. AFX_INLINE void CXTPControlComboBox::SetEditIconId(int nId) {
  1166. if (m_nEditIconId != nId) {m_nEditIconId = nId; RedrawParent();m_bDelayReposition = TRUE;}
  1167. }
  1168. AFX_INLINE int CXTPControlComboBox::GetEditIconId() const{
  1169. return m_nEditIconId;
  1170. }
  1171. AFX_INLINE int CXTPControlComboBox::GetThumbWidth() const {
  1172. return m_nThumbWidth;
  1173. }
  1174. AFX_INLINE void CXTPControlComboBox::SetThumbWidth(int nThumbWidth) {
  1175. if (m_nThumbWidth != nThumbWidth)
  1176. {
  1177. m_nThumbWidth = nThumbWidth;
  1178. m_bDelayReposition = TRUE;
  1179. }
  1180. }
  1181. AFX_INLINE void CXTPControlComboBox::OnThemeChanged() {
  1182. m_bDelayReposition = TRUE;
  1183. }
  1184. AFX_INLINE void CXTPControlComboBox::SetDropDownItemCount(int nDropDownItemCount) {
  1185. m_nDropDownItemCount = nDropDownItemCount;
  1186. }
  1187. #endif //#if !defined(__XTPCONTOLCOMBOBOX_H__)