ExtComboBox.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:18k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_COMBO_BOX_H)
  22. #define __EXT_COMBO_BOX_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #if (!defined __EXT_MOUSECAPTURESINK_H)
  27. #include <../Src/ExtMouseCaptureSink.h>
  28. #endif
  29. #if (!defined __EXT_EDIT_H)
  30. #include <ExtEdit.h>
  31. #endif
  32. #if (!defined __EXT_HOOK_H)
  33. #include "../Src/ExtHook.h"
  34. #endif
  35. #if (!defined __EXT_CONTROLBAR_H)
  36. #include <ExtControlBar.h>
  37. #endif
  38. #if _MSC_VER > 1000
  39. #pragma once
  40. #endif // _MSC_VER > 1000
  41. class CExtComboBoxBase;
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CExtComboBoxPopupListBox window
  44. class __PROF_UIS_API CExtComboBoxPopupListBox : public CWnd
  45. {
  46. // Construction
  47. public:
  48. DECLARE_DYNAMIC( CExtComboBoxPopupListBox );
  49. CExtComboBoxPopupListBox();
  50. // Attributes
  51. public:
  52. HWND m_hWndCB;
  53. CExtComboBoxBase * m_pCB;
  54. protected:
  55. bool m_bFirstActivationInvocation:1, m_bSimpleModeComboBox:1;
  56. CRect m_rcWndRestore;
  57. // Overrides
  58. // ClassWizard generated virtual function overrides
  59. //{{AFX_VIRTUAL(CExtComboBoxPopupListBox)
  60. protected:
  61. virtual void PreSubclassWindow();
  62. virtual void PostNcDestroy();
  63. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  64. //}}AFX_VIRTUAL
  65. // Implementation
  66. public:
  67. virtual ~CExtComboBoxPopupListBox();
  68. protected:
  69. bool _IsEnabledItem( CPoint point );
  70. // Generated message map functions
  71. protected:
  72. //{{AFX_MSG(CExtComboBoxPopupListBox)
  73. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  74. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  75. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  76. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  77. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  78. //}}AFX_MSG
  79. DECLARE_MESSAGE_MAP()
  80. }; // class CExtComboBoxPopupListBox
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CExtComboBoxFilterPopupListBox window
  83. class __PROF_UIS_API CExtComboBoxFilterPopupListBox : public CListBox
  84. {
  85. public:
  86. DECLARE_DYNAMIC( CExtComboBoxFilterPopupListBox );
  87. CExtComboBoxFilterPopupListBox(
  88. CExtComboBoxBase * pCB = NULL
  89. );
  90. virtual ~CExtComboBoxFilterPopupListBox();
  91. // Attributes
  92. public:
  93. class __PROF_UIS_API LB_ITEM
  94. {
  95. public:
  96. LB_ITEM();
  97. ~LB_ITEM();
  98. LPARAM LParamGet() const;
  99. void LParamSet( 
  100. LPARAM lParam
  101. );
  102. protected:
  103. LPARAM m_lParam;
  104. }; // class LB_ITEM
  105. typedef CTypedPtrArray < CPtrArray, LB_ITEM * > FLBItemsArr_t;
  106. // Operations
  107. public:
  108. LONG HitTest( 
  109. const POINT & ptClient
  110. ) const;
  111. LB_ITEM * LbItemGet( 
  112. LONG nIndex 
  113. ) const;
  114. protected:
  115. INT LbItemGetCount() const;
  116. INT LbItemGetIndexOf( 
  117. const LB_ITEM * pItem 
  118. ) const;
  119. INT LbItemInsert( 
  120. INT nIndex = -1 // append
  121. );
  122. bool LbItemRemove(
  123. LONG nIndex
  124. );
  125. void LbItemRemoveAll();
  126. protected:
  127. HWND m_hWndCB;
  128. CExtComboBoxBase * m_pCB;
  129. bool m_bResizingX:1;
  130. bool m_bResizingY:1;
  131. CPoint m_ptCursorPosLast;
  132. HCURSOR m_hCursorSizeWE; // horizontal two-headed arrow
  133. HCURSOR m_hCursorSizeNS; // vertical two-headed arrow
  134. HCURSOR m_hCursorSizeNWSE; // two-headed arrow with ends at upper left and lower right 
  135. FLBItemsArr_t m_arrLBItems;
  136. friend class CExtComboBoxBase;
  137. protected:
  138. virtual bool _ProcessMouseMove( 
  139. CPoint point 
  140. );
  141. virtual bool _ProcessMouseClick(
  142. CPoint point,
  143. bool bButtonPressed,
  144. INT nMouseButton // MK_... values
  145. );
  146. //{{AFX_VIRTUAL(CExtComboBoxFilterPopupListBox)
  147. public:
  148. virtual void DrawItem( LPDRAWITEMSTRUCT lpDIS );
  149. virtual void MeasureItem( LPMEASUREITEMSTRUCT lpMIS );
  150. protected:
  151. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  152. //}}AFX_VIRTUAL
  153. protected:
  154. //{{AFX_MSG(CExtComboBoxFilterPopupListBox)
  155. afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  156. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  157. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  158. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  159. afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  160. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  161. afx_msg void OnCaptureChanged(CWnd *pWnd);
  162. afx_msg void OnCancelMode();
  163. afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
  164. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  165. afx_msg void OnNcPaint();
  166. afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
  167. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  168. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  169. afx_msg LRESULT OnLBAddString( WPARAM wParam, LPARAM lParam );
  170. afx_msg LRESULT OnLBInsertString( WPARAM wParam, LPARAM lParam );
  171. afx_msg LRESULT OnLBDeleteString( WPARAM wParam, LPARAM lParam );
  172. afx_msg LRESULT OnLBResetContent( WPARAM wParam, LPARAM lParam );
  173. afx_msg LRESULT OnLBAddFile( WPARAM wParam, LPARAM lParam );
  174. //}}AFX_MSG
  175. afx_msg UINT OnNcHitTest(CPoint point);
  176. #if _MFC_VER < 0x700
  177. afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
  178. #else
  179. afx_msg void OnActivateApp(BOOL bActive, DWORD hTask);
  180. #endif
  181. DECLARE_MESSAGE_MAP()
  182. }; // class CExtComboBoxFilterPopupListBox
  183. /////////////////////////////////////////////////////////////////////////////
  184. // CExtComboEditCtrlHook window
  185. // (internal combobox edit ctrl)
  186. class __PROF_UIS_API CExtComboEditCtrlHook : public CExtEditBase
  187. {
  188. // Construction
  189. public:
  190. DECLARE_DYNCREATE( CExtComboEditCtrlHook );
  191. CExtComboEditCtrlHook();
  192. // Attributes
  193. public:
  194. // Operations
  195. public:
  196. virtual CExtComboBoxBase * OnQueryComboBox() const;
  197. // Overrides
  198. // ClassWizard generated virtual function overrides
  199. //{{AFX_VIRTUAL(CExtComboEditCtrlHook)
  200. protected:
  201. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  202. //}}AFX_VIRTUAL
  203. // Implementation
  204. public:
  205. virtual ~CExtComboEditCtrlHook();
  206. protected:
  207. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  208. CPoint point,
  209. TOOLINFO * pTI
  210. ) const;
  211. virtual COLORREF OnQueryBackColor() const;
  212. virtual COLORREF OnQueryTextColor() const;
  213. // Generated message map functions
  214. protected:
  215. //{{AFX_MSG(CExtComboEditCtrlHook)
  216. afx_msg void OnContextMenu(CWnd* pWnd,CPoint pos );
  217. afx_msg void OnDestroy();
  218. //}}AFX_MSG
  219. DECLARE_MESSAGE_MAP()
  220. friend class CExtComboBox;
  221. }; // class __PROF_UIS_API CExtComboEditCtrlHook
  222. /////////////////////////////////////////////////////////////////////////////
  223. // CExtComboBoxBase window
  224. #define __EXT_COMBO_BOX_WM_USER_REALSELENDOK ( WM_USER + 123 )
  225. #define __EXT_COMBO_BOX_WM_USER_AUTOCOMPLETE ( WM_USER + 124 )
  226. class __PROF_UIS_API CExtComboBoxBase
  227. : public CComboBox
  228. , public CExtHookSpy
  229. , public CExtAnimationSingleton
  230. {
  231. // Construction
  232. public:
  233. DECLARE_DYNCREATE( CExtComboBoxBase );
  234. CExtComboBoxBase();
  235. class __PROF_UIS_API LB_ITEM
  236. {
  237. public:
  238. LB_ITEM();
  239. ~LB_ITEM();
  240. class CELL
  241. {
  242. public:
  243. CELL( 
  244. __EXT_MFC_SAFE_LPCTSTR sItemText = NULL
  245. );
  246. ~CELL();
  247. LONG m_nLParam;
  248. COLORREF m_clrText;
  249. COLORREF m_clrBack;
  250. CExtSafeString m_sItemText;
  251. }; // class CELL
  252. INT LbItemCellInsert( 
  253. __EXT_MFC_SAFE_LPCTSTR sItemText = NULL,
  254. INT nPos = -1 // append
  255. );
  256. bool LbItemCellRemove(
  257. LONG nItem
  258. );
  259. CELL * LbItemCellGet( 
  260. LONG nItem 
  261. ) const;
  262. INT LbItemCellGetIndexOf( 
  263. const CELL * pItemCell 
  264. ) const;
  265. INT LbItemCellGetCount() const;
  266. bool IsEnabled() const;
  267. void Enable(
  268. bool bEnable = true
  269. );
  270. protected:
  271. bool m_bEnabled:1;
  272. typedef CTypedPtrArray < CPtrArray, CELL * > ItemCellsArr_t;
  273. ItemCellsArr_t m_arrItemCells;
  274. }; // class LB_ITEM
  275. typedef CTypedPtrArray < CPtrArray, LB_ITEM * > LBItemsArr_t;
  276. // Attributes
  277. public:
  278. bool m_bEnableAutoComplete:1;
  279. bool m_bUseCaseSensitiveAutoComplete:1;
  280. bool m_bEnableAutoFilter:1;
  281. bool m_bHandleCtxMenus:1;
  282. bool m_bEnableSelChangeWorkaround:1;
  283. protected:
  284. bool m_bInitialized:1;
  285. bool m_bAutoComplete:1;
  286. CExtComboEditCtrlHook m_wndInnerEditHook;
  287. HWND m_hWndPopupListBox;
  288. CExtComboBoxPopupListBox * m_pWndPopupListBox;
  289. CString m_sSavedText;
  290. COLORREF m_clrBack;
  291. COLORREF m_clrBackPrev;
  292. CBrush m_brBack;
  293. COLORREF m_clrText;
  294. CToolTipCtrl m_wndToolTip;
  295. void InitToolTip();
  296. typedef
  297. CMap < LONG, LONG, LONG, LONG >
  298. MapColWidth_t;
  299. MapColWidth_t m_mapColumnsWidth;
  300. LBItemsArr_t m_arrLBItems;
  301. protected:
  302. virtual void _OnDrawComboImpl(
  303. bool bPressed,
  304. bool bHover,
  305. CDC * pDC = NULL
  306. );
  307. public:
  308. virtual CExtComboBoxPopupListBox * OnComboBoxPopupListBoxInstantiate();
  309. virtual CExtComboBoxPopupListBox * OnComboBoxPopupListBoxQuery(
  310. HWND hWndSubclass = NULL
  311. );
  312. virtual HWND AnimationSite_GetSafeHWND() const;
  313. void ShowFilterPopupList( 
  314. CExtSafeString & sFilterText 
  315. );
  316. CSize GetFilterPopupListSize() const;
  317. CSize SetFilterPopupListSize( 
  318. CSize szSize 
  319. );
  320. LB_ITEM * LbItemGet( 
  321. LONG nItem 
  322. ) const;
  323. LONG LbColumnWidthGet( 
  324. LONG nColNo
  325. ) const;
  326. void LbColumnWidthSet( 
  327. LONG nColNo,
  328. LONG nWidth
  329. );
  330. bool LbItemIsEnabled(
  331. LONG nItem
  332. ) const;
  333. void LbItemEnable(
  334. LONG nItem,
  335. bool bEnable = true
  336. );
  337. protected:
  338. INT LbItemSet(
  339. INT nIndex,
  340. __EXT_MFC_SAFE_LPCTSTR lpszItem
  341. );
  342. INT LbItemInsert(
  343. __EXT_MFC_SAFE_LPCTSTR lpszItem,
  344. INT nIndex = -1 // append
  345. );
  346. bool LbItemRemove(
  347. LONG nIndex
  348. );
  349. void LbItemRemoveAll();
  350. // Implementation
  351. public:
  352. virtual ~CExtComboBoxBase();
  353. void SetTooltipText(
  354. int nId,
  355. BOOL bActivate = TRUE
  356. );
  357. void SetTooltipText(
  358. CExtSafeString * spText,
  359. BOOL bActivate = TRUE
  360. );
  361. void SetTooltipText(
  362. CExtSafeString & sText,
  363. BOOL bActivate = TRUE
  364. );
  365. void SetTooltipText(
  366. __EXT_MFC_SAFE_LPCTSTR sText,
  367. BOOL bActivate = TRUE
  368. );
  369. void ActivateTooltip(
  370. BOOL bEnable = TRUE
  371. );
  372. void SetBkColor( 
  373. COLORREF clrBk 
  374. );
  375. COLORREF GetBkColor() const;
  376. void SetTextColor( 
  377. COLORREF clrText 
  378. );
  379. COLORREF GetTextColor() const;
  380. CEdit * GetInnerEditCtrl() const;
  381. INT AddStringUnique( 
  382. __EXT_MFC_SAFE_LPCTSTR lpszString 
  383. );
  384. LONG FindItemExact(
  385. __EXT_MFC_SAFE_LPCTSTR lpszString,
  386. LONG nIndexStart = -1
  387. ) const;
  388. protected:
  389. virtual bool _CreateHelper();
  390. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  391. CPoint point,
  392. TOOLINFO * pTI
  393. ) const;
  394. virtual int OnQueryMaxTipWidth( 
  395. __EXT_MFC_SAFE_LPCTSTR lpszText 
  396. );
  397. virtual void OnSubclassInnerEdit();
  398. virtual CEdit * OnQueryInnerEditCtrl() const;
  399. protected:
  400. CExtComboBoxFilterPopupListBox * m_pPopupListWnd;
  401. CSize m_szFilterPopupListBox;
  402. virtual CExtComboBoxFilterPopupListBox * OnFilterPopupListCreate();
  403. virtual void OnFilterPopupListClose();
  404. virtual void OnFilterPopupListSyncContents( 
  405. CExtSafeString & sFilterText
  406. );
  407. virtual void OnFilterPopupListSelEndOK();
  408. virtual void OnFilterPopupListSelChanged();
  409. virtual void OnFilterPopupListSyncSelection(
  410. bool bSetEditSel = true
  411. );
  412. virtual CSize OnFilterPopupListQueryMinSize();
  413. virtual CSize OnFilterPopupListQueryMaxSize();
  414. virtual bool OnHookSpyPreTranslateMessage(
  415. MSG * pMSG
  416. );
  417. friend class CExtComboBoxFilterPopupListBox;
  418. public:
  419. virtual HFONT OnQueryFont() const;
  420. virtual COLORREF OnQueryBackColor() const;
  421. virtual COLORREF OnQueryTextColor() const;
  422. protected:
  423. virtual CSize OnPopupListBoxCalcItemExtraSizes(
  424. LONG nItem
  425. ) const;
  426. virtual CSize OnPopupListBoxCalcItemCellExtraSizes() const;
  427. virtual LONG OnPopupListBoxQueryColumnWidth(
  428. LONG nColNo
  429. ) const;
  430. virtual void OnPopupListBoxDrawItem( 
  431. CDC & dc,
  432. const RECT & rcItem,
  433. const CSize & szExtra,
  434. UINT nState,
  435. const CExtComboBoxBase::LB_ITEM * pLbItem
  436. );
  437. virtual void OnPopupListBoxMeasureItem( 
  438. LPMEASUREITEMSTRUCT lpMIS 
  439. );
  440. public:
  441. virtual bool _OnCbLbPreWndProc( LRESULT & lResult, UINT message, WPARAM wParam, LPARAM lParam );
  442. virtual void _OnCbLbPostWndProc( LRESULT lResult, UINT message, WPARAM wParam, LPARAM lParam );
  443. // ClassWizard generated virtual function overrides
  444. //{{AFX_VIRTUAL(CExtComboBoxBase)
  445. public:
  446. virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);
  447. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
  448. virtual void DeleteItem(LPDELETEITEMSTRUCT lpDIS);
  449. virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCIS);
  450. virtual BOOL PreTranslateMessage(MSG* pMsg);
  451. virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult);
  452. protected:
  453. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  454. virtual void PreSubclassWindow();
  455. virtual void PostNcDestroy();
  456. //}}AFX_VIRTUAL
  457. // Generated message map functions
  458. protected:
  459. //{{AFX_MSG(CExtComboBoxBase)
  460. afx_msg LRESULT OnCBAddString(WPARAM wParam, LPARAM lParam);
  461. afx_msg LRESULT OnCBInsertString(WPARAM wParam, LPARAM lParam);
  462. afx_msg LRESULT OnCBResetContent(WPARAM wParam, LPARAM lParam);
  463. afx_msg LRESULT OnCBDeleteString(WPARAM wParam, LPARAM lParam);
  464. afx_msg LRESULT OnCBSetCurSel(WPARAM wParam, LPARAM lParam);
  465. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
  466. afx_msg void OnSize(UINT nType, int cx, int cy);
  467. afx_msg void OnDestroy();
  468. afx_msg int OnCharToItem(UINT nChar, CListBox* pListBox, UINT nIndex);
  469. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  470. //}}AFX_MSG
  471. afx_msg void OnEditCtrlUpdate();
  472. LRESULT OnCtlColor(WPARAM wParam, LPARAM lParam);
  473. DECLARE_MESSAGE_MAP()
  474. protected:
  475. friend class CExtComboEditCtrlHook;
  476. }; // class __PROF_UIS_API CExtComboBoxBase
  477. /////////////////////////////////////////////////////////////////////////////
  478. // CExtComboBox window
  479. class __PROF_UIS_API CExtComboBox : public CExtComboBoxBase
  480. {
  481. // Construction
  482. public:
  483. DECLARE_DYNCREATE( CExtComboBox );
  484. CExtComboBox();
  485. protected:
  486. CExtComboBox( UINT, CWnd * ) { } // for CExtNCSB template class compilation only
  487. CExtComboBox( __EXT_MFC_SAFE_LPCTSTR, CWnd * ) { } // for CExtNCSB template class compilation only
  488. // Attributes
  489. public:
  490. protected:
  491. bool m_bLButtonDown:1;
  492. bool m_bPainted:1;
  493. DWORD m_dwLastStateCode;
  494. // Operations
  495. public:
  496. // Overrides
  497. // ClassWizard generated virtual function overrides
  498. //{{AFX_VIRTUAL(CExtComboBox)
  499. public:
  500. virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult);
  501. protected:
  502. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  503. //}}AFX_VIRTUAL
  504. // Implementation
  505. public:
  506. virtual ~CExtComboBox();
  507. virtual void AnimationSite_OnProgressShutdownTimer( UINT nTimerID );
  508. virtual const CExtAnimationParameters *
  509. AnimationClient_OnQueryAnimationParameters(
  510. INT eAPT // __EAPT_*** animation type
  511. ) const;
  512. // virtual bool AnimationClient_CacheNextState(
  513. // CDC & dc,
  514. // const RECT & rcAcAnimationTarget,
  515. // bool bAnimate,
  516. // INT eAPT // __EAPT_*** animation type
  517. // );
  518. protected:
  519. virtual void _OnDrawComboImpl(
  520. bool bPressed,
  521. bool bHover,
  522. CDC * pDC = NULL
  523. );
  524. bool IsFocused() const;
  525. bool IsHovered() const;
  526. // Generated message map functions
  527. protected:
  528. //{{AFX_MSG(CExtComboBox)
  529. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  530. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  531. afx_msg void OnTimer(__EXT_MFC_UINT_PTR nIDEvent);
  532. afx_msg void OnPaint();
  533. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  534. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  535. afx_msg void OnSetFocus(CWnd* pOldWnd);
  536. afx_msg void OnKillFocus(CWnd* pNewWnd);
  537. //}}AFX_MSG
  538. DECLARE_MESSAGE_MAP()
  539. };
  540. /////////////////////////////////////////////////////////////////////////////
  541. // CExtCheckComboBox window
  542. class __PROF_UIS_API CExtCheckComboBox : public CExtComboBox
  543. {
  544. public:
  545. DECLARE_DYNCREATE( CExtCheckComboBox );
  546. CExtCheckComboBox();
  547. virtual ~CExtCheckComboBox();
  548. BOOL Create( DWORD dwStyle, const RECT& rect, CWnd * pParentWnd, UINT nID );
  549. void CheckSet(
  550. INT nIndex,
  551. bool bCheck = true
  552. );
  553. bool CheckGet( INT nIndex ) const;
  554. void CheckAll(
  555. bool bCheck = true
  556. );
  557. virtual void OnPaintItemCheck( CDC & dc, const RECT & rcCheck, INT nIndex );
  558. virtual bool _OnCbLbPreWndProc( LRESULT & lResult, UINT message, WPARAM wParam, LPARAM lParam );
  559. protected:
  560. virtual void _OnDrawComboImpl(
  561. bool bPressed,
  562. bool bHover,
  563. CDC * pDC = NULL
  564. );
  565. //{{AFX_VIRTUAL(CExtCheckComboBox)
  566. protected:
  567. virtual void PreSubclassWindow();
  568. virtual void PostNcDestroy();
  569. virtual void DrawItem( LPDRAWITEMSTRUCT pDIS );
  570. virtual void MeasureItem( LPMEASUREITEMSTRUCT pMIS );
  571. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  572. public:
  573. virtual BOOL PreTranslateMessage( MSG * pMsg );
  574. //}}AFX_VIRTUAL
  575. //{{AFX_MSG(CExtCheckComboBox)
  576. afx_msg LRESULT OnGetText( WPARAM wParam, LPARAM lParam );
  577. afx_msg LRESULT OnGetTextLength( WPARAM wParam, LPARAM lParam );
  578. //}}AFX_MSG
  579. DECLARE_MESSAGE_MAP()
  580. protected:
  581. CExtSafeString m_strText;
  582. bool m_bHaveText:1, m_bHaveItemHeight:1;
  583. virtual void _UpdateText();
  584. };
  585. /////////////////////////////////////////////////////////////////////////////
  586. //{{AFX_INSERT_LOCATION}}
  587. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  588. #endif // __EXT_COMBO_BOX_H