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

对话框与窗口

开发平台:

Visual C++

  1. // ListCtrlDlg.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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. #include "stdafx.h"
  21. #include "ListCtrl.h"
  22. #include "ListCtrlDlg.h"
  23. #include "AboutDlg.h"
  24. #ifdef _DEBUG
  25. #define new DEBUG_NEW
  26. #undef THIS_FILE
  27. static char THIS_FILE[] = __FILE__;
  28. #endif
  29. #define BoolType(b) b?true:false
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CListCtrlDlg dialog
  32. CListCtrlDlg::CListCtrlDlg(CWnd* pParent /*=NULL*/)
  33. : CXTResizeDialog(CListCtrlDlg::IDD, pParent)
  34. {
  35. //{{AFX_DATA_INIT(CListCtrlDlg)
  36. m_iTheme = 1;
  37. m_iDisableSizing = 0;
  38. m_iMinSize = 25;
  39. m_bBoldText  = FALSE;
  40. m_bSortArrow = TRUE;
  41. m_bAutoSize = TRUE;
  42. m_bContextMenus = TRUE;
  43. m_bHotTracking = TRUE;
  44. m_bHeaderImages = TRUE;
  45. m_bWinTheme = FALSE;
  46. m_bDisableSizing = FALSE;
  47. m_bMinSize = FALSE;
  48. m_bSortColor = TRUE;
  49. m_bFullRowSel = TRUE;
  50. m_bGridLines = FALSE;
  51. m_bCheckBoxes = FALSE;
  52. m_bDragDrop = FALSE;
  53. m_bListColor = TRUE;
  54. m_bRowColor = TRUE;
  55. m_bEnableList = TRUE;
  56. //}}AFX_DATA_INIT
  57. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  58. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  59. m_nSortedCol = 1;
  60. m_bAscending = true;
  61. CXTPWinThemeWrapper themeWrapper;
  62. m_bWinTheme  = themeWrapper.IsThemeActive();
  63. }
  64. void CListCtrlDlg::DoDataExchange(CDataExchange* pDX)
  65. {
  66. CXTResizeDialog::DoDataExchange(pDX);
  67. //{{AFX_DATA_MAP(CListCtrlDlg)
  68. DDX_CBIndex(pDX, IDC_COMBO_THEMES, m_iTheme);
  69. DDX_CBIndex(pDX, IDC_COMBO_DISABLESIZE, m_iDisableSizing);
  70. DDX_Text(pDX, IDC_EDIT_MINSIZE, m_iMinSize);
  71. DDX_Check(pDX, IDC_CHK_BOLDTEXT, m_bBoldText);
  72. DDX_Check(pDX, IDC_CHK_SORTARW, m_bSortArrow);
  73. DDX_Check(pDX, IDC_CHK_AUTOSIZE, m_bAutoSize);
  74. DDX_Check(pDX, IDC_CHK_CONTEXTMENUS, m_bContextMenus);
  75. DDX_Check(pDX, IDC_CHK_HOTTRACKING, m_bHotTracking);
  76. DDX_Check(pDX, IDC_CHK_IMAGES, m_bHeaderImages);
  77. DDX_Check(pDX, IDC_CHK_WINTHEME, m_bWinTheme);
  78. DDX_Check(pDX, IDC_CHK_DISABLESIZING, m_bDisableSizing);
  79. DDX_Check(pDX, IDC_CHK_MINIMUMSIZE, m_bMinSize);
  80. DDX_Check(pDX, IDC_CHK_SORTCOLOR, m_bSortColor);
  81. DDX_Control(pDX, IDC_EDIT_MINSIZE, m_editMinSize);
  82. DDX_Control(pDX, IDC_CHK_WINTHEME, m_btnWinTheme);
  83. DDX_Control(pDX, IDC_CHK_HOTTRACKING, m_btnHotTracking);
  84. DDX_Control(pDX, IDC_COMBO_THEMES, m_comboThemes);
  85. DDX_Control(pDX, IDC_COMBO_DISABLESIZE, m_comboDisableSize);
  86. DDX_Check(pDX, IDC_CHK_FULLROWSELECT, m_bFullRowSel);
  87. DDX_Check(pDX, IDC_CHK_GRIDLINES, m_bGridLines);
  88. DDX_Check(pDX, IDC_CHK_CHECKBOXES, m_bCheckBoxes);
  89. DDX_Check(pDX, IDC_CHK_DRAGDROP, m_bDragDrop);
  90. DDX_Check(pDX, IDC_CHK_LISTCOLOR, m_bListColor);
  91. DDX_Check(pDX, IDC_CHK_ROWCOLOR, m_bRowColor);
  92. DDX_Control(pDX, IDC_LIST_CTRL, m_listCtrl);
  93. DDX_Check(pDX, IDC_CHK_ENABLE, m_bEnableList);
  94. //}}AFX_DATA_MAP
  95. DDX_Control(pDX, IDC_GBOX_LIST, m_gboxList);
  96. DDX_Control(pDX, IDC_GBOX_HEADER, m_gboxHeader);
  97. DDX_Control(pDX, IDC_CLR_SORTBACK, m_cpSortBack);
  98. DDX_Control(pDX, IDC_CLR_SORTTEXT, m_cpSortText);
  99. DDX_Control(pDX, IDC_CLR_LISTBACK, m_cpListBack);
  100. DDX_Control(pDX, IDC_CLR_LISTTEXT, m_cpListText);
  101. DDX_Control(pDX, IDC_CLR_ROWBACK, m_cpRowBack);
  102. DDX_Control(pDX, IDC_CLR_ROWTEXT, m_cpRowText);
  103. DDX_XTColorPicker(pDX, IDC_CLR_SORTBACK, m_crSortBack);
  104. DDX_XTColorPicker(pDX, IDC_CLR_SORTTEXT, m_crSortText);
  105. DDX_XTColorPicker(pDX, IDC_CLR_LISTBACK, m_crListBack);
  106. DDX_XTColorPicker(pDX, IDC_CLR_LISTTEXT, m_crListText);
  107. DDX_XTColorPicker(pDX, IDC_CLR_ROWBACK, m_crRowBack);
  108. DDX_XTColorPicker(pDX, IDC_CLR_ROWTEXT, m_crRowText);
  109. }
  110. BEGIN_MESSAGE_MAP(CListCtrlDlg, CXTResizeDialog)
  111. //{{AFX_MSG_MAP(CListCtrlDlg)
  112. ON_WM_SYSCOMMAND()
  113. ON_WM_PAINT()
  114. ON_WM_QUERYDRAGICON()
  115. ON_BN_CLICKED(IDC_CHK_BOLDTEXT, OnChkBoldtext)
  116. ON_BN_CLICKED(IDC_CHK_SORTARW, OnChkSortarw)
  117. ON_WM_DESTROY()
  118. ON_CBN_SELENDOK(IDC_COMBO_THEMES, OnSelendokComboThemes)
  119. ON_CBN_SELENDOK(IDC_COMBO_DISABLESIZE, OnSelendokComboDisablesize)
  120. ON_BN_CLICKED(IDC_CHK_WINTHEME, OnChkWintheme)
  121. ON_BN_CLICKED(IDC_CHK_HOTTRACKING, OnChkHottracking)
  122. ON_BN_CLICKED(IDC_CHK_IMAGES, OnChkImages)
  123. ON_BN_CLICKED(IDC_CHK_AUTOSIZE, OnChkAutosize)
  124. ON_BN_CLICKED(IDC_CHK_CONTEXTMENUS, OnChkContextmenus)
  125. ON_EN_CHANGE(IDC_EDIT_MINSIZE, OnChangeEditMinsize)
  126. ON_BN_CLICKED(IDC_CHK_DISABLESIZING, OnChkDisablesizing)
  127. ON_BN_CLICKED(IDC_CHK_MINIMUMSIZE, OnChkMinimumsize)
  128. ON_BN_CLICKED(IDC_CHK_SORTCOLOR, OnChkSortcolor)
  129. ON_BN_CLICKED(IDC_CHK_FULLROWSELECT, OnChkFullRowSelect)
  130. ON_BN_CLICKED(IDC_CHK_GRIDLINES, OnChkGridLines)
  131. ON_BN_CLICKED(IDC_CHK_CHECKBOXES, OnChkCheckBoxes)
  132. ON_BN_CLICKED(IDC_CHK_DRAGDROP, OnChkHeaderDragDrop)
  133. ON_BN_CLICKED(IDC_CHK_LISTCOLOR, OnChkListcolor)
  134. ON_BN_CLICKED(IDC_CHK_ROWCOLOR, OnChkRowcolor)
  135. ON_BN_CLICKED(IDC_BTN_SIZETOFIT, OnBtnSizeToFit)
  136. ON_BN_CLICKED(IDC_CHK_ENABLE, OnChkEnable)
  137. ON_BN_CLICKED(IDC_BTN_UPDATE, OnBtnUpdate)
  138. ON_BN_CLICKED(IDC_BTN_RESET, OnBtnReset)
  139. //}}AFX_MSG_MAP
  140. ON_CPN_XT_SELENDOK(IDC_CLR_SORTBACK, OnSelEndOkSortBackColor)
  141. ON_CPN_XT_SELENDOK(IDC_CLR_SORTTEXT, OnSelEndOkSortTextColor)
  142. ON_CPN_XT_SELENDOK(IDC_CLR_LISTBACK, OnSelEndOkListBackColor)
  143. ON_CPN_XT_SELENDOK(IDC_CLR_LISTTEXT, OnSelEndOkListTextColor)
  144. ON_CPN_XT_SELENDOK(IDC_CLR_ROWBACK, OnSelEndOkRowBackColor)
  145. ON_CPN_XT_SELENDOK(IDC_CLR_ROWTEXT, OnSelEndOkRowTextColor)
  146. END_MESSAGE_MAP()
  147. /////////////////////////////////////////////////////////////////////////////
  148. // CListCtrlDlg message handlers
  149. BOOL CListCtrlDlg::OnInitDialog()
  150. {
  151. CXTResizeDialog::OnInitDialog();
  152. // Add "About..." menu item to system menu.
  153. // IDM_ABOUTBOX must be in the system command range.
  154. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  155. ASSERT(IDM_ABOUTBOX < 0xF000);
  156. CMenu* pSysMenu = GetSystemMenu(FALSE);
  157. if (pSysMenu != NULL)
  158. {
  159. CString strAboutMenu;
  160. strAboutMenu.LoadString(IDS_ABOUTBOX);
  161. if (!strAboutMenu.IsEmpty())
  162. {
  163. pSysMenu->AppendMenu(MF_SEPARATOR);
  164. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  165. }
  166. }
  167. // Set the icon for this dialog.  The framework does this automatically
  168. //  when the application's main window is not a dialog
  169. SetIcon(m_hIcon, TRUE);         // Set big icon
  170. SetIcon(m_hIcon, FALSE);        // Set small icon
  171. // Set control resizing.
  172. SetResize(IDOK,                  SZ_TOP_RIGHT,   SZ_TOP_RIGHT);
  173. SetResize(IDCANCEL,              SZ_TOP_RIGHT,   SZ_TOP_RIGHT);
  174. SetResize(IDC_LIST_CTRL,         SZ_TOP_LEFT,    SZ_BOTTOM_RIGHT);
  175. SetResize(IDC_GBOX_HEADER,       SZ_BOTTOM_LEFT, SZ_BOTTOM_RIGHT);
  176. SetResize(IDC_COMBO_THEMES,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  177. SetResize(IDC_CHK_AUTOSIZE,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  178. SetResize(IDC_BTN_SIZETOFIT,     SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  179. SetResize(IDC_CHK_DISABLESIZING, SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  180. SetResize(IDC_COMBO_DISABLESIZE, SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  181. SetResize(IDC_CHK_MINIMUMSIZE,   SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  182. SetResize(IDC_EDIT_MINSIZE,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  183. SetResize(IDC_CHK_WINTHEME,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  184. SetResize(IDC_CHK_HOTTRACKING,   SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  185. SetResize(IDC_CHK_IMAGES,        SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  186. SetResize(IDC_CHK_BOLDTEXT,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  187. SetResize(IDC_CHK_SORTARW,       SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  188. SetResize(IDC_CHK_CONTEXTMENUS,  SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  189. SetResize(IDC_GBOX_LIST,         SZ_BOTTOM_LEFT, SZ_BOTTOM_RIGHT);
  190. SetResize(IDC_CHK_LISTCOLOR,     SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  191. SetResize(IDC_CLR_LISTBACK,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  192. SetResize(IDC_CLR_LISTTEXT,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  193. SetResize(IDC_CHK_ROWCOLOR,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  194. SetResize(IDC_CLR_ROWBACK,       SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  195. SetResize(IDC_CLR_ROWTEXT,       SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  196. SetResize(IDC_CHK_SORTCOLOR,     SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  197. SetResize(IDC_CLR_SORTBACK,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  198. SetResize(IDC_CLR_SORTTEXT,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  199. SetResize(IDC_CHK_FULLROWSELECT, SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  200. SetResize(IDC_CHK_GRIDLINES,     SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  201. SetResize(IDC_CHK_CHECKBOXES,    SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  202. SetResize(IDC_CHK_DRAGDROP,      SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  203. SetResize(IDC_CHK_ENABLE,        SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  204. SetResize(IDC_BTN_UPDATE,        SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  205. SetResize(IDC_BTN_RESET,         SZ_BOTTOM_LEFT, SZ_BOTTOM_LEFT);
  206. // Enable Office XP themes.
  207. XTThemeManager()->SetTheme(xtThemeOfficeXP);
  208. // Load window placement
  209. LoadPlacement(_T("CListCtrlDlg"));
  210. // TODO: Add extra initialization here
  211. m_listCtrl.InsertColumn(0, _T("Column One"),   LVCFMT_LEFT, 125);
  212. m_listCtrl.InsertColumn(1, _T("Column Two"),   LVCFMT_LEFT, 125);
  213. m_listCtrl.InsertColumn(2, _T("Column Three"), LVCFMT_LEFT, 125);
  214. int iItem;
  215. for (iItem = 0; iItem < 100; ++iItem)
  216. {
  217. CString strItem;
  218. CString strSubA;
  219. CString strSubB;
  220. strItem.Format(_T("Item %d"), iItem);
  221. strSubA.Format(_T("Sub A %d"), iItem);
  222. strSubB.Format(_T("Sub B %d"), iItem);
  223. m_listCtrl.InsertItem(iItem, strItem, 0);
  224. m_listCtrl.SetItem(iItem, 1, LVIF_TEXT, strSubA, 0, NULL, NULL, NULL);
  225. m_listCtrl.SetItem(iItem, 2, LVIF_TEXT, strSubB, 0, NULL, NULL, NULL);
  226. }
  227. // Get the windows handle to the header control for the
  228. // list control then subclass the control.
  229. HWND hWndHeader = m_listCtrl.GetDlgItem(0)->GetSafeHwnd();
  230. m_header.SubclassWindow(hWndHeader);
  231. // add bitmap images.
  232. m_header.SetBitmap(0, IDB_COLUMN_0, FALSE, RGB(0,255,0));
  233. m_header.SetBitmap(1, IDB_COLUMN_1, FALSE, RGB(0,255,0));
  234. m_header.SetBitmap(2, IDB_COLUMN_2, FALSE, RGB(0,255,0));
  235. // enable auto sizing.
  236. m_header.EnableAutoSize(TRUE);
  237. m_header.ResizeColumnsToFit();
  238. SortColumn(m_nSortedCol, m_bAscending);
  239. m_cpSortBack.ShowText(TRUE);
  240. m_cpSortBack.SetColor(m_listCtrl.GetSortBackColor());
  241. m_cpSortBack.SetDefaultColor(m_listCtrl.GetSortBackColor());
  242. m_cpSortText.ShowText(TRUE);
  243. m_cpSortText.SetColor(m_listCtrl.GetSortTextColor());
  244. m_cpSortText.SetDefaultColor(m_listCtrl.GetSortTextColor());
  245. m_cpListBack.ShowText(TRUE);
  246. m_cpListBack.SetColor(m_listCtrl.GetListBackColor());
  247. m_cpListBack.SetDefaultColor(m_listCtrl.GetListBackColor());
  248. m_cpListText.ShowText(TRUE);
  249. m_cpListText.SetColor(m_listCtrl.GetListTextColor());
  250. m_cpListText.SetDefaultColor(m_listCtrl.GetListTextColor());
  251. m_cpRowBack.ShowText(TRUE);
  252. m_cpRowText.SetColor(m_listCtrl.GetListTextColor());
  253. m_cpRowBack.SetDefaultColor(m_listCtrl.GetListBackColor());
  254. m_cpRowText.ShowText(TRUE);
  255. m_cpRowBack.SetColor(m_listCtrl.GetListBackColor());
  256. m_cpRowText.SetDefaultColor(m_listCtrl.GetListTextColor());
  257. m_listCtrl.ModifyExtendedStyle(0, LVS_EX_FULLROWSELECT|LVS_EX_FULLROWSELECT);
  258. m_listCtrl.EnableUserSortColor(BoolType(m_bSortColor));
  259. m_listCtrl.EnableUserListColor(BoolType(m_bListColor));
  260. m_listCtrl.EnableUserRowColor(BoolType(m_bRowColor));
  261. OnSelendokComboThemes();
  262. return TRUE;  // return TRUE  unless you set the focus to a control
  263. }
  264. void CListCtrlDlg::OnDestroy()
  265. {
  266. // Save window placement
  267. SavePlacement(_T("CListCtrlDlg"));
  268. CXTResizeDialog::OnDestroy();
  269. }
  270. void CListCtrlDlg::OnSysCommand(UINT nID, LPARAM lParam)
  271. {
  272. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  273. {
  274. CAboutDlg dlgAbout;
  275. dlgAbout.DoModal();
  276. }
  277. else
  278. {
  279. CXTResizeDialog::OnSysCommand(nID, lParam);
  280. }
  281. }
  282. // If you add a minimize button to your dialog, you will need the code below
  283. //  to draw the icon.  For MFC applications using the document/view model,
  284. //  this is automatically done for you by the framework.
  285. void CListCtrlDlg::OnPaint()
  286. {
  287. if (IsIconic())
  288. {
  289. CPaintDC dc(this); // device context for painting
  290. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  291. // Center icon in client rectangle
  292. int cxIcon = GetSystemMetrics(SM_CXICON);
  293. int cyIcon = GetSystemMetrics(SM_CYICON);
  294. CRect rect;
  295. GetClientRect(&rect);
  296. int x = (rect.Width() - cxIcon + 1) / 2;
  297. int y = (rect.Height() - cyIcon + 1) / 2;
  298. // Draw the icon
  299. dc.DrawIcon(x, y, m_hIcon);
  300. }
  301. else
  302. {
  303. CXTResizeDialog::OnPaint();
  304. }
  305. }
  306. // The system calls this to obtain the cursor to display while the user drags
  307. //  the minimized window.
  308. HCURSOR CListCtrlDlg::OnQueryDragIcon()
  309. {
  310. return (HCURSOR) m_hIcon;
  311. }
  312. void CListCtrlDlg::SortColumn(int iCol, bool bAsc)
  313. {
  314. m_bAscending = bAsc;
  315. m_nSortedCol = iCol;
  316. // set sort image for header and sort column.
  317. m_listCtrl.SetSortImage(m_nSortedCol, m_bAscending);
  318. CXTSortClass csc(&m_listCtrl, m_nSortedCol);
  319. csc.Sort(m_bAscending, xtSortString);
  320. }
  321. BOOL CListCtrlDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
  322. {
  323. HD_NOTIFY *pHDNotify = (HD_NOTIFY*)lParam;
  324. if (pHDNotify->hdr.code == HDN_ITEMCLICKA ||
  325. pHDNotify->hdr.code == HDN_ITEMCLICKW)
  326. {
  327. if (pHDNotify->iItem == m_nSortedCol)
  328. SortColumn(pHDNotify->iItem, !m_bAscending);
  329. else
  330. SortColumn(pHDNotify->iItem, BoolType(m_header.GetAscending()));
  331. }
  332. return CXTResizeDialog::OnNotify(wParam, lParam, pResult);
  333. }
  334. void CListCtrlDlg::OnSelendokComboThemes()
  335. {
  336. UpdateData();
  337. switch (m_iTheme)
  338. {
  339. case 0:
  340. m_bHotTracking = FALSE;
  341. m_bWinTheme = FALSE;
  342. m_header.SetTheme(new CXTHeaderCtrlThemeOfficeXP());
  343. CXTPPaintManager::SetTheme(xtpThemeOfficeXP);
  344. break;
  345. case 1:
  346. m_bHotTracking = FALSE;
  347. m_bWinTheme = FALSE;
  348. m_header.SetTheme(new CXTHeaderCtrlThemeOffice2003());
  349. CXTPPaintManager::SetTheme(xtpThemeOffice2003);
  350. break;
  351. case 2:
  352. m_bHotTracking = TRUE;
  353. m_bWinTheme = TRUE;
  354. m_header.SetTheme(new CXTHeaderCtrlThemeExplorer());
  355. CXTPPaintManager::SetTheme(xtpThemeOffice2000);
  356. break;
  357. case 3:
  358. m_bHotTracking = TRUE;
  359. m_bWinTheme = TRUE;
  360. m_header.SetTheme(new CXTHeaderCtrlTheme());
  361. CXTPPaintManager::SetTheme(xtpThemeOffice2000);
  362. break;
  363. }
  364. UpdateData(FALSE);
  365. DWORD dwStyle = 0L;
  366. if (m_bWinTheme && m_iTheme >= 2)
  367. dwStyle |= XTTHEME_WINXPTHEMES;
  368. if (m_bWinTheme && m_iTheme >= 2 && m_bHotTracking)
  369. dwStyle |= XTTHEME_HOTTRACKING;
  370. if (m_bSortArrow)
  371. dwStyle |= XTTHEME_SORTARROW;
  372. CXTHeaderCtrlTheme* pTheme = m_header.GetTheme();
  373. if (pTheme)
  374. {
  375. pTheme->SetDrawStyle(dwStyle, &m_header);
  376. EnableControls();
  377. }
  378. }
  379. void CListCtrlDlg::OnSelendokComboDisablesize()
  380. {
  381. UpdateData();
  382. // thaw all columns.
  383. m_header.ThawAllColumns();
  384. if (m_iDisableSizing > 0)
  385. m_header.FreezeColumn(m_iDisableSizing-1);
  386. }
  387. void CListCtrlDlg::ModifyDrawStyle(UINT uFlag, BOOL bRemove)
  388. {
  389. CXTHeaderCtrlTheme* pTheme = m_header.GetTheme();
  390. if (pTheme)
  391. {
  392. DWORD dwStyle = pTheme->GetDrawStyle() & ~uFlag;
  393. if (bRemove)
  394. dwStyle |= uFlag;
  395. pTheme->SetDrawStyle(dwStyle, &m_header);
  396. m_header.RedrawWindow();
  397. }
  398. }
  399. void CListCtrlDlg::OnChkWintheme()
  400. {
  401. UpdateData();
  402. EnableControls(FALSE);
  403. ModifyDrawStyle(XTTHEME_WINXPTHEMES, m_bWinTheme);
  404. }
  405. void CListCtrlDlg::OnChkHottracking()
  406. {
  407. UpdateData();
  408. ModifyDrawStyle(XTTHEME_HOTTRACKING, m_bHotTracking);
  409. }
  410. void CListCtrlDlg::OnChkImages()
  411. {
  412. UpdateData();
  413. // add / remove bitmap images.
  414. m_header.SetBitmap(0, IDB_COLUMN_0, !m_bHeaderImages, RGB(0,255,0));
  415. m_header.SetBitmap(1, IDB_COLUMN_1, !m_bHeaderImages, RGB(0,255,0));
  416. m_header.SetBitmap(2, IDB_COLUMN_2, !m_bHeaderImages, RGB(0,255,0));
  417. }
  418. void CListCtrlDlg::OnChkBoldtext()
  419. {
  420. UpdateData();
  421. m_header.InitializeHeader(BoolType(m_bBoldText));
  422. m_header.RedrawWindow();
  423. }
  424. void CListCtrlDlg::OnChkSortarw()
  425. {
  426. UpdateData();
  427. ModifyDrawStyle(XTTHEME_SORTARROW, m_bSortArrow);
  428. }
  429. void CListCtrlDlg::OnChkContextmenus()
  430. {
  431. UpdateData();
  432. m_header.EnablePopupMenus(m_bContextMenus);
  433. }
  434. void CListCtrlDlg::OnChangeEditMinsize()
  435. {
  436. UpdateData();
  437. m_header.SetMinSize(m_iMinSize);
  438. }
  439. void CListCtrlDlg::EnableControls(BOOL bRedraw/*=TRUE*/)
  440. {
  441. m_editMinSize.EnableWindow(m_bMinSize);
  442. m_comboDisableSize.EnableWindow(m_bDisableSizing);
  443. m_btnWinTheme.EnableWindow(XTOSVersionInfo()->IsWinXPOrGreater());
  444. m_btnHotTracking.EnableWindow(XTOSVersionInfo()->IsWinXPOrGreater() && m_bWinTheme);
  445. m_cpSortBack.EnableWindow(m_bSortColor);
  446. m_cpSortText.EnableWindow(m_bSortColor);
  447. m_cpRowBack.EnableWindow(m_bRowColor);
  448. m_cpRowText.EnableWindow(m_bRowColor);
  449. m_cpListBack.EnableWindow(m_bListColor);
  450. m_cpListText.EnableWindow(m_bListColor);
  451. if (bRedraw)
  452. {
  453. RedrawWindow(NULL, NULL,
  454. RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);
  455. }
  456. }
  457. void CListCtrlDlg::OnChkAutosize()
  458. {
  459. UpdateData();
  460. EnableControls(FALSE);
  461. // enable auto sizing.
  462. m_header.EnableAutoSize(BoolType(m_bAutoSize));
  463. if (m_bAutoSize)
  464. m_header.ResizeColumnsToFit();
  465. }
  466. void CListCtrlDlg::OnChkDisablesizing()
  467. {
  468. UpdateData();
  469. EnableControls(FALSE);
  470. if (!m_bDisableSizing)
  471. {
  472. m_iDisableSizing = 0;
  473. m_header.ThawAllColumns();
  474. UpdateData(FALSE);
  475. }
  476. }
  477. void CListCtrlDlg::OnChkMinimumsize()
  478. {
  479. UpdateData();
  480. EnableControls(FALSE);
  481. // enable minimum sizing.
  482. m_iMinSize = 25;
  483. m_header.SetMinSize(m_iMinSize);
  484. UpdateData(FALSE);
  485. }
  486. void CListCtrlDlg::OnChkSortcolor()
  487. {
  488. UpdateData();
  489. EnableControls(FALSE);
  490. m_listCtrl.EnableUserSortColor(BoolType(m_bSortColor));
  491. m_listCtrl.RedrawWindow();
  492. }
  493. void CListCtrlDlg::OnSelEndOkSortBackColor()
  494. {
  495. UpdateData();
  496. }
  497. void CListCtrlDlg::OnSelEndOkSortTextColor()
  498. {
  499. UpdateData();
  500. }
  501. void CListCtrlDlg::OnChkListcolor()
  502. {
  503. UpdateData();
  504. EnableControls(FALSE);
  505. m_listCtrl.EnableUserListColor(BoolType(m_bListColor));
  506. m_listCtrl.RedrawWindow();
  507. }
  508. void CListCtrlDlg::OnSelEndOkListBackColor()
  509. {
  510. UpdateData();
  511. }
  512. void CListCtrlDlg::OnSelEndOkListTextColor()
  513. {
  514. UpdateData();
  515. }
  516. void CListCtrlDlg::OnChkRowcolor()
  517. {
  518. UpdateData();
  519. EnableControls(FALSE);
  520. m_listCtrl.EnableUserRowColor(BoolType(m_bRowColor));
  521. m_listCtrl.RedrawWindow();
  522. }
  523. void CListCtrlDlg::OnSelEndOkRowBackColor()
  524. {
  525. UpdateData();
  526. }
  527. void CListCtrlDlg::OnSelEndOkRowTextColor()
  528. {
  529. UpdateData();
  530. }
  531. void CListCtrlDlg::OnChkFullRowSelect()
  532. {
  533. UpdateData();
  534. m_listCtrl.ModifyExtendedStyle( m_bFullRowSel ? 0 : LVS_EX_FULLROWSELECT,
  535. m_bFullRowSel ? LVS_EX_FULLROWSELECT : 0 );
  536. }
  537. void CListCtrlDlg::OnChkGridLines()
  538. {
  539. UpdateData();
  540. m_listCtrl.ModifyExtendedStyle( m_bGridLines ? 0 : LVS_EX_GRIDLINES,
  541. m_bGridLines ? LVS_EX_GRIDLINES : 0 );
  542. }
  543. void CListCtrlDlg::OnChkCheckBoxes()
  544. {
  545. UpdateData();
  546. m_listCtrl.ModifyExtendedStyle( m_bCheckBoxes ? 0 : LVS_EX_CHECKBOXES,
  547. m_bCheckBoxes ? LVS_EX_CHECKBOXES : 0 );
  548. }
  549. void CListCtrlDlg::OnChkHeaderDragDrop()
  550. {
  551. UpdateData();
  552. m_listCtrl.ModifyExtendedStyle( m_bDragDrop ? 0 : LVS_EX_HEADERDRAGDROP,
  553. m_bDragDrop ? LVS_EX_HEADERDRAGDROP : 0 );
  554. }
  555. void CListCtrlDlg::OnBtnSizeToFit()
  556. {
  557. m_header.ResizeColumnsToFit();
  558. }
  559. void CListCtrlDlg::OnChkEnable()
  560. {
  561. UpdateData();
  562. m_listCtrl.EnableWindow(m_bEnableList);
  563. }
  564. void CListCtrlDlg::ClearSelection()
  565. {
  566. for (int iItem = 0; iItem < m_listCtrl.GetItemCount(); ++iItem)
  567. {
  568. m_listCtrl.SetItemState(iItem, 0, LVIS_SELECTED);
  569. }
  570. }
  571. void CListCtrlDlg::OnBtnUpdate()
  572. {
  573. if (m_bListColor)
  574. {
  575. m_listCtrl.SetListTextColor(m_crListText);
  576. m_listCtrl.SetListBackColor(m_crListBack);
  577. }
  578. if (m_bRowColor)
  579. {
  580. for (POSITION pos = m_listCtrl.GetFirstSelectedItemPosition(); pos;)
  581. {
  582. int iItem = m_listCtrl.GetNextSelectedItem(pos);
  583. m_listCtrl.SetRowColor(iItem, m_crRowText, m_crRowBack);
  584. }
  585. ClearSelection();
  586. }
  587. if (m_bSortColor)
  588. {
  589. m_listCtrl.SetSortBackColor(m_cpSortBack.GetColor());
  590. m_listCtrl.SetSortTextColor(m_cpSortText.GetColor());
  591. }
  592. m_listCtrl.RedrawWindow();
  593. }
  594. void CListCtrlDlg::OnBtnReset()
  595. {
  596. CXTColorRef crSortBack(GetXtremeColor(COLOR_WINDOW));
  597. crSortBack.subtract(RGB(8,8,8));
  598. m_crRowText  = GetXtremeColor(COLOR_WINDOWTEXT);
  599. m_crListText = GetXtremeColor(COLOR_WINDOWTEXT);
  600. m_crSortText = GetXtremeColor(COLOR_WINDOWTEXT);
  601. m_crRowBack  = GetXtremeColor(COLOR_WINDOW);
  602. m_crListBack = GetXtremeColor(COLOR_WINDOW);
  603. m_crSortBack = crSortBack;
  604. m_listCtrl.SetListTextColor(m_crListText);
  605. m_listCtrl.SetListBackColor(m_crListBack);
  606. m_listCtrl.SetSortTextColor(m_crSortText);
  607. m_listCtrl.SetSortBackColor(m_crSortBack);
  608. m_listCtrl.RemoveRowColors();
  609. UpdateData(FALSE);
  610. m_listCtrl.RedrawWindow();
  611. }