ControlsWnd.cpp
上传用户:yangzi5763
上传日期:2007-01-02
资源大小:239k
文件大小:55k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 10/16/98 1:42:43 PM
  5.   Comments: ControlsWnd.cpp: implementation of the CControlsWnd class and all derived classes
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "xpropertieswnd.h"
  9. #include "ControlsWnd.h"
  10. #include "PageListCtrl.h"
  11. #include "XPropertiesWndCtl.h"
  12. #include "font.h"
  13. #ifdef _DEBUG
  14. #undef THIS_FILE
  15. static char THIS_FILE[]=__FILE__;
  16. #define new DEBUG_NEW
  17. #endif
  18. #define _FreezeEvents m_nFreezeEvent++
  19. #define _UnFreezeEvents m_nFreezeEvent--
  20. #define _IsFrozen (m_nFreezeEvent != 0)
  21. //////////////////////////////////////////////////////////////////////
  22. // Construction/Destruction
  23. //////////////////////////////////////////////////////////////////////
  24. CAsControls CControlsWnd::m_asControl;
  25. long CControlsWnd::m_nFreezeEvent = 0;
  26. IMPLEMENT_DYNAMIC(CControlsWnd,CObject)
  27. // Function name : CControlsWnd::CControlsWnd
  28. // Description     : Default constuctor
  29. // Return type : 
  30. CControlsWnd::CControlsWnd()
  31. {
  32. m_pWnd = NULL;
  33. m_pNotifyWnd = NULL;
  34. m_nSelectedItem = -1;
  35. m_nSelectedSubItem = -1;
  36. }
  37. // Function name : CControlsWnd::~CControlsWnd
  38. // Description     : virtual destructor
  39. // Return type : 
  40. CControlsWnd::~CControlsWnd()
  41. {
  42. if (m_pWnd)
  43. if (::IsWindow(m_pWnd->m_hWnd))
  44. ::DestroyWindow(m_pWnd->m_hWnd);
  45. }
  46. // Function name : CControlsWnd::IsVisible
  47. // Description     : return true if control is visible
  48. // Return type : BOOL 
  49. BOOL CControlsWnd::IsVisible()
  50. {
  51. if (m_pWnd)
  52. if (AfxIsValidAddress(m_pWnd, sizeof(CWnd)))
  53. if (IsWindow(m_pWnd->m_hWnd))
  54. return m_pWnd->IsWindowVisible();
  55. return FALSE;
  56. }
  57. // Function name : CControlsWnd::IsGroup
  58. // Description     : return TRUE only for CControlsWnd_CGroup
  59. // Return type : BOOL 
  60. BOOL CControlsWnd::IsGroup()
  61. {
  62. return FALSE;
  63. }
  64. // Function name : CControlsWnd::LookupPage
  65. // Description     : 
  66. // Return type : TMapIdx2Ctrl* 
  67. // Argument         : CPageListCtrl* pNotifyWnd
  68. TMapIdx2Ctrl* CControlsWnd::LookupPage(CPageListCtrl* pNotifyWnd)
  69. {
  70. ASSERT (pNotifyWnd);
  71. TMapIdx2Ctrl* pResult = NULL;
  72. if (pNotifyWnd->GetControlWnd()->m_mapPg2CtrlCreated.Lookup(pNotifyWnd, pResult))
  73. return pResult;
  74. return NULL;
  75. }
  76. // Function name : CControlsWnd::Lookup
  77. // Description     : Lookup in m_mapPg2CtrlCreated if this control is alredy created
  78. // Return type : CControlsWnd* 
  79. // Argument         : CPageListCtrl *pNotifyWnd
  80. // Argument         : int nSelectedItem
  81. CControlsWnd* CControlsWnd::LookupControl(CPageListCtrl *pNotifyWnd, int nSelectedItem)
  82. {
  83. CControlsWnd* pResult = NULL;
  84. if (TMapIdx2Ctrl* pMap = LookupPage(pNotifyWnd))
  85. if (pMap->Lookup(nSelectedItem, pResult))
  86. if (AfxIsValidAddress(*(void**)pResult, sizeof(void*), FALSE))
  87. return pResult;
  88. return NULL;
  89. }
  90. // Function name : CControlsWnd::Add2NDelete
  91. // Description     : Append a new control to map of not deleted controls
  92. // Return type : void 
  93. // Argument         : CControlsWnd *pControl
  94. void CControlsWnd::Add2NDelete(CControlsWnd *pControl)
  95. {
  96. //This control when is created, need to be not destroyable, so I will  put into the m_mapPg2CtrlCreated
  97. TMapIdx2Ctrl* pMap = LookupPage(pControl->GetWindowNotify());
  98. if (!pMap)
  99. GetControl()->m_mapPg2CtrlCreated[pControl->GetWindowNotify()] = (pMap = new TMapIdx2Ctrl());
  100. (*pMap)[pControl->GetSelectedItem()] = pControl;
  101. }
  102. // Function name : CControlsWnd::RefreshNDelete
  103. // Description     : Delete old control from list and attach new one with m_nSelectedItem changed
  104. // Return type : void 
  105. // Argument         : CControlsWnd* pControl
  106. // Argument         : int nSelectedItemNew
  107. void CControlsWnd::RefreshNDelete(CControlsWnd* pControl, int nSelectedItemNew)
  108. {
  109. TMapIdx2Ctrl* pMap = LookupPage(pControl->GetWindowNotify());
  110. if (pMap)
  111. {
  112. int nSelectedItemOld = pControl->GetSelectedItem();
  113. CControlsWnd* pResult = NULL;
  114. if (pMap->Lookup(nSelectedItemOld, pResult))
  115. {
  116. ASSERT (pControl == pResult);
  117. pMap->RemoveKey(nSelectedItemOld);
  118. pControl->m_nSelectedItem = nSelectedItemNew;
  119. (*pMap)[pControl->GetSelectedItem()] = pControl;
  120. }
  121. }
  122. }
  123. // Function name : CControlsWnd::Kill
  124. // Description     : Kill this 
  125. // Return type : void 
  126. void CControlsWnd::Kill()
  127. {
  128. if (GetWindowNotify()->GetEditingControl() == this)
  129. GetWindowNotify()->ResetEditControl();
  130. TMapIdx2Ctrl* pMap = LookupPage(GetWindowNotify());
  131. if (pMap)
  132. pMap->RemoveKey(GetSelectedItem());
  133. delete this;
  134. }
  135. // Function name : CControlsWnd::Create
  136. // Description     : 
  137. // Return type : CControlsWnd* 
  138. // Argument         : LPCTSTR lpszAs
  139. CControlsWnd* CControlsWnd::Create(LPCTSTR lpszAs, CPageListCtrl* pNotifyWnd, int nSelectedItem, int nSelectedSubItem)
  140. {
  141. // If the control is already created we will return the control already created
  142. if (CControlsWnd* pResult = LookupControl(pNotifyWnd, nSelectedItem))
  143. return pResult;
  144. // Create a new one control
  145. CString className(_T("CControlsWnd_C"));
  146. className += lpszAs;
  147. if (CControlsWnd* pResult = CreateObject(className))
  148. {
  149. pResult->m_pNotifyWnd = pNotifyWnd;
  150. pResult->m_nSelectedItem = nSelectedItem;
  151. pResult->m_nSelectedSubItem = nSelectedSubItem;
  152. if (pResult->m_pWnd = pResult->Create())
  153. {
  154. if (::IsWindow(pResult->m_pWnd->m_hWnd))
  155. pResult->m_pWnd->SetFont(&pResult->m_pNotifyWnd->m_itemFont);
  156. return pResult;
  157. }
  158. }
  159. return NULL;
  160. }
  161. // Function name : CControlsWnd::Close
  162. // Description     : 
  163. // Return type : void 
  164. // Argument         : BOOL bCancel
  165. void CControlsWnd::Close(BOOL bCancel)
  166. {
  167. if (m_pWnd)
  168. if (::IsWindow(m_pWnd->m_hWnd))
  169. {
  170. ReleaseCapture();
  171. m_pWnd->ShowWindow(SW_HIDE);
  172. }
  173. GetWindowNotify()->CloseEditing();
  174. RefreshColor();
  175. };
  176. // Function name : CControlsWnd::GetWindow
  177. // Description     : return the window
  178. // Return type : CWnd* 
  179. CWnd* CControlsWnd::GetWindow()
  180. {
  181. return m_pWnd;
  182. }
  183. // Function name : CControlsWnd::GetWindowNotify
  184. // Description     : return the notify window
  185. // Return type : CPageListCtrl* 
  186. CPageListCtrl* CControlsWnd::GetWindowNotify()
  187. {
  188. return m_pNotifyWnd;
  189. }
  190. // Function name : CControlsWnd::GetControl
  191. // Description     : 
  192. // Return type : CXPropertiesWndCtrl* 
  193. CXPropertiesWndCtrl* CControlsWnd::GetControl()
  194. {
  195. return GetWindowNotify()->GetControlWnd();
  196. }
  197. // Function name : CControlsWnd::Show
  198. // Description     : generate BeginEditProperty event
  199. // Return type : void 
  200. // Argument         : LPARAM lParam
  201. void CControlsWnd::Show(LPARAM lParam)
  202. {
  203. if (::IsWindow(GetWindow()->GetSafeHwnd()))
  204. GetWindow()->SetFont(&GetWindowNotify()->m_itemFont, TRUE);
  205. RefreshColor();
  206. GetControl()->FirePropertyChanging(GetControl()->_GetActivePage(), m_nSelectedItem);
  207. }
  208. // Function name : CControlsWnd::OnSelectItem
  209. // Description     : When user select a new item, change the value of edit control, or click the button
  210. // Return type : void 
  211. // Argument         : CString& newValue
  212. // Argument         : LPARAM lParam
  213. void CControlsWnd::OnSelectItem(CString& newValue, LPARAM lParam)
  214. {
  215. CString sOldProperty = GetDefaultValue();
  216. GetWindowNotify()->SetDefaultValue(m_nSelectedItem, (LPCTSTR)newValue);
  217. CXPropertiesWndCtrl* pControl = GetControl();
  218. pControl->FirePropertyChanged(pControl->_GetActivePage(), m_nSelectedItem, sOldProperty.Compare((LPCTSTR)newValue) != 0);
  219. }
  220. // Function name : CControlsWnd::GetDefaultValue
  221. // Description     : return the default value of control
  222. // Return type : CString 
  223. CString CControlsWnd::GetDefaultValue()
  224. {
  225. return GetWindowNotify()->GetItemText(m_nSelectedItem, m_nSelectedSubItem);
  226. }
  227. // Function name : CControlsWnd::SetValue
  228. // Description     : Set a value as default
  229. // Return type : void 
  230. // Argument         : VARIANT vVariant
  231. // Argument         : long nColumn
  232. void CControlsWnd::SetValue(VARIANT vVariant, long nColumn)
  233. {
  234. TRY
  235. {
  236. COleVariant v(vVariant);
  237. v.ChangeType(VT_BSTR);
  238. GetWindowNotify()->SetDefaultValue(GetSelectedItem(), CString(v.bstrVal));
  239. ::SysFreeString(v.bstrVal);
  240. }
  241. CATCH_ALL(e)
  242. {
  243. }
  244. END_CATCH_ALL;
  245. }
  246. // Function name : CControlsWnd::GetValue
  247. // Description     : Return the value as variant
  248. // Return type : VARIANT 
  249. // Argument         : long nColumn
  250. VARIANT CControlsWnd::GetValue(long nColumn)
  251. {
  252. VARIANT v;
  253. VariantInit(&v);
  254. v.vt = VT_BSTR;
  255. v.bstrVal = GetDefaultValue().AllocSysString();
  256. return v;
  257. }
  258. // Function name : CControlsWnd::GetRect
  259. // Description     : return the default rect
  260. // Return type : CRect 
  261. CRect CControlsWnd::GetRect()
  262. {
  263. return GetWindowNotify()->GetLastRect(m_nSelectedItem);
  264. }
  265. // Function name : CControlsWnd::RefreshColor
  266. // Description     : Refresh the color of item in edit mode
  267. // Return type : void 
  268. void CControlsWnd::RefreshColor()
  269. {
  270. GetWindowNotify()->RedrawItems(m_nSelectedItem, m_nSelectedItem);
  271. }
  272. // Function name : CControlsWnd::Delete
  273. // Description     : Delete this.
  274. // Return type : void 
  275. CControlsWnd* CControlsWnd::Delete()
  276. {
  277. delete this;
  278. return NULL;
  279. }
  280. //////////////////////////////////////////////////////////////////////
  281. // CControlsWnd_CComboBox Class
  282. //////////////////////////////////////////////////////////////////////
  283. //////////////////////////////////////////////////////////////////////
  284. // Construction/Destruction
  285. //////////////////////////////////////////////////////////////////////
  286. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CComboBox,CControlsWnd);
  287. IMPLEMENT_DYNAMIC(CControlsWnd_CComboBox,CControlsWnd)
  288. // Function name : CControlsWnd_CComboBox::CControlsWnd_CComboBox
  289. // Description     : Default constructor
  290. // Return type : 
  291. CControlsWnd_CComboBox::CControlsWnd_CComboBox()
  292. {
  293. }
  294. // Function name : CControlsWnd_CComboBox::~CControlsWnd_CComboBox
  295. // Description     : virtual destructor
  296. // Return type : 
  297. CControlsWnd_CComboBox::~CControlsWnd_CComboBox()
  298. {
  299. }
  300. // Function name : CControlsWnd_CComboBox::Create
  301. // Description     : Overidable function
  302. // Return type : CControlsWnd* 
  303. CWnd* CControlsWnd_CComboBox::Create()
  304. {
  305. if ((::IsWindow(m_dropListBox.GetSafeHwnd())) || (m_dropListBox.Create(this)))
  306. return &m_dropListBox;
  307. return NULL;
  308. }
  309. // Function name : CControlsWnd_CComboBox::Show
  310. // Description     : Show function. Overidable function
  311. // Return type : void 
  312. // Argument         : CRect rect
  313. // Argument         : LPARAM lParam
  314. void CControlsWnd_CComboBox::Show(LPARAM lParam)
  315. {
  316. if (::IsWindow(m_dropListBox.GetSafeHwnd()))
  317. {
  318. CControlsWnd::Show(lParam);
  319. m_dropListBox.Show(GetRect(), 8);
  320. if (m_dropListBox.SelectString(-1, GetDefaultValue()) == LB_ERR)
  321. m_dropListBox.SetCurSel(0);
  322. }
  323. }
  324. // Function name : CControlsWnd_CComboBox::OnSelectItem
  325. // Description     : The Item nItem was select.
  326. // Return type : void 
  327. // Argument         : int nItem
  328. void CControlsWnd_CComboBox::OnSelectItem(CString& newValue, LPARAM lParam)
  329. {
  330. if (::IsWindow(m_dropListBox.GetSafeHwnd()))
  331. {
  332. m_dropListBox.GetText(lParam, newValue);
  333. }
  334. CControlsWnd::OnSelectItem(newValue, lParam);
  335. };
  336. // Function name : CControlsWnd_CComboBox::Load
  337. // Description     : 
  338. // Return type : void 
  339. void CControlsWnd_CComboBox::Load()
  340. {
  341. if (::IsWindow(m_dropListBox.GetSafeHwnd()))
  342. {
  343. BSTR bItems = NULL;
  344. GetControl()->FireLoadItems(GetControl()->_GetActivePage(), m_nSelectedItem, &bItems);
  345. if (bItems)
  346. {
  347. CString items(bItems);
  348. ::SysFreeString(bItems);
  349. m_dropListBox.Load(items);
  350. }
  351. }
  352. CControlsWnd::Load();
  353. };
  354. // Function name : CControlsWnd_CComboBox::OnNextItem
  355. // Description     : 
  356. // Return type : void 
  357. // Argument         : int nItem
  358. void CControlsWnd_CComboBox::OnNextItem()
  359. {
  360. if (::IsWindow(m_dropListBox.GetSafeHwnd()))
  361. {
  362. if (m_dropListBox.SetCurSel(m_dropListBox.FindString(-1, GetDefaultValue()) + 1) == LB_ERR)
  363. m_dropListBox.SetCurSel(0);
  364. m_dropListBox.SelChange();
  365. }
  366. CControlsWnd::OnNextItem();
  367. }
  368. // Function name : CControlsWnd_CComboBox::Close
  369. // Description     : Called by window when this must be closed
  370. // Return type : void 
  371. // Argument         : BOOL bCancel
  372. void CControlsWnd_CComboBox::Close(BOOL bCancel)
  373. {
  374. CControlsWnd::Close(bCancel);
  375. }
  376. #include <atlconv.h>
  377. // Function name : CreateOleFont
  378. // Description     : Create a IFontDisp interface for font pFont. 
  379. // Return type : IDispatch* 
  380. // Argument         : CFont* pFont
  381. IDispatch* CreateOleFont(CFont* pFont)
  382. {
  383. IDispatch* pDispatch = NULL;
  384. USES_CONVERSION;
  385. if (pFont)
  386. {
  387. LOGFONT logfont;
  388. if (pFont->GetLogFont(&logfont))
  389. {
  390. LOGFONT* pLogFont = &logfont;
  391. FONTDESC fd;
  392. fd.cbSizeofstruct = sizeof(FONTDESC);
  393. fd.lpstrName = T2OLE(pLogFont->lfFaceName);
  394. fd.sWeight = (short)pLogFont->lfWeight;
  395. fd.sCharset = pLogFont->lfCharSet;
  396. fd.fItalic = pLogFont->lfItalic;
  397. fd.fUnderline = pLogFont->lfUnderline;
  398. fd.fStrikethrough = pLogFont->lfStrikeOut;
  399. long lfHeight = pLogFont->lfHeight;
  400. if (lfHeight < 0)
  401. lfHeight = -lfHeight;
  402. fd.cySize.Lo = lfHeight * 720000 / 96;
  403. fd.cySize.Hi = 0;
  404. if (FAILED(::OleCreateFontIndirect(&fd, IID_IFontDisp, (void**)&pDispatch)))
  405. pDispatch = NULL;
  406. }
  407. }
  408. return pDispatch;
  409. }
  410. // Function name : CreateFontDisp
  411. // Description     : Create a font from a IFont interface
  412. // Return type : BOOL 
  413. // Argument         : IDispatch* pDispatchFont
  414. // Argument         : CFont& font
  415. BOOL CreateFontDisp(IDispatch* pDispatchFont, CFont& font)
  416. {
  417. HFONT hFont = NULL;
  418. TRY
  419. {
  420. IFont* pIFont = NULL;
  421. if (!FAILED(pDispatchFont->QueryInterface(IID_IFont, (void**)&pIFont)))
  422. if (!FAILED(pIFont->get_hFont(&hFont)))
  423. {
  424. LOGFONT logFont;
  425. CFont::FromHandle(hFont)->GetLogFont(&logFont);
  426. pIFont->Release();
  427. return font.CreateFontIndirect(&logFont);
  428. }
  429. }
  430. CATCH_ALL(e)
  431. {
  432. e->Delete();
  433. }
  434. END_CATCH_ALL;
  435. return FALSE;
  436. }
  437. //////////////////////////////////////////////////////////////////////
  438. // CControlsWnd_CNComboBox Class
  439. //////////////////////////////////////////////////////////////////////
  440. //////////////////////////////////////////////////////////////////////
  441. // Construction/Destruction
  442. //////////////////////////////////////////////////////////////////////
  443. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CNComboBox, CControlsWnd_CComboBox);
  444. IMPLEMENT_DYNAMIC(CControlsWnd_CNComboBox,CControlsWnd_CComboBox)
  445. // Function name : CControlsWnd_CNComboBox::CControlsWnd_CNComboBox
  446. // Description     : Default constuctor
  447. // Return type : 
  448. CControlsWnd_CNComboBox::CControlsWnd_CNComboBox()
  449. {
  450. }
  451. // Function name : CControlsWnd_CNComboBox::~CControlsWnd_CNComboBox
  452. // Description     : virtual destructor
  453. // Return type : 
  454. CControlsWnd_CNComboBox::~CControlsWnd_CNComboBox()
  455. {
  456. }
  457. // Function name : CControlsWnd_CNComboBox::Create
  458. // Description     : Create the NCombo control...
  459. // Return type : CWnd* 
  460. CWnd* CControlsWnd_CNComboBox::Create()
  461. {
  462. if (m_wndNCBox.Create(NULL, WS_CHILD, CRect(0,0,0,0), GetWindowNotify(), IDNCOMBOBOX))
  463. {
  464. Add2NDelete(this);
  465. m_wndNCBox.SetDropDownHeight( 128 ) ;
  466. return &m_wndNCBox;
  467. }
  468. return NULL;
  469. }
  470. // Function name : CControlsWnd_CNComboBox::Show
  471. // Description     : Show the NCombo control
  472. // Return type : void 
  473. // Argument         : LPARAM lParam
  474. void CControlsWnd_CNComboBox::Show(LPARAM lParam)
  475. {
  476. if (::IsWindow(m_wndNCBox.GetSafeHwnd()))
  477. {
  478. CControlsWnd::Show(lParam);
  479. CRect rect = GetRect();
  480. rect.InflateRect(CSize(0, (m_wndNCBox.GetHeaderHeight() - rect.Height())/2));
  481. rect.right -= 3;
  482. m_wndNCBox.MoveWindow(rect);
  483. m_wndNCBox.ShowWindow(SW_SHOW);
  484. m_wndNCBox.DropDown(TRUE);
  485. }
  486. }
  487. // Function name : CControlsWnd_CNComboBox::OnNextItem
  488. // Description     : Just show it.
  489. // Return type : void 
  490. void CControlsWnd_CNComboBox::OnNextItem()
  491. {
  492. Show();
  493. }
  494. // Function name : CControlsWnd_CNComboBox::Close
  495. // Description     : Do not destroy the window
  496. // Return type : void 
  497. // Argument         : BOOL bCancel
  498. void CControlsWnd_CNComboBox::Close(BOOL bCancel)
  499. {
  500. // do nothing;
  501. }
  502. // Function name : CControlsWnd_CNComboBox::Delete
  503. // Description     : 
  504. // Return type : CControlsWnd* 
  505. CControlsWnd* CControlsWnd_CNComboBox::Delete()
  506. {
  507. if (::IsWindow(m_wndNCBox.GetSafeHwnd()))
  508. {
  509. // How the control is not destroyed , instead this is hidden
  510. m_wndNCBox.DropDown(FALSE);
  511. m_wndNCBox.ShowWindow(SW_HIDE);
  512. }
  513. return NULL;
  514. }
  515. // Function name : CControlsWnd::GetValue
  516. // Description     : Return the value as variant from nColumn
  517. // If nColumn == -1 return Item Data
  518. // Return type : VARIANT 
  519. // Argument         : long nColumn
  520. VARIANT CControlsWnd_CNComboBox::GetValue(long nColumn)
  521. {
  522. VARIANT v;
  523. VariantClear(&v);
  524. if (::IsWindow(m_wndNCBox.m_hWnd))
  525. {
  526. long nItem = m_wndNCBox.GetSelectItem();
  527. if ( nItem >= 0 )
  528. {
  529. VariantInit(&v);
  530. if (nColumn >= 0)
  531. if (nColumn < m_wndNCBox.GetColumnCount())
  532. {
  533. v.vt = VT_BSTR;
  534. v.bstrVal = m_wndNCBox.GetItemText(nItem, nColumn).AllocSysString();
  535. return v;
  536. };
  537. v.vt = VT_I4;
  538. v.lVal = m_wndNCBox.GetItemData(nItem);
  539. }
  540. }
  541. return v;
  542. }
  543. // Function name : CControlsWnd_CNComboBox::OnSelectItem
  544. // Description     : Called by CPageListCtrl::OnChangedItem, when selection from NCombo is changed
  545. // Return type : void 
  546. // Argument         : CString& newValue
  547. // Argument         : LPARAM lParam
  548. void CControlsWnd_CNComboBox::OnSelectItem(CString& newValue, LPARAM lParam)
  549. {
  550. newValue.Empty();
  551. if (int nCount = m_wndNCBox.GetColumnCount())
  552. {
  553. for (int i = 0; i < nCount - 1; i++)
  554. newValue += m_wndNCBox.GetItemText(lParam, i) + _T(" | ");
  555. newValue += m_wndNCBox.GetItemText(lParam, nCount - 1);
  556. CControlsWnd_CComboBox::OnSelectItem(newValue, NULL);
  557. }
  558. }
  559. //////////////////////////////////////////////////////////////////////
  560. // CControlsWnd_CNADORComboBox Class
  561. //////////////////////////////////////////////////////////////////////
  562. //////////////////////////////////////////////////////////////////////
  563. // Construction/Destruction
  564. //////////////////////////////////////////////////////////////////////
  565. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CNADORComboBox, CControlsWnd_CNComboBox);
  566. IMPLEMENT_DYNAMIC(CControlsWnd_CNADORComboBox, CControlsWnd_CNComboBox)
  567. // Function name : CControlsWnd_CNADORComboBox::CControlsWnd_CNADORComboBox
  568. // Description     : Default constuctor
  569. // Return type : 
  570. CControlsWnd_CNADORComboBox::CControlsWnd_CNADORComboBox()
  571. {
  572. m_bLoaded = FALSE;
  573. }
  574. // Function name : CControlsWnd_CNADORComboBox::~CControlsWnd_CNADORComboBox
  575. // Description     : virtual destructor
  576. // Return type : 
  577. CControlsWnd_CNADORComboBox::~CControlsWnd_CNADORComboBox()
  578. {
  579. }
  580. // Function name : CControlsWnd_CNADORComboBox::Load
  581. // Description     : Load the item from one recordset
  582. // Return type : void 
  583. void CControlsWnd_CNADORComboBox::Load()
  584. {
  585. if (!m_bLoaded)
  586. {
  587. LPDISPATCH pObjectDispatch = NULL;
  588. // Call a event, so user must set the pObjectDispatch as a distaptch to a ADOR.Recordset 
  589. GetControl()->FireSetObject(GetWindowNotify()->GetIndexPage(), m_nSelectedItem, &pObjectDispatch);
  590. if (pObjectDispatch)
  591. {
  592. TRY
  593. {
  594. CADORRecordset rs(pObjectDispatch);
  595. pObjectDispatch->AddRef();
  596. CADORFields fields(rs.GetFields());
  597. int nFields = fields.GetCount();
  598. for (int i = 0; i < nFields; i++)
  599. m_wndNCBox.InsertColumn(i, CADORField(fields.GetItem(COleVariant((long)i))).GetName(), 128, 0, TRUE, TRUE);
  600. int nCount = 0;
  601. rs.MoveFirst();
  602. while (!rs.GetEof())
  603. {
  604. int nItem = m_wndNCBox.InsertItem(nCount++, _T(""));
  605. m_wndNCBox.SetItemData(nItem, rs.GetAbsolutePosition());
  606. for (int i = 0; i < nFields; i++)
  607. m_wndNCBox.SetItemText(nItem, i, ::GetValue(&CADORField(fields.GetItem(COleVariant((long)i)))));
  608. rs.MoveNext();
  609. };
  610. m_bLoaded = TRUE;
  611. }
  612. CATCH_ALL(e)
  613. {
  614. TRACE(_T("Something is wrong here.n"));
  615. CString text;
  616. if (e)
  617. e->GetErrorMessage(text.GetBuffer(1024), 1024);
  618. AfxMessageBox(text);
  619. }
  620. END_CATCH_ALL;
  621. }
  622. }
  623. }
  624. //////////////////////////////////////////////////////////////////////
  625. // CControlsWnd_CBoolComboBox Class
  626. //////////////////////////////////////////////////////////////////////
  627. //////////////////////////////////////////////////////////////////////
  628. // Construction/Destruction
  629. //////////////////////////////////////////////////////////////////////
  630. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CBoolComboBox,CControlsWnd_CComboBox);
  631. IMPLEMENT_DYNAMIC( CControlsWnd_CBoolComboBox,CControlsWnd_CComboBox )
  632. // Function name : CControlsWnd_CBoolComboBox::CControlsWnd_CBoolComboBox
  633. // Description     : default constuctor
  634. // Return type : 
  635. CControlsWnd_CBoolComboBox::CControlsWnd_CBoolComboBox()
  636. {
  637. }
  638. // Function name : CControlsWnd_CBoolComboBox::~CControlsWnd_CBoolComboBox
  639. // Description     : virtual destructor
  640. // Return type : 
  641. CControlsWnd_CBoolComboBox::~CControlsWnd_CBoolComboBox()
  642. {
  643. }
  644. // Function name : CControlsWnd_CBoolComboBox::Load
  645. // Description     : Overidable function
  646. // Return type : void 
  647. void CControlsWnd_CBoolComboBox::Load()
  648. {
  649. // Eventiment
  650. if (::IsWindow(m_dropListBox.GetSafeHwnd()))
  651. m_dropListBox.Load(_T("False\True"));
  652. CControlsWnd::Load();
  653. }
  654. // Function name : CControlsWnd_CBoolComboBox::Show
  655. // Description     : 
  656. // Return type : void 
  657. void CControlsWnd_CBoolComboBox::Show(LPARAM lParam )
  658. {
  659. CControlsWnd_CComboBox::Show(2);
  660. }
  661. //////////////////////////////////////////////////////////////////////
  662. // CControlsWnd_CEdit Class
  663. //////////////////////////////////////////////////////////////////////
  664. //////////////////////////////////////////////////////////////////////
  665. // Construction/Destruction
  666. //////////////////////////////////////////////////////////////////////
  667. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CEdit,CControlsWnd);
  668. IMPLEMENT_DYNAMIC(CControlsWnd_CEdit,CControlsWnd)
  669. // Function name : CControlsWnd_CEdit::CControlsWnd_CEdit
  670. // Description     : Default constructor
  671. // Return type : 
  672. CControlsWnd_CEdit::CControlsWnd_CEdit()
  673. {
  674. }
  675. // Function name : CControlsWnd_CEdit::~CControlsWnd_CEdit
  676. // Description     : 
  677. // Return type : 
  678. CControlsWnd_CEdit::~CControlsWnd_CEdit()
  679. {
  680. }
  681. // Function name : CControlsWnd_CEdit::Create
  682. // Description     : 
  683. // Return type : CWnd* 
  684. CWnd* CControlsWnd_CEdit::Create()
  685. {
  686. if (m_dropEdit.Create(this))
  687. {
  688. m_dropEdit.SetEditColor(GetControl()->m_rgbEditColor);
  689. return &m_dropEdit;
  690. }
  691. return NULL;
  692. }
  693. // Function name : CControlsWnd_CEdit::Show
  694. // Description     : Show the control
  695. // Return type : void 
  696. // Argument         : LPARAM lParam
  697. void CControlsWnd_CEdit::Show(LPARAM lParam)
  698. {
  699. if (::IsWindow(m_dropEdit.GetSafeHwnd()))
  700. {
  701. CControlsWnd::Show(lParam);
  702. CRect rect = GetRect();
  703. rect.top += 2; rect.left += 2;
  704. m_dropEdit.SetWindowText(GetDefaultValue());
  705. m_dropEdit.Show(rect);
  706. }
  707. }
  708. // Function name : CControlsWnd_CEdit::Close
  709. // Description     : 
  710. // Return type : void 
  711. // Argument         : BOOL bCancel
  712. void CControlsWnd_CEdit::Close(BOOL bCancel)
  713. {
  714. // Do nothing
  715. }
  716. // Function name : OnSelectItem
  717. // Description     : 
  718. // Return type : void 
  719. // Argument         : LPARAM lParam
  720. void CControlsWnd_CEdit::OnSelectItem(CString& newValue, LPARAM lParam)
  721. {
  722. if (::IsWindow(m_dropEdit.GetSafeHwnd()))
  723. m_dropEdit.GetWindowText(newValue);
  724. CControlsWnd::OnSelectItem(newValue, lParam);
  725. }
  726. //////////////////////////////////////////////////////////////////////
  727. // CControlsWnd_CButton Class
  728. //////////////////////////////////////////////////////////////////////
  729. //////////////////////////////////////////////////////////////////////
  730. // Construction/Destruction
  731. //////////////////////////////////////////////////////////////////////
  732. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CButton,CControlsWnd);
  733. IMPLEMENT_DYNAMIC(CControlsWnd_CButton,CControlsWnd)
  734. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CReturn, CControlsWnd_CButton);
  735. IMPLEMENT_DYNAMIC(CControlsWnd_CReturn, CControlsWnd_CButton)
  736. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CLink, CControlsWnd_CButton);
  737. IMPLEMENT_DYNAMIC(CControlsWnd_CLink, CControlsWnd_CButton)
  738. // Function name : CControlsWnd_CButton::CControlsWnd_CButton
  739. // Description     : Default constructor
  740. // Return type : 
  741. CControlsWnd_CButton::CControlsWnd_CButton()
  742. {
  743. }
  744. // Function name : CControlsWnd_CButton::~CControlsWnd_CButton
  745. // Description     : 
  746. // Return type : 
  747. CControlsWnd_CButton::~CControlsWnd_CButton()
  748. {
  749. }
  750. // Function name : CControlsWnd_CButton::Create
  751. // Description     : Overidable function.
  752. // Return type : CWnd* 
  753. CWnd* CControlsWnd_CButton::Create()
  754. {
  755. return &m_button;
  756. }
  757. // Function name : CControlsWnd_CButton::OnNextItem
  758. // Description     : On NextItem call Show fucntion
  759. // Return type : void 
  760. void CControlsWnd_CButton::OnNextItem()
  761. {
  762. Show(1);
  763. }
  764. // Function name : CControlsWnd_CButton::Show
  765. // Description     : 
  766. // Return type : void 
  767. // Argument         : LPARAM lParam
  768. void CControlsWnd_CButton::Show(LPARAM lParam)
  769. {
  770. CControlsWnd::Show(lParam);
  771. GetControl()->FireButtonClick(GetControl()->_GetActivePage(), m_nSelectedItem);
  772. // In ButonClick you have the oprotunities to remove this pointer
  773. if (!AfxIsValidAddress(this, sizeof(*this), TRUE))
  774. {
  775. CString newValue = GetDefaultValue();
  776. OnSelectItem(newValue, 0);
  777. }
  778. }
  779. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CFont,CControlsWnd_CButton);
  780. IMPLEMENT_DYNAMIC(CControlsWnd_CFont,CControlsWnd_CButton)
  781. static const LOGFONT logFontDefault =
  782. {
  783. /*LONG lfHeight*/10,
  784. /*LONG lfWidth*/0,
  785. /*LONG lfEscapement*/0,
  786. /*LONG lfOrientation*/0,
  787. /*LONG lfWeight*/FW_NORMAL,
  788. /*BYTE lfItalic*/FALSE,
  789. /*BYTE lfUnderline*/FALSE,
  790. /*BYTE lfStrikeOut*/FALSE,
  791. /*BYTE lfCharSet*/ANSI_CHARSET,
  792. /*BYTE lfOutPrecision*/0,
  793. /*BYTE lfClipPrecision*/0,
  794. /*BYTE lfQuality*/DEFAULT_QUALITY,
  795. /*BYTE lfPitchAndFamily*/DEFAULT_PITCH,
  796. /*CHAR lfFaceName[LF_FACESIZE]*/_T("MS Sans Serif")
  797. };
  798. // Function name : CControlsWnd_CFont::CControlsWnd_CFont
  799. // Description     : Init the logfont structure, with one default
  800. // Return type : 
  801. CControlsWnd_CFont::CControlsWnd_CFont():m_rgbColor(RGB(0,0,0))
  802. {
  803. m_logFont = logFontDefault;
  804. }
  805. // Function name : CControlsWnd_CFont::Create
  806. // Description     : This control will not be deleted
  807. // Return type : CWnd* 
  808. CWnd* CControlsWnd_CFont::Create()
  809. {
  810. CWnd* pResult = CControlsWnd_CButton::Create();
  811. if (pResult)
  812. Add2NDelete(this);
  813. return pResult;
  814. }
  815. void CControlsWnd_CFont::OnSelectItem(CString& newValue, LPARAM lParam)
  816. {
  817. CString sOldProperty = GetDefaultValue();
  818. GetWindowNotify()->SetDefaultValue(m_nSelectedItem, (LPCTSTR)newValue);
  819. CXPropertiesWndCtrl* pControl = GetControl();
  820. pControl->FirePropertyChanged(pControl->_GetActivePage(), m_nSelectedItem, TRUE);
  821. }
  822. // Function name : CControlsWnd_CFont::GetSize
  823. // Description     : return the size of font as CY structure
  824. // Return type : CY 
  825. CY CControlsWnd_CFont::GetSize()
  826. {
  827. CY cyResult; 
  828. cyResult.int64 = -MulDiv(m_logFont.lfHeight,72*10000,96);
  829. return cyResult;
  830. }
  831. // Function name : CControlsWnd_CFont::GetHeight
  832. // Description     : Return the height of font from size
  833. // Return type : long 
  834. // Argument         : CY size
  835. long CControlsWnd_CFont::GetHeight(CY size)
  836. {
  837. return -MulDiv(size.Lo, 96, 72*10000);
  838. }
  839. #include <atlbase.h>
  840. void CControlsWnd_CFont::SetValue(VARIANT vVariant, long nColumn)
  841. {
  842. TRY
  843. {
  844. switch (vVariant.vt)
  845. {
  846. case VT_I2:
  847. case VT_UI2:
  848. case VT_I4:
  849. case VT_UI4:
  850. {
  851. COleVariant v(vVariant);
  852. v.ChangeType(VT_UI4);
  853. m_rgbColor = v.ulVal;
  854. return;
  855. }
  856. case VT_DISPATCH:
  857. {
  858. if (vVariant.pdispVal)
  859. {
  860. COleFont oleFont(vVariant.pdispVal);
  861. vVariant.pdispVal->AddRef();
  862. m_logFont.lfStrikeOut = oleFont.GetStrikethrough();
  863. m_logFont.lfItalic = oleFont.GetItalic();
  864. m_logFont.lfUnderline = oleFont.GetUnderline();
  865. m_logFont.lfWeight = oleFont.GetWeight();
  866. m_logFont.lfCharSet = (BYTE)oleFont.GetCharset();
  867. m_logFont.lfHeight = GetHeight(oleFont.GetSize());
  868. memcpy(&m_logFont.lfFaceName, (LPCTSTR)oleFont.GetName(), oleFont.GetName().GetLength() + 1);
  869. GetWindowNotify()->SetDefaultValue(GetSelectedItem(), GetName());
  870. }
  871. return;
  872. }
  873. default:
  874. {
  875. CControlsWnd_CButton::SetValue(vVariant, nColumn);
  876. return ;
  877. }
  878. }
  879. }
  880. CATCH_ALL(e)
  881. {
  882. CString text;
  883. e->GetErrorMessage(text.GetBuffer(1024), 1024);
  884. TRACE(_T("Error: %s"), text);
  885. e->Delete();
  886. }
  887. END_CATCH_ALL;
  888. }
  889. // Function name : CControlsWnd_CFont::GetValue
  890. // Description     : For 0 return VT_FONT,
  891. // 1 return color of font
  892. // Return type : VARIANT 
  893. // Argument         : long nColumn
  894. VARIANT CControlsWnd_CFont::GetValue(long nColumn)
  895. {
  896. VARIANT v;
  897. VariantInit(&v);
  898. switch (nColumn)
  899. {
  900. case 0:
  901. {
  902. CComPtr<IFont> font;
  903. if (SUCCEEDED(font.CoCreateInstance(CLSID_StdFont)))
  904. {
  905. IFont* pIFont = font.p;
  906. pIFont->AddRef();
  907. pIFont->put_Name(CString(m_logFont.lfFaceName).AllocSysString());
  908. pIFont->put_Bold(m_logFont.lfWeight == FW_BOLD);
  909. pIFont->put_Italic(m_logFont.lfItalic);
  910. pIFont->put_Charset(m_logFont.lfCharSet);
  911. pIFont->put_Size(GetSize());
  912. pIFont->put_Weight((SHORT)m_logFont.lfWeight);
  913. pIFont->put_Strikethrough(m_logFont.lfStrikeOut);
  914. pIFont->put_Underline(m_logFont.lfUnderline);
  915. v.vt = VT_DISPATCH;
  916. v.pdispVal = (IDispatch*)pIFont;
  917. }
  918. break;
  919. }
  920. case 1:
  921. {
  922. v.vt = VT_UI4;
  923. v.ulVal = m_rgbColor;
  924. break;
  925. }
  926. default:
  927. {
  928. return CControlsWnd_CButton::GetValue(nColumn);
  929. }
  930. }
  931. return v;
  932. }
  933. // Function name : CControlsWnd_CFont::SetLogFont
  934. // Description     : Set the new log font as default value
  935. // Return type : void 
  936. // Argument         : LOGFONT* pLogFont
  937. void CControlsWnd_CFont::SetLogFont(LOGFONT* pLogFont)
  938. {
  939. ASSERT (pLogFont);
  940. memcpy(&m_logFont, pLogFont, sizeof(m_logFont));
  941. }
  942. // Function name : CControlsWnd_CFont::SetColorFont
  943. // Description     : 
  944. // Return type : void 
  945. // Argument         : COLORREF rgbColor
  946. void CControlsWnd_CFont::SetColorFont(COLORREF rgbColor)
  947. {
  948. m_rgbColor = rgbColor;
  949. }
  950. // Function name : CControlsWnd_CFont::GetName
  951. // Description     : 
  952. // Return type : CString 
  953. CString CControlsWnd_CFont::GetName()
  954. {
  955. CString sResult;
  956. sResult.Format(_T("%s, %.2f"), m_logFont.lfFaceName , (float)GetSize().Lo / 10000);
  957. return sResult;
  958. }
  959. // Function name : CControlsWnd_CFont::Show
  960. // Description     : Show the coose font dialog
  961. // Return type : void 
  962. // Argument         : LPARAM lParam
  963. void CControlsWnd_CFont::Show(LPARAM lParam)
  964. {
  965. CControlsWnd::Show(lParam);
  966. CFontDialog* pFontWnd = new CFontDialog(&m_logFont);
  967. pFontWnd->m_cf.rgbColors = m_rgbColor;
  968. if (pFontWnd->DoModal() == IDOK)
  969. {
  970. pFontWnd->GetCurrentFont(&m_logFont);
  971. m_rgbColor = pFontWnd->GetColor();
  972. CString sNewValue = GetName();
  973. OnSelectItem(sNewValue, lParam);
  974. }
  975. delete pFontWnd;
  976. }
  977. // Function name : CControlsWnd_CFont::Delete
  978. // Description     : Don't delete this
  979. // Return type : CControlsWnd* 
  980. CControlsWnd* CControlsWnd_CFont::Delete()
  981. {
  982. return NULL;
  983. }
  984. // Function name : CControlsWnd_CFont::GetLogFont
  985. // Description     : 
  986. // Return type : LOGFONT& 
  987. LOGFONT* CControlsWnd_CFont::GetLogFont()
  988. {
  989. return &m_logFont;
  990. }
  991. COLORREF CControlsWnd_CFont::GetColorFont()
  992. {
  993. return m_rgbColor;
  994. }
  995. //////////////////////////////////////////////////////////////////////
  996. // CControlsWnd_CUserComboBox Class
  997. //////////////////////////////////////////////////////////////////////
  998. //////////////////////////////////////////////////////////////////////
  999. // Construction/Destruction
  1000. //////////////////////////////////////////////////////////////////////
  1001. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CUserComboBox,CControlsWnd);
  1002. IMPLEMENT_DYNAMIC(CControlsWnd_CUserComboBox,CControlsWnd)
  1003. // Function name : CControlsWnd_CUserComboBox::CControlsWnd_CUserComboBox
  1004. // Description     : Default constructor
  1005. // Return type : 
  1006. CControlsWnd_CUserComboBox::CControlsWnd_CUserComboBox()
  1007. {
  1008. }
  1009. // Function name : CControlsWnd_CUserComboBox::~CControlsWnd_CUserComboBox
  1010. // Description     : 
  1011. // Return type : 
  1012. CControlsWnd_CUserComboBox::~CControlsWnd_CUserComboBox()
  1013. {
  1014. }
  1015. // Function name : CControlsWnd_CUserComboBox::Create
  1016. // Description     : 
  1017. // Return type : CWnd* 
  1018. CWnd* CControlsWnd_CUserComboBox::Create()
  1019. {
  1020. // Not implemented yet.
  1021. return NULL;
  1022. }
  1023. // Function name : CControlsWnd_CUserComboBox::Show
  1024. // Description     : 
  1025. // Return type : void 
  1026. // Argument         : LPARAM lParam
  1027. void CControlsWnd_CUserComboBox::Show(LPARAM lParam )
  1028. {
  1029. // Not implemented yet.
  1030. }
  1031. // Function name : CControlsWnd_CUserComboBox::Close
  1032. // Description     : 
  1033. // Return type : void 
  1034. // Argument         : BOOL bCancel
  1035. void CControlsWnd_CUserComboBox::Close(BOOL bCancel)
  1036. {
  1037. // Not implemented yet.
  1038. }
  1039. // Function name : CControlsWnd_CUserComboBox::OnSelectItem
  1040. // Description     : 
  1041. // Return type : void 
  1042. // Argument         : CString& newValue
  1043. // Argument         : LPARAM lParam
  1044. void CControlsWnd_CUserComboBox::OnSelectItem(CString& newValue, LPARAM lParam)
  1045. {
  1046. // Not implemented yet.
  1047. }
  1048. // Function name : CControlsWnd_CUserComboBox::OnNextItem
  1049. // Description     : // Not implemented yet.
  1050. // Return type : void 
  1051. void CControlsWnd_CUserComboBox::OnNextItem()
  1052. {
  1053. }
  1054. //////////////////////////////////////////////////////////////////////
  1055. // CControlsWnd_CColorComboBox Class
  1056. //////////////////////////////////////////////////////////////////////
  1057. //////////////////////////////////////////////////////////////////////
  1058. // Construction/Destruction
  1059. //////////////////////////////////////////////////////////////////////
  1060. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CColorComboBox,CControlsWnd);
  1061. IMPLEMENT_DYNAMIC(CControlsWnd_CColorComboBox,CControlsWnd)
  1062. // Function name : CControlsWnd_CColorComboBox::CControlsWnd_CColorComboBox
  1063. // Description     : Default constructor
  1064. // Return type : 
  1065. CControlsWnd_CColorComboBox::CControlsWnd_CColorComboBox()
  1066. {
  1067. }
  1068. // Function name : CControlsWnd_CColorComboBox::~CControlsWnd_CColorComboBox
  1069. // Description     : 
  1070. // Return type : 
  1071. CControlsWnd_CColorComboBox::~CControlsWnd_CColorComboBox()
  1072. {
  1073. }
  1074. // Function name : CControlsWnd_CColorComboBox::GetValue
  1075. // Description     : Return the selected color as ULONG value
  1076. // Return type : VARIANT 
  1077. // Argument         : long nColumn
  1078. VARIANT CControlsWnd_CColorComboBox::GetValue(long nColumn)
  1079. {
  1080. VARIANT v;
  1081. VariantInit(&v);
  1082. switch (nColumn)
  1083. {
  1084. case 0:
  1085. {
  1086. v.vt = VT_UI4;
  1087. v.ulVal = GetColor(GetDefaultValue());
  1088. break;
  1089. }
  1090. default:
  1091. {
  1092. return CControlsWnd::GetValue(nColumn);
  1093. }
  1094. }
  1095. return v;
  1096. }
  1097. // Function name : CControlsWnd_CColorComboBox::SetValue
  1098. // Description     : Set a new color for this
  1099. // Return type : void 
  1100. // Argument         : VARIANT vVariant
  1101. // Argument         : long nColumn
  1102. void CControlsWnd_CColorComboBox::SetValue(VARIANT vVariant, long nColumn)
  1103. {
  1104. switch (vVariant.vt)
  1105. {
  1106. case VT_I2:
  1107. case VT_UI2:
  1108. case VT_UI4:
  1109. case VT_I4:
  1110. {
  1111. COleVariant v(vVariant);
  1112. v.ChangeType(VT_UI4);
  1113. GetWindowNotify()->SetDefaultValue(GetSelectedItem(), GetName(v.ulVal));
  1114. break;
  1115. }
  1116. default:
  1117. {
  1118. CControlsWnd::SetValue(vVariant, nColumn);
  1119. break;
  1120. }
  1121. }
  1122. }
  1123. // Function name : CControlsWnd_CColorComboBox::GetName
  1124. // Description     : 
  1125. // Return type : CString 
  1126. // Argument         : COLORREF color
  1127. CString CControlsWnd_CColorComboBox::GetName(COLORREF color)
  1128. {
  1129. CString sColor, sText;
  1130. sColor.Format(_T("%08X"), color);
  1131. sColor = sColor.Mid(2);
  1132. sText.Format(_T("&&H%s (%s)"), sColor, CColourPopup::GetColourName(CColourPopup::FindColor(color)));
  1133. return sText;
  1134. }
  1135. // Function name : CControlsWnd_CColorComboBox::Create
  1136. // Description     : 
  1137. // Return type : CWnd* 
  1138. CWnd* CControlsWnd_CColorComboBox::Create()
  1139. {
  1140. if (m_btnPicker.Create(NULL, WS_CHILD, GetRect(), GetWindowNotify(), 0))
  1141. {
  1142. m_btnPicker.SendMessage(WM_COMMAND, MAKEWPARAM(BN_CLICKED, m_btnPicker.GetDlgCtrlID()), (long)m_btnPicker.m_hWnd);
  1143. return &m_btnPicker;
  1144. }
  1145. return NULL;
  1146. }
  1147. HHOOK CControlsWnd_CColorComboBox::m_hHook = NULL;
  1148. CControlsWnd_CColorComboBox* CControlsWnd_CColorComboBox::m_pThis = NULL;
  1149. LRESULT CALLBACK CControlsWnd_CColorComboBox::HookColourPopupWndProc( int nCode, WPARAM wParam, LPARAM lParam )
  1150. {
  1151. if (nCode >= 0)
  1152. {
  1153. CWPSTRUCT* pMessage = (CWPSTRUCT*)lParam;
  1154. if (pMessage->message == WM_DESTROY)
  1155. {
  1156. LRESULT lResult = ::CallNextHookEx(m_hHook, nCode, wParam, lParam);
  1157. m_pThis->OnDestroy();
  1158. return lResult;
  1159. }
  1160. }
  1161. return ::CallNextHookEx(m_hHook, nCode, wParam, lParam);
  1162. }
  1163. // Function name : CControlsWnd_CColorComboBox::Show
  1164. // Description     : 
  1165. // Return type : void 
  1166. // Argument         : LPARAM lParam
  1167. void CControlsWnd_CColorComboBox::Show(LPARAM lParam )
  1168. {
  1169. if (::IsWindow(m_btnPicker.GetSafeHwnd()))
  1170. {
  1171. m_btnPicker.SendMessage(WM_COMMAND, MAKEWPARAM(BN_CLICKED, m_btnPicker.GetDlgCtrlID()), (long)m_btnPicker.m_hWnd);
  1172. if (CColourPopup* pWndColor = m_btnPicker.m_pWndColor)
  1173. {
  1174. // Propage the PropertyChanging event
  1175. CControlsWnd::Show(lParam);
  1176. CRect rect;
  1177. pWndColor->GetWindowRect(rect);
  1178. CRect rButton = GetRect();
  1179. GetWindowNotify()->ClientToScreen(rButton);
  1180. rect.OffsetRect(rButton.right - rect.right, 0);
  1181. pWndColor->MoveWindow(rect);
  1182. pWndColor->m_WindowRect = rect;
  1183. COLORREF crColour = GetColor(GetDefaultValue());
  1184. pWndColor->m_crColour = pWndColor->m_crInitialColour = crColour;
  1185. pWndColor->FindCellFromColour(crColour);
  1186. pWndColor->ShowWindow(SW_SHOW);
  1187. DWORD dxProcessID = NULL;
  1188. m_pThis = this;
  1189. m_hHook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)HookColourPopupWndProc, AfxGetInstanceHandle(), GetWindowThreadProcessId(pWndColor->m_hWnd, &dxProcessID));
  1190. RefreshColor();
  1191. }
  1192. }
  1193. }
  1194. // Function name : CControlsWnd_CColorComboBox::Close
  1195. // Description     : 
  1196. // Return type : void 
  1197. // Argument         : BOOL bCancel
  1198. void CControlsWnd_CColorComboBox::Close(BOOL bCancel)
  1199. {
  1200. }
  1201. // Function name : CControlsWnd_CColorComboBox::OnDestroy
  1202. // Description     : This is called by the hook procedure when color picker is on destory
  1203. // Return type : void 
  1204. void CControlsWnd_CColorComboBox::OnDestroy()
  1205. {
  1206. ::UnhookWindowsHookEx(m_hHook);
  1207. if (CColourPopup* pWndColor = m_btnPicker.m_pWndColor)
  1208. {
  1209. CString sText = GetName(pWndColor->m_crColour);
  1210. // Propage the PropertyChanged event
  1211. OnSelectItem(sText, m_nSelectedItem);
  1212. }
  1213. GetWindowNotify()->SetFocus();
  1214. }
  1215. // Function name : CControlsWnd_CColorComboBox::GetColor
  1216. // Description     : 
  1217. // Return type : COLORREF 
  1218. // Argument         : CString sColor
  1219. COLORREF CControlsWnd_CColorComboBox::GetColor(CString sColor)
  1220. {
  1221. if (sColor.IsEmpty())
  1222. return RGB(255,255,255);
  1223. sColor = sColor.Mid(3); sColor = sColor.Left(6); sColor = _T("0x") + sColor;
  1224. return (COLORREF)_tcstol((LPCTSTR)sColor, NULL, 16);
  1225. }
  1226. // Function name : CControlsWnd_CColorComboBox::OnSelectItem
  1227. // Description     : 
  1228. // Return type : void 
  1229. // Argument         : CString& newValue
  1230. // Argument         : LPARAM lParam
  1231. void CControlsWnd_CColorComboBox::OnSelectItem(CString& newValue, LPARAM lParam)
  1232. {
  1233. CControlsWnd::OnSelectItem(newValue, lParam);
  1234. }
  1235. // Function name : CControlsWnd_CColorComboBox::OnNextItem
  1236. // Description     : // Not implemented yet.
  1237. // Return type : void 
  1238. void CControlsWnd_CColorComboBox::OnNextItem()
  1239. {
  1240. CString sColor, sText;
  1241. int nColour = (CColourPopup::FindColor(GetColor(GetDefaultValue())) + 1 ) % CColourPopup::m_nNumColours;
  1242. sColor.Format(_T("%08X"), CColourPopup::GetColour(nColour));
  1243. sColor = sColor.Mid(2);
  1244. sText.Format(_T("&&H%s (%s)"), sColor, CColourPopup::GetColourName(nColour));
  1245. // Propage the PropertyChanged event
  1246. OnSelectItem(sText, m_nSelectedItem);
  1247. }
  1248. // Function name : CControlsWnd_CColorComboBox::IsVisible
  1249. // Description     : 
  1250. // Return type : BOOL 
  1251. BOOL CControlsWnd_CColorComboBox::IsVisible()
  1252. {
  1253. if (CColourPopup* pWndColor = m_btnPicker.m_pWndColor)
  1254. if (::IsWindow(pWndColor->GetSafeHwnd()))
  1255. return pWndColor->IsWindowVisible();
  1256. return FALSE;
  1257. }
  1258. //////////////////////////////////////////////////////////////////////
  1259. // CControlsWnd_CShellFolder Class
  1260. //////////////////////////////////////////////////////////////////////
  1261. //////////////////////////////////////////////////////////////////////
  1262. // Construction/Destruction
  1263. //////////////////////////////////////////////////////////////////////
  1264. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CShellFolder,CControlsWnd);
  1265. IMPLEMENT_DYNAMIC(CControlsWnd_CShellFolder,CControlsWnd)
  1266. // Function name : CControlsWnd_CShellFolder::CControlsWnd_CShellFolder
  1267. // Description     : Default constructor
  1268. // Return type : 
  1269. CControlsWnd_CShellFolder::CControlsWnd_CShellFolder()
  1270. {
  1271. }
  1272. // Function name : CControlsWnd_CShellFolder::~CControlsWnd_CShellFolder
  1273. // Description     : virtual destructor
  1274. // Return type : 
  1275. CControlsWnd_CShellFolder::~CControlsWnd_CShellFolder()
  1276. {
  1277. }
  1278. // Function name : CControlsWnd_CShellFolder::Create
  1279. // Description     : Overidable function
  1280. // Return type : CControlsWnd* 
  1281. CWnd* CControlsWnd_CShellFolder::Create()
  1282. {
  1283. // Do not put as parent the GetWindowNotify(), becasuse this do not reflect messages
  1284. return m_dropShellFolder.CreatePopup(this);
  1285. }
  1286. // Function name : CControlsWnd_CShellFolder::OnDestroy
  1287. // Description     : Called by m_dropShellFolder.OnDestroy()
  1288. // Return type : void 
  1289. void CControlsWnd_CShellFolder::OnDestroy()
  1290. {
  1291. if (::IsWindow(m_dropShellFolder.GetSafeHwnd()))
  1292. {
  1293. CString sText = m_dropShellFolder.m_sSelectedPath;
  1294. if (!sText.IsEmpty())
  1295. // Propage the PropertyChanged event
  1296. OnSelectItem(sText, m_nSelectedItem);
  1297. }
  1298. GetWindowNotify()->SetFocus();
  1299. }
  1300. // Function name : CControlsWnd_CShellFolder::Show
  1301. // Description     : Show function. Overidable function
  1302. // Return type : void 
  1303. // Argument         : CRect rect
  1304. // Argument         : LPARAM lParam
  1305. void CControlsWnd_CShellFolder::Show(LPARAM lParam)
  1306. {
  1307. if (::IsWindow(m_dropShellFolder.GetSafeHwnd()))
  1308. {
  1309. CControlsWnd::Show(lParam);
  1310. CRect r(GetRect()); CRect rect; m_dropShellFolder.GetWindowRect(rect);
  1311. GetWindowNotify()->ClientToScreen(&r);
  1312. r.top = r.bottom; r.bottom += rect.Height();
  1313. if (r.Width() < rect.Width())
  1314. r.left = r.right - rect.Width();
  1315. m_dropShellFolder.MoveWindow(r);
  1316. m_dropShellFolder.ShowWindow(SW_SHOW);
  1317. m_dropShellFolder.SetFocus();
  1318. }
  1319. }
  1320. // Function name : CControlsWnd_CShellFolder::OnSelectItem
  1321. // Description     : The Item nItem was select.
  1322. // Return type : void 
  1323. // Argument         : int nItem
  1324. void CControlsWnd_CShellFolder::OnSelectItem(CString& newValue, LPARAM lParam)
  1325. {
  1326. if (::IsWindow(m_dropShellFolder.GetSafeHwnd()))
  1327. {
  1328. newValue = m_dropShellFolder.m_sSelectedPath;
  1329. }
  1330. CControlsWnd::OnSelectItem(newValue, lParam);
  1331. };
  1332. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CADORComboBox,CControlsWnd);
  1333. IMPLEMENT_DYNAMIC(CControlsWnd_CADORComboBox,CControlsWnd)
  1334. // Function name : CControlsWnd_CADORComboBox::CControlsWnd_CADORComboBox
  1335. // Description     : Default constructor
  1336. // Return type : 
  1337. CControlsWnd_CADORComboBox::CControlsWnd_CADORComboBox()
  1338. {
  1339. }
  1340. // Function name : CControlsWnd_CADORComboBox::~CControlsWnd_CADORComboBox
  1341. // Description     : virtual destructor
  1342. // Return type : 
  1343. CControlsWnd_CADORComboBox::~CControlsWnd_CADORComboBox()
  1344. {
  1345. }
  1346. // Function name : CControlsWnd_CADORComboBox::Refresh
  1347. // Description     : 
  1348. // Return type : BOOL
  1349. BOOL CControlsWnd_CADORComboBox::Refresh()
  1350. {
  1351. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1352. return m_wndADORComboBox.Refresh();
  1353. return FALSE;
  1354. }
  1355. // Function name : CControlsWnd_CADORComboBox::Create
  1356. // Description     : Overidable function
  1357. // Return type : CControlsWnd* 
  1358. CWnd* CControlsWnd_CADORComboBox::Create()
  1359. {
  1360. CWnd* pResult = NULL;
  1361. if (!_IsFrozen)
  1362. {
  1363. _FreezeEvents;
  1364. LPDISPATCH pObjectDispatch = NULL;
  1365. // Call a event, so user must set the pObjectDispatch as a distaptch to a ADOR.Recordset 
  1366. GetControl()->FireSetObject(GetWindowNotify()->GetIndexPage(), m_nSelectedItem, &pObjectDispatch);
  1367. if (m_wndADORComboBox.Create(this, pObjectDispatch))
  1368. {
  1369. m_wndADORComboBox.SetEditColor(GetControl()->m_rgbEditColor);
  1370. Add2NDelete(this);
  1371. pResult = &m_wndADORComboBox;
  1372. }
  1373. _UnFreezeEvents;
  1374. }
  1375. return pResult;
  1376. }
  1377. // Function name : CControlsWnd_CADORComboBox::Show
  1378. // Description     : Show function. Overidable function
  1379. // Return type : void 
  1380. // Argument         : CRect rect
  1381. // Argument         : LPARAM lParam
  1382. void CControlsWnd_CADORComboBox::Show(LPARAM lParam)
  1383. {
  1384. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1385. {
  1386. // Propage the changing event
  1387. CControlsWnd::Show(lParam);
  1388. CRect rect = GetRect();
  1389. rect.InflateRect(-1,-1);
  1390. rect.right--;
  1391. m_wndADORComboBox.MoveWindow(rect);
  1392. m_wndADORComboBox.ShowWindow(SW_SHOW);
  1393. m_wndADORComboBox.DropDown();
  1394. }
  1395. }
  1396. // Function name : CControlsWnd_CADORComboBox::OnSelectItem
  1397. // Description     : The Item nItem was select.
  1398. // Return type : void 
  1399. // Argument         : int nItem
  1400. void CControlsWnd_CADORComboBox::OnSelectItem(CString& newValue, LPARAM lParam)
  1401. {
  1402. CControlsWnd::OnSelectItem(newValue, lParam);
  1403. };
  1404. // Function name : CControlsWnd_CADORComboBox::Delete
  1405. // Description     : This function must return NULL, but didn't delete this pointer
  1406. // Return type : CControlsWnd* 
  1407. CControlsWnd* CControlsWnd_CADORComboBox::Delete()
  1408. {
  1409. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1410. {
  1411. // How the control is not destroyed , instead this is hidden
  1412. m_wndADORComboBox.ShowWindow(SW_HIDE);
  1413. }
  1414. return NULL;
  1415. }
  1416. // Function name : CControlsWnd_CADORComboBox::SetColumnKey
  1417. // Description     : 
  1418. // Return type : void 
  1419. // Argument         : long nColumnKey
  1420. void CControlsWnd_CADORComboBox::SetColumnKey(long nColumnKey)
  1421. {
  1422. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1423. m_wndADORComboBox.m_nColumnKey = nColumnKey;
  1424. }
  1425. // Function name : CControlsWnd_CADORComboBox::GetColumnKey
  1426. // Description     : 
  1427. // Return type : void 
  1428. // Argument         : long nColumnKey
  1429. long CControlsWnd_CADORComboBox::GetColumnKey()
  1430. {
  1431. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1432. return m_wndADORComboBox.m_nColumnKey;
  1433. return -1;
  1434. }
  1435. // Function name : CControlsWnd_CADORComboBox::SetColumnWidth
  1436. // Description     : Set the new width for a column
  1437. // Return type : void 
  1438. // Argument         : long nColumn
  1439. // Argument         : long nColumnWidth
  1440. void CControlsWnd_CADORComboBox::SetColumnWidth(long nColumn, long nColumnWidth)
  1441. {
  1442. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1443. {
  1444. LVCOLUMN lvColumn; lvColumn.mask = LVCF_WIDTH; lvColumn.cx = nColumnWidth;
  1445. m_wndADORComboBox.GetListCtrl()->SetColumn(nColumn, &lvColumn);
  1446. }
  1447. }
  1448. // Function name : CControlsWnd_CADORComboBox::GetColumnWidth
  1449. // Description     : 
  1450. // Return type : long 
  1451. // Argument         : long nColumn
  1452. long CControlsWnd_CADORComboBox::GetColumnWidth(long nColumn)
  1453. {
  1454. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1455. {
  1456. LVCOLUMN lvColumn; lvColumn.mask = LVCF_WIDTH;
  1457. if (m_wndADORComboBox.GetListCtrl()->GetColumn(nColumn, &lvColumn))
  1458. return lvColumn.cx;
  1459. }
  1460. return -1;
  1461. }
  1462. // Function name : CControlsWnd_CADORComboBox::SetColumnName
  1463. // Description     : 
  1464. // Return type : void 
  1465. // Argument         : long nColumn
  1466. // Argument         : LPCTSTR lpszColumnName
  1467. void CControlsWnd_CADORComboBox::SetColumnName(long nColumn, LPCTSTR lpszColumnName)
  1468. {
  1469. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1470. {
  1471. CString sName(lpszColumnName);
  1472. LVCOLUMN lvColumn; lvColumn.mask = LVCF_TEXT;
  1473. lvColumn.pszText = (LPTSTR)(LPCTSTR)sName;
  1474. lvColumn.cchTextMax = sName.GetLength();
  1475. m_wndADORComboBox.GetListCtrl()->SetColumn(nColumn, &lvColumn);
  1476. }
  1477. }
  1478. // Function name : CControlsWnd_CADORComboBox::GetColumnName
  1479. // Description     : 
  1480. // Return type : LPCTSTR 
  1481. // Argument         : long nColumn
  1482. LPCTSTR CControlsWnd_CADORComboBox::GetColumnName(long nColumn)
  1483. {
  1484. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1485. {
  1486. static CString sName;
  1487. LVCOLUMN lvColumn; lvColumn.mask = LVCF_TEXT;
  1488. lvColumn.pszText = sName.GetBuffer(256);
  1489. lvColumn.cchTextMax = 256;
  1490. if (m_wndADORComboBox.GetListCtrl()->GetColumn(nColumn, &lvColumn))
  1491. return (LPCTSTR)sName;
  1492. }
  1493. return NULL;
  1494. }
  1495. // Function name : CControlsWnd_CADORComboBox::SetColumnHeader
  1496. // Description     : Set or unset the column header
  1497. // Return type : void 
  1498. // Argument         : BOOL bShow
  1499. void CControlsWnd_CADORComboBox::SetColumnHeader(BOOL bShow)
  1500. {
  1501. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1502. m_wndADORComboBox.SetColumnHeader(bShow);
  1503. }
  1504. // Function name : CControlsWnd_CADORComboBox::GetColumnHeader
  1505. // Description     : Return TRUE if header is showen
  1506. // Return type : BOOL 
  1507. BOOL CControlsWnd_CADORComboBox::GetColumnHeader()
  1508. {
  1509. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1510. return m_wndADORComboBox.GetColumnHeader();
  1511. return FALSE;
  1512. }
  1513. // Function name : CControlsWnd_CADORComboBox::SetDropDownWidth
  1514. // Description     : Set the new rate for drop down width
  1515. // Return type : void 
  1516. // Argument         : double nRateWidth
  1517. void CControlsWnd_CADORComboBox::SetDropDownWidth(double nRateWidth)
  1518. {
  1519. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1520. m_wndADORComboBox.SetRateWidth(nRateWidth);
  1521. }
  1522. // Function name : CControlsWnd_CADORComboBox::GetDropDownWidth
  1523. // Description     : return the rate width
  1524. // Return type : double 
  1525. double CControlsWnd_CADORComboBox::GetDropDownWidth()
  1526. {
  1527. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1528. return m_wndADORComboBox.m_dWidthList;
  1529. return -1.0;
  1530. }
  1531. // Function name : CControlsWnd_CADORComboBox::SetDropDownHeight
  1532. // Description     : 
  1533. // Return type : void 
  1534. // Argument         : long nMulHeight
  1535. void CControlsWnd_CADORComboBox::SetDropDownHeight(long nMulHeight)
  1536. {
  1537. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1538. m_wndADORComboBox.SetMultipleHeight(nMulHeight);
  1539. }
  1540. // Function name : CControlsWnd_CADORComboBox::GetDropDownHeight
  1541. // Description     : 
  1542. // Return type : long 
  1543. long CControlsWnd_CADORComboBox::GetDropDownHeight()
  1544. {
  1545. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1546. return m_wndADORComboBox.m_nMultipleHeight;
  1547. return -1;
  1548. }
  1549. // Function name : CControlsWnd_CADORComboBox::GetValue
  1550. // Description     : 
  1551. // Return type : VARIANT 
  1552. // Argument         : long nColumn
  1553. VARIANT CControlsWnd_CADORComboBox::GetValue(long nColumn)
  1554. {
  1555. VARIANT vaResult;
  1556. VariantInit(&vaResult);
  1557. if (::IsWindow(m_wndADORComboBox.GetSafeHwnd()))
  1558. if (nColumn >= 0)
  1559. if ( nColumn < m_wndADORComboBox.m_arField.GetSize())
  1560. {
  1561. CListCtrl* pListCtrl = m_wndADORComboBox.GetListCtrl();
  1562. int nItem = pListCtrl->GetNextItem(-1, LVNI_SELECTED);
  1563. if (nItem >= 0)
  1564. vaResult = m_wndADORComboBox.CStr2Var(m_wndADORComboBox.m_arField[nColumn], pListCtrl->GetItemText(nItem, nColumn));
  1565. }
  1566. return vaResult;
  1567. }
  1568. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CDataComboBox,CControlsWnd);
  1569. IMPLEMENT_DYNAMIC(CControlsWnd_CDataComboBox,CControlsWnd)
  1570. // Function name : CControlsWnd_CDataComboBox::CControlsWnd_CDataComboBox
  1571. // Description     : Default constructor
  1572. // Return type : 
  1573. CControlsWnd_CDataComboBox::CControlsWnd_CDataComboBox()
  1574. {
  1575. }
  1576. // Function name : CControlsWnd_CDataComboBox::~CControlsWnd_CDataComboBox
  1577. // Description     : virtual destructor
  1578. // Return type : 
  1579. CControlsWnd_CDataComboBox::~CControlsWnd_CDataComboBox()
  1580. {
  1581. }
  1582. // Function name : CControlsWnd_CDataComboBox::Create
  1583. // Description     : 
  1584. // Return type : CWnd* 
  1585. CWnd* CControlsWnd_CDataComboBox::Create()
  1586. {
  1587. if (m_wndDate.Create(this))
  1588. {
  1589. Add2NDelete(this);
  1590. return &m_wndDate;
  1591. }
  1592. return NULL;
  1593. }
  1594. // Function name : CControlsWnd_CDataComboBox::Show
  1595. // Description     : 
  1596. // Return type : void 
  1597. // Argument         : LPARAM lParam
  1598. void CControlsWnd_CDataComboBox::Show(LPARAM lParam)
  1599. {
  1600. if (IsWindow(m_wndDate.m_hWnd))
  1601. {
  1602. CControlsWnd::Show(lParam);
  1603. m_wndDate.MoveWindow(GetRect());
  1604. m_wndDate.SetWindowText(GetDefaultValue());
  1605. m_wndDate.ShowWindow(SW_SHOW);
  1606. }
  1607. }
  1608. // Function name : CControlsWnd_CDataComboBox::Delete
  1609. // Description     : Do not delete this. It is no case
  1610. // Return type : CControlsWnd* 
  1611. CControlsWnd* CControlsWnd_CDataComboBox::Delete()
  1612. {
  1613. if (IsWindow(m_wndDate.m_hWnd))
  1614. m_wndDate.ShowWindow(SW_HIDE);
  1615. return NULL;
  1616. }
  1617. // Function name : CControlsWnd_CDataComboBox::OnSelectItem
  1618. // Description     : 
  1619. // Return type : void 
  1620. // Argument         : CString& newValue
  1621. // Argument         : LPARAM lParam
  1622. void CControlsWnd_CDataComboBox::OnSelectItem(CString& newValue, LPARAM lParam)
  1623. {
  1624. if (::IsWindow(m_wndDate.GetSafeHwnd()))
  1625. {
  1626. m_wndDate.GetWindowText(newValue);
  1627. CControlsWnd::OnSelectItem(newValue, lParam);
  1628. }
  1629. }
  1630. IMPLEMENT_DERIVED_CLASS(CControlsWnd_CGroup,CControlsWnd);
  1631. IMPLEMENT_DYNAMIC(CControlsWnd_CGroup,CControlsWnd)
  1632. // Function name : CControlsWnd_CGroup::CControlsWnd_CGroup
  1633. // Description     : Default constructor
  1634. // Return type : 
  1635. CControlsWnd_CGroup::CControlsWnd_CGroup()
  1636. {
  1637. m_bExpanded = FALSE;
  1638. }
  1639. // Function name : CControlsWnd_CGroup::~CControlsWnd_CGroup
  1640. // Description     : virtual destructor
  1641. // Return type : 
  1642. CControlsWnd_CGroup::~CControlsWnd_CGroup()
  1643. {
  1644. }
  1645. // Function name : CControlsWnd_CGroup::Delete
  1646. // Description     : 
  1647. // Return type : CControlsWnd* 
  1648. CControlsWnd* CControlsWnd_CGroup::Delete()
  1649. {
  1650. return NULL;
  1651. }
  1652. // Function name : CControlsWnd_CGroup::Create
  1653. // Description     : 
  1654. // Return type : CWnd* 
  1655. CWnd* CControlsWnd_CGroup::Create()
  1656. {
  1657. Add2NDelete(this);
  1658. return &m_btnTemp;
  1659. }
  1660. // Function name : CControlsWnd_CGroup::Update
  1661. // Description     : Update m_arChilds...
  1662. // Return type : void 
  1663. // Argument         : CListCtrl *pListCtrl
  1664. void CControlsWnd_CGroup::Update(CTreeListCtrl *pListCtrl)
  1665. {
  1666. // Fill the array with all childs of this group
  1667. pListCtrl->UpdateGroup(this, GetWindowNotify()->GetPropertyName(GetSelectedItem()));
  1668. }
  1669. // Function name : CControlsWnd_CGroup::InsertChild
  1670. // Description     : Insert a new child.
  1671. // Return type : void 
  1672. // Argument         : int nItem
  1673. void CControlsWnd_CGroup::InsertChild(int nItem)
  1674. {
  1675. GetChilds()->Add(nItem);
  1676. }
  1677. // Function name : CControlsWnd_CGroup::OnNextItem
  1678. // Description     : 
  1679. // Return type : void 
  1680. void CControlsWnd_CGroup::OnNextItem()
  1681. {
  1682. GetWindowNotify()->Expand(GetSelectedItem(), m_bExpanded);
  1683. }
  1684. // Function name : CControlsWnd_CGroup::GetChilds
  1685. // Description     : return pointer to all childs
  1686. // Return type : TArrayIDItem* 
  1687. TArrayIDItem* CControlsWnd_CGroup::GetChilds()
  1688. {
  1689. return &m_arChilds;
  1690. }
  1691. // Function name : CControlsWnd_CGroup::IsExtended
  1692. // Description     : Need fro drawing
  1693. // Return type : BOOL 
  1694. BOOL CControlsWnd_CGroup::IsExtended()
  1695. {
  1696. if (m_bExpanded)
  1697. return TRUE;
  1698. return !GetChilds()->GetSize();
  1699. }
  1700. // Function name : CControlsWnd_CGroup::IsGroup
  1701. // Description     : 
  1702. // Return type : BOOL 
  1703. BOOL CControlsWnd_CGroup::IsGroup()
  1704. {
  1705. return TRUE;
  1706. }