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

对话框与窗口

开发平台:

Visual C++

  1. // XTPPropertyGridItemExt.h
  2. //
  3. // This file is a part of the XTREME PROPERTYGRID 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(__XTPPROPERTYGRIDITEMEXT_H__)
  22. #define __XTPPROPERTYGRIDITEMEXT_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPPropertyGridItem.h"
  28. class CXTPPropertyGridItemDate;
  29. //===========================================================================
  30. // Summary:
  31. //     Month calendar popup used for CXTPPropertyGridItemDate item.
  32. //===========================================================================
  33. class CXTPPropertyGridInplaceMonthCal : public CWnd
  34. {
  35. public:
  36. //-----------------------------------------------------------------------
  37. // Summary:
  38. //     Constructs a CXTPPropertyGridInplaceMonthCal object.
  39. // Parameters:
  40. //     pItem - Parent item
  41. //-----------------------------------------------------------------------
  42. CXTPPropertyGridInplaceMonthCal(CXTPPropertyGridItemDate* pItem)
  43. {
  44. m_pItem = pItem;
  45. }
  46. //-----------------------------------------------------------------------
  47. // Summary: Gets the minimal size needed to display one month.
  48. // Parameters:
  49. //               pRect - Pointer to a RECT that will receive the minimal
  50. //                       size needed to display one month.  This parameter
  51. //                       must be a valid address and cannot be NULL.
  52. // Remarks:
  53. //     This member function implements the behavior of the
  54. //     CMonthCalCtrl::GetMinReqRect function.
  55. // Returns:
  56. //     If successful, this member function returns nonzero and <i>pRect</i>
  57. //     receives the applicable bounding rectangle information. If
  58. //     unsuccessful, the member function returns 0.
  59. //-----------------------------------------------------------------------
  60. AFX_INLINE BOOL GetMinReqRect(RECT* pRect) const
  61. {
  62. ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, MCM_GETMINREQRECT, 0, (LPARAM) pRect);
  63. }
  64. protected:
  65. //-------------------------------------------------------------------------
  66. // Summary: Called if the user hits the Return while an inplace calendar is displayed.
  67. // Remarks: Also occurs when an item in the implace calendar is selected.
  68. // See Also: OnCancel
  69. //-------------------------------------------------------------------------
  70. void OnAccept();
  71. //-------------------------------------------------------------------------
  72. // Summary: Called if the user hits the Escape key or clicks on another part of the
  73. //          property grid or other application while an inplace calendar is displayed.
  74. // See Also: OnAccept
  75. //-------------------------------------------------------------------------
  76. void OnCancel();
  77. //{{AFX_CODEJOCK_PRIVATE
  78. virtual void PostNcDestroy();
  79. virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  80. afx_msg void OnSelect(NMHDR* pNMHDR, LRESULT* pResult);
  81. DECLARE_MESSAGE_MAP()
  82. //}}AFX_CODEJOCK_PRIVATE
  83. protected:
  84. CXTPPropertyGridItemDate* m_pItem;          // Parent item
  85. };
  86. //===========================================================================
  87. // Summary:
  88. //     CXTPPropertyGridItemDate is a CXTPPropertyGridItem derived class.
  89. //     It is used to create Date item in a Property Grid control.
  90. //
  91. // Remarks:
  92. //     When the in-place button for a date item is pressed, a
  93. //     CXTPPropertyGridInplaceMonthCal object is created, which is a
  94. //     User Interface that allows the user to easily select a date.
  95. //
  96. // Example:
  97. //     This sample illustrates how to add an item of type Date to your grid.
  98. // <code>
  99. // CXTPPropertyGridItem* pStandard   = m_wndPropertyGrid.AddCategory(_T("Appointments"));
  100. //
  101. // //Create a Date object with the date 12/26/2004.  Note that no time information is entered
  102. // //because this information is ignored.
  103. // COleDateTime dates(2004, 12, 26, 0, 0, 0);
  104. //
  105. // //Adds a date item to the property grid and set the date to the value stored in dates
  106. // CXTPPropertyGridItemDate* pDate = (CXTPPropertyGridItemDate*)(pStandard->AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates)));
  107. //
  108. // //Set the date format to MM/DD/YYYY
  109. // pDate->SetDateFormat("%m/%d/%Y");
  110. //
  111. // //Changes the date to 3/22/2001
  112. // COleDateTime newDate(2003, 5, 12, 0, 0, 0);
  113. //
  114. // //Changes the date of the Date item.
  115. // pDate->SetDate(newDate);
  116. //
  117. // //Gets the currently set date
  118. // TRACE(_T("Current Date= %d/%d/%dn"), pDate->GetMonth(), pDate->GetDay(), pDate->GetYear());
  119. // </code>
  120. // See Also: SetDate, GetMonth, GetDay, GetYear, SetDateFormat
  121. //===========================================================================
  122. class _XTP_EXT_CLASS CXTPPropertyGridItemDate: public CXTPPropertyGridItem
  123. {
  124. public:
  125. //-----------------------------------------------------------------------
  126. // Summary:
  127. //     Constructs a CXTPPropertyGridItemDate object.
  128. // Parameters:
  129. //     strCaption - Caption of the item.
  130. //     nID        - Identifier of the item.
  131. //     oleDate    - COleDateTime object containing the initial
  132. //                  date of the item.
  133. //     pBindDate  - If not NULL, then the value of this item
  134. //                  is bound the value of this variable.
  135. //-----------------------------------------------------------------------
  136. CXTPPropertyGridItemDate(LPCTSTR strCaption, const COleDateTime& oleDate, COleDateTime* pBindDate = NULL);
  137. CXTPPropertyGridItemDate(UINT nID, const COleDateTime& oleDate, COleDateTime* pBindDate = NULL);  // <COMBINE CXTPPropertyGridItemDate::CXTPPropertyGridItemDate@LPCTSTR@const COleDateTime&@COleDateTime*>
  138. public:
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     Call this member to set the date of the item.
  142. // Parameters:
  143. //     oleDate - COleDateTime containing a date.  You must include
  144. //               the month, day, and year.  All time information
  145. //               should be set to zero.
  146. // Example:
  147. //     This sample illustrates how to set the currently selected
  148. //     date in and item of type CXTPPropertyGridItemDate.
  149. // <code>
  150. // CXTPPropertyGridItem* pStandard   = m_wndPropertyGrid.AddCategory(_T("Appointments"));
  151. //
  152. // //Create a Date object with the date 12/26/2004.  Note that no time information is entered
  153. // //because this information is ignored.
  154. // COleDateTime dates(2004, 12, 26, 0, 0, 0);
  155. //
  156. // //Adds a date item to the property grid and set the date to the value stored in dates
  157. // CXTPPropertyGridItemDate* pDate = (CXTPPropertyGridItemDate*)(pStandard->AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates)));
  158. //
  159. // //Set the date format to MM/DD/YYYY
  160. // pDate->SetDateFormat("%m/%d/%Y");
  161. //
  162. // //Changes the date to 3/22/2001
  163. // COleDateTime newDate(2003, 5, 12, 0, 0, 0);
  164. //
  165. // //Changes the date of the Date item.
  166. // pDate->SetDate(newDate);
  167. //
  168. // //Gets the currently set date
  169. // TRACE(_T("Current Date= %d/%d/%dn"), pDate->GetMonth(), pDate->GetDay(), pDate->GetYear());
  170. // </code>
  171. //-----------------------------------------------------------------------
  172. virtual void SetDate(const COleDateTime& oleDate);
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     Call this member function to convert the time in the COleDateTime
  176. //     object to be represented as a SYSTEMTIME data structure.
  177. //     GetAsSystemTime stores the resulting time in the referenced
  178. //     sysTime object. The SYSTEMTIME data structure initialized by
  179. //     this function will have its wMilliseconds member set to zero.
  180. // Parameters:
  181. //     sysTime - SYSTEMTIME object to hold date.
  182. // Returns:
  183. //     TRUE if the COleDateTime date was successfully stored in the
  184. //     sysTime object.
  185. // Example:
  186. //     This sample code illustrates how to use the GetAsSystemTime member.
  187. // <code>
  188. // CXTPPropertyGridItem* pStandard   = m_wndPropertyGrid.AddCategory(_T("Appointments"));
  189. //
  190. // //Create a Date object with the date 12/26/2004.  Note that no time information is entered
  191. // //because this information is ignored.
  192. // COleDateTime dates(2004, 12, 26, 0, 0, 0);
  193. //
  194. // //Adds a date item to the property grid and set the date to the value stored in dates
  195. // CXTPPropertyGridItemDate* pDate = (CXTPPropertyGridItemDate*)(pStandard->AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates)));
  196. //
  197. // //Creates a SYSTEMTIME object
  198. // SYSTEMTIME sysTime;
  199. //
  200. // //Stores the day, month, and year into the SYSTEMTIME structure, all other members will be 0.
  201. // if (pDate->GetAsSystemTime(sysTime))
  202. //     TRACE(_T("SysTime Current Date= %d/%d/%dn"), sysTime.wMonth, sysTime.wDay, sysTime.wYear);
  203. // </code>
  204. //-----------------------------------------------------------------------
  205. virtual BOOL GetAsSystemTime(SYSTEMTIME& sysTime);
  206. //-----------------------------------------------------------------------
  207. // Summary:
  208. //     Call this member to return the currently selected date.
  209. // Returns:
  210. //     The currently selected date.
  211. //-----------------------------------------------------------------------
  212. virtual const COleDateTime& GetDate() const;
  213. //-----------------------------------------------------------------------
  214. // Summary:
  215. //     Call this member to get the Day of the currently selected date.
  216. // Returns:
  217. //     Day of the currently set date.
  218. //-----------------------------------------------------------------------
  219. virtual long GetDay();
  220. //-----------------------------------------------------------------------
  221. // Summary:
  222. //     Call this member to set the Day of the date.
  223. // Parameters:
  224. //     nDay - New Day of date.
  225. //-----------------------------------------------------------------------
  226. virtual void SetDay(long nDay);
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     Call this member to get the Month of the currently selected date.
  230. // Returns:
  231. //     Month of the currently set date.
  232. //-----------------------------------------------------------------------
  233. virtual long GetMonth();
  234. //-----------------------------------------------------------------------
  235. // Summary:
  236. //     Call this member to set the Month of the date.
  237. // Parameters:
  238. //     nMonth - New Month of date.
  239. //-----------------------------------------------------------------------
  240. virtual void SetMonth(long nMonth);
  241. //-----------------------------------------------------------------------
  242. // Summary:
  243. //     Call this member to get the Year of the currently selected date.
  244. // Returns:
  245. //     Year of the currently set date.
  246. //-----------------------------------------------------------------------
  247. virtual long GetYear();
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //     Call this member to set the Year of the date.
  251. // Parameters:
  252. //     nYear - New year of date.
  253. //-----------------------------------------------------------------------
  254. virtual void SetYear(long nYear);
  255. //-----------------------------------------------------------------------
  256. // Summary:
  257. //     This member is called to parse the month, day, and year from
  258. //     the COleDateTime object.
  259. // Parameters:
  260. //     dt       - COleDateTime object containing the month, day, and year
  261. //     strValue - The date format.
  262. //                Format Code:
  263. //                <p>  %m - Month as decimal number (01 - 12)
  264. //                <p>  %d - Day of month as decimal number (01 - 31)
  265. //                <p>  %Y - Year with century, as decimal number
  266. //                     Format string for 05/22/2004 is "%m%d%Y"
  267. // Returns:
  268. //     TRUE if a valid date was extracted, FALSE if an invalid date
  269. //     or NULL date was found.
  270. //-----------------------------------------------------------------------
  271. virtual BOOL ParseDateTime(COleDateTime& dt, LPCTSTR strValue);
  272. //-----------------------------------------------------------------------
  273. // Summary:
  274. //     Call this member to change the date format.
  275. // Parameters:
  276. //     strFormat - The date format.
  277. //                 <p>  %m - Month as decimal number (01 - 12)
  278. //                 <p>  %d - Day of month as decimal number (01 - 31)
  279. //                 <p>  %Y - Year with century, as decimal number
  280. //                 Format string for 05/22/2004 is "%m%d%Y"
  281. // Example:
  282. //     This sample code illustrates how to change the date format of
  283. //     of type CXTPPropertyGridItemDate.
  284. // <code>
  285. // CXTPPropertyGridItem* pStandard   = m_wndPropertyGrid.AddCategory(_T("Appointments"));
  286. //
  287. // //Create a Date object with the date 12/26/2004.  Note that no time information is entered
  288. // //because this information is ignored.
  289. // COleDateTime dates(2004, 12, 26, 0, 0, 0);
  290. //
  291. // //Adds a date item to the property grid and set the date to the value stored in dates
  292. // CXTPPropertyGridItemDate* pDate = (CXTPPropertyGridItemDate*)(pStandard->AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates)));
  293. //
  294. // //Set the date format to MM/DD/YYYY
  295. // pDate->SetDateFormat("%m/%d/%Y");
  296. // </code>
  297. //-----------------------------------------------------------------------
  298. virtual void SetDateFormat(LPCTSTR strFormat);
  299. //-----------------------------------------------------------------------
  300. // Summary:
  301. //     Call this member to allow null date
  302. // Parameters:
  303. //     lpszNullValue - text to display for null date
  304. //-----------------------------------------------------------------------
  305. void AllowNullDate(LPCTSTR lpszNullValue);
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //     Call this method to bind an item to a COleDateTime object.
  309. // Parameters:
  310. //     pBindDate - COleDateTime object to bind to item.
  311. // Remarks:
  312. //     Variables can be bound to an item in two ways, the first is
  313. //     to pass in a variable at the time of creation, the second allows
  314. //     variables to be bound to an item after creation with the
  315. //     BindToDate member.
  316. //
  317. //     Bound variables store the values of the property grid items
  318. //     and can be accessed without using the property grid methods
  319. //     and properties.  Bound variables allow the property grid to
  320. //     store data in variables.  When the value of a PropertyGridItem
  321. //     is changed, the value of the bound variable will be changed to
  322. //     the PropertyGridItem value.  The advantage of binding is that
  323. //     the variable can be used and manipulated without using
  324. //     PropertyGridItem methods and properties.
  325. //
  326. //     NOTE:  If the value of the variable is changed without using
  327. //     the PropertyGrid, the PropertyGridItem value will not be
  328. //     updated until you call CXTPPropertyGrid::Refresh.
  329. //-----------------------------------------------------------------------
  330. void BindToDate(COleDateTime* pBindDate);
  331. protected:
  332. //-----------------------------------------------------------------------
  333. // Summary:
  334. //     This method creates a formatted representation of the date/time value
  335. // Parameters:
  336. //     oleDate - Date to be formatted.
  337. //-----------------------------------------------------------------------
  338. virtual CString Format(const COleDateTime& oleDate);
  339. //-------------------------------------------------------------------------
  340. // Summary:
  341. //     This method is called when the user presses the in-place button.
  342. //     Override the method to show an item-specific dialog.
  343. // Parameters:
  344. //     pButton - Button that was pressed
  345. // Remarks:
  346. //     The in-place button is the button that the user presses to
  347. //     display date picker.
  348. //-------------------------------------------------------------------------
  349. virtual void OnInplaceButtonDown(CXTPPropertyGridInplaceButton* pButton);
  350. //-----------------------------------------------------------------------
  351. // Summary:
  352. //     Call this method to change an item's value.
  353. //     Override this method to add new functionality.
  354. //     You should call the base class version of this function from your
  355. //     override.
  356. // Parameters:
  357. //     strValue - New value of the item.
  358. //-----------------------------------------------------------------------
  359. virtual void SetValue(CString strValue);
  360. //-------------------------------------------------------------------------
  361. // Summary:
  362. //     This member is called before the item becomes visible in the
  363. //     property grid.
  364. // Remarks:
  365. //     Before the item is inserted, it is first check to see if it
  366. //     is bound to a variable, if it is, then the value of the item
  367. //     is updated with the value stored in the bound variable.
  368. //
  369. //          OnBeforeInsert is called when an item is inserted,
  370. //          when a category is inserted, when a category or item is
  371. //          expanded, and when the sort property has changed.
  372. //-------------------------------------------------------------------------
  373. virtual void OnBeforeInsert();
  374. private:
  375. void Init(const COleDateTime& oleDate);
  376. protected:
  377. COleDateTime m_oleDate;         // Currently selected date.  Only Month, Day, and Year are used.
  378. CString m_strNullValue;         // String value to be displayed for a Date Item when the current date is NULL.
  379. COleDateTime* m_pBindDate;      // Pointer to variable bound to this item, this is the date of the bound item.
  380. friend class CXTPPropertyGridInplaceMonthCal;
  381. DECLARE_DYNAMIC(CXTPPropertyGridItemDate)
  382. };
  383. AFX_INLINE const COleDateTime& CXTPPropertyGridItemDate::GetDate() const {
  384. return m_oleDate;
  385. }
  386. #ifdef __AFXCTL_H__
  387. //{{AFX_CODEJOCK_PRIVATE
  388. //===========================================================================
  389. // Summary:
  390. //     Picture item of ActiveX PropertyGrid
  391. //===========================================================================
  392. class _XTP_EXT_CLASS CXTPPropertyGridItemPicture: public CXTPPropertyGridItem
  393. {
  394. public:
  395. //-----------------------------------------------------------------------
  396. // Summary:
  397. //     Constructs a XTPPropertyGridItemPicture object.
  398. // Parameters:
  399. //     strCaption - Text caption of this item.
  400. //                  This is the text displayed in the left column of
  401. //                  the property grid.
  402. //-----------------------------------------------------------------------
  403. CXTPPropertyGridItemPicture(LPCTSTR strCaption);
  404. public:
  405. virtual CPictureHolder& GetPicture();
  406. virtual void SetPicturePath(LPCTSTR lpszPath);
  407. protected:
  408. //-------------------------------------------------------------------------
  409. // Summary:
  410. //     This method is called when the user presses the in-place button.
  411. //     Override the method to show an item-specific dialog.
  412. // Remarks:
  413. //     The in-place button is the button that the user presses to
  414. //     display browse folder dialog so they can select a picture.
  415. // See Also: XTPPropertyGridItemFlags, CXTPPropertyGridItem::SetFlags
  416. //-------------------------------------------------------------------------
  417. virtual void OnInplaceButtonDown(CXTPPropertyGridInplaceButton* pButton);
  418. //-----------------------------------------------------------------------
  419. // Summary:
  420. //     This method is called when an item is drawn. Override this function if
  421. //     needed.
  422. // Parameters:
  423. //     dc - Reference to the device context to be used for rendering an image
  424. //     of the item.
  425. //     rcValue - Bounding rectangle of the item.
  426. // Returns:
  427. //     TRUE if item is self-drawn.
  428. //-----------------------------------------------------------------------
  429. virtual BOOL OnDrawItemValue(CDC& dc, CRect rcValue);
  430. protected:
  431. CPictureHolder m_olePicture;
  432. CString m_strPicturePath;
  433. int m_nPreviewWidth;
  434. };
  435. AFX_INLINE CPictureHolder& CXTPPropertyGridItemPicture::GetPicture() {
  436. return m_olePicture;
  437. }
  438. //}}AFX_CODEJOCK_PRIVATE
  439. #endif
  440. class _XTP_EXT_CLASS CXTPPropertyGridItemMultilineString: public CXTPPropertyGridItem
  441. {
  442. public:
  443. //-----------------------------------------------------------------------
  444. // Summary:
  445. //     Constructs a CXTPPropertyGridItemDate object.
  446. // Parameters:
  447. //     strCaption - Caption of the item.
  448. //     nID        - Identifier of the item.
  449. //     oleDate    - COleDateTime object containing the initial
  450. //                  date of the item.
  451. //-----------------------------------------------------------------------
  452. CXTPPropertyGridItemMultilineString(LPCTSTR lpszCaption, LPCTSTR strValue = NULL, CString* pBindString = NULL);
  453. CXTPPropertyGridItemMultilineString(UINT nID, LPCTSTR strValue = NULL, CString* pBindString = NULL);  // <COMBINE CXTPPropertyGridItemMultilineString::CXTPPropertyGridItemMultilineString@LPCTSTR@LPCTSTR@CString*>
  454. protected:
  455. //-------------------------------------------------------------------------
  456. // Summary:
  457. //     This method is called when the user presses the in-place button.
  458. //     Override the method to show an item-specific dialog.
  459. // Remarks:
  460. //     The in-place button is the button that the user presses to
  461. //     display date picker.
  462. //-------------------------------------------------------------------------
  463. virtual void OnInplaceButtonDown(CXTPPropertyGridInplaceButton* pButton);
  464. };
  465. #endif // #if !defined(__XTPPROPERTYGRIDITEMEXT_H__)