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

对话框与窗口

开发平台:

Visual C++

  1. // ColorPickerDlg.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 "ColorPicker.h"
  22. #include "ColorPickerDlg.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. /////////////////////////////////////////////////////////////////////////////
  30. // CColorPickerDlg dialog
  31. CColorPickerDlg::CColorPickerDlg(CWnd* pParent /*=NULL*/)
  32. : CXTResizeDialog(CColorPickerDlg::IDD, pParent)
  33. {
  34. //{{AFX_DATA_INIT(CColorPickerDlg)
  35. m_bExtended = TRUE;
  36. m_bMoreColors = TRUE;
  37. m_bNoFill = FALSE;
  38. m_3DBorder = FALSE;
  39. m_bDisable = FALSE;
  40. m_bDisplayHex = FALSE;
  41. m_bColorText = FALSE;
  42. m_bShowText = FALSE;
  43. m_iTheme = 2;
  44. //}}AFX_DATA_INIT
  45. m_clrText = RGB(0xff,0xff,0xff);
  46. m_clrBack = RGB(0x00,0x00,0xff);
  47. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  48. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  49. }
  50. void CColorPickerDlg::DoDataExchange(CDataExchange* pDX)
  51. {
  52. CXTResizeDialog::DoDataExchange(pDX);
  53. //{{AFX_DATA_MAP(CColorPickerDlg)
  54. DDX_Control(pDX, IDC_GBOX_BUTTON, m_gboxButton);
  55. DDX_Control(pDX, IDC_GBOX_POPUP, m_gboxPopup);
  56. DDX_Control(pDX, IDC_GBOX_DIALOG, m_gboxDialog);
  57. DDX_Control(pDX, IDC_GBOX_THEME, m_gboxTheme);
  58. DDX_Control(pDX, IDC_COMBO_DEMO, m_comboBox);
  59. DDX_Control(pDX, IDC_CLR_TEXT, m_cpTextColor);
  60. DDX_Control(pDX, IDC_CLR_BACK, m_cpBackColor);
  61. DDX_Check(pDX, IDC_CHK_EXTENDED, m_bExtended);
  62. DDX_Check(pDX, IDC_CHK_MORECOLORS, m_bMoreColors);
  63. DDX_Check(pDX, IDC_CHK_NOFILL, m_bNoFill);
  64. DDX_Check(pDX, IDC_CHK_3DBORDER, m_3DBorder);
  65. DDX_Check(pDX, IDC_CHK_DISABLE, m_bDisable);
  66. DDX_Check(pDX, IDC_CHK_DISPLAY_HEX, m_bDisplayHex);
  67. DDX_Check(pDX, IDC_CHK_COLORTEXT, m_bColorText);
  68. DDX_Check(pDX, IDC_CHK_NOTEXT, m_bShowText);
  69. DDX_Radio(pDX, IDC_RADIO_DEFAULT, m_iTheme);
  70. //}}AFX_DATA_MAP
  71. DDX_XTColorPicker(pDX, IDC_CLR_TEXT, m_clrText);
  72. DDX_XTColorPicker(pDX, IDC_CLR_BACK, m_clrBack);
  73. }
  74. BEGIN_MESSAGE_MAP(CColorPickerDlg, CXTResizeDialog)
  75. //{{AFX_MSG_MAP(CColorPickerDlg)
  76. ON_WM_SYSCOMMAND()
  77. ON_WM_PAINT()
  78. ON_WM_QUERYDRAGICON()
  79. ON_WM_CTLCOLOR()
  80. ON_CPN_XT_SELENDOK(IDC_CLR_TEXT, OnSelEndOkTextClr)
  81. ON_CPN_XT_SELENDOK(IDC_CLR_BACK, OnSelEndOkBackClr)
  82. ON_BN_CLICKED(IDC_CHK_NOFILL, OnChkNofill)
  83. ON_BN_CLICKED(IDC_CHK_EXTENDED, OnChkExtended)
  84. ON_BN_CLICKED(IDC_CHK_MORECOLORS, OnChkMorecolors)
  85. ON_CBN_SETFOCUS(IDC_COMBO_DEMO, OnSetfocusComboDemo)
  86. ON_BN_CLICKED(IDC_CHK_3DBORDER, OnChk3dborder)
  87. ON_BN_CLICKED(IDC_CHK_DISPLAY_HEX, OnChkDisplayHex)
  88. ON_BN_CLICKED(IDC_CHK_DISABLE, OnChkDisable)
  89. ON_WM_DESTROY()
  90. ON_BN_CLICKED(IDC_CHK_NOTEXT, OnChkNoText)
  91. ON_BN_CLICKED(IDC_CHK_COLORTEXT, OnChkColorText)
  92. ON_BN_CLICKED(IDC_RADIO_DEFAULT, OnRadioDefault)
  93. ON_BN_CLICKED(IDC_RADIO_OFFICEXP, OnRadioOfficeXP)
  94. ON_BN_CLICKED(IDC_RADIO_OFFICE2003, OnRadioOffice2003)
  95. //}}AFX_MSG_MAP
  96. END_MESSAGE_MAP()
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CColorPickerDlg message handlers
  99. BOOL CColorPickerDlg::OnInitDialog()
  100. {
  101. CXTResizeDialog::OnInitDialog();
  102. // Add "About..." menu item to system menu.
  103. // IDM_ABOUTBOX must be in the system command range.
  104. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  105. ASSERT(IDM_ABOUTBOX < 0xF000);
  106. CMenu* pSysMenu = GetSystemMenu(FALSE);
  107. if (pSysMenu != NULL)
  108. {
  109. CString strAboutMenu;
  110. strAboutMenu.LoadString(IDS_ABOUTBOX);
  111. if (!strAboutMenu.IsEmpty())
  112. {
  113. pSysMenu->AppendMenu(MF_SEPARATOR);
  114. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  115. }
  116. }
  117. // Set the icon for this dialog.  The framework does this automatically
  118. //  when the application's main window is not a dialog
  119. SetIcon(m_hIcon, TRUE);         // Set big icon
  120. SetIcon(m_hIcon, FALSE);        // Set small icon
  121. // Set control resizing.
  122. SetResize(IDC_COMBO_DEMO,  SZ_TOP_LEFT,  SZ_TOP_RIGHT);
  123. SetResize(IDCANCEL,        SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  124. SetResize(IDC_GBOX_BUTTON, SZ_TOP_LEFT,  SZ_TOP_RIGHT);
  125. SetResize(IDC_GBOX_POPUP,  SZ_TOP_LEFT,   SZ_TOP_CENTER);
  126. SetResize(IDC_GBOX_THEME,  SZ_TOP_CENTER, SZ_TOP_RIGHT);
  127. SetResize(IDC_GBOX_DIALOG, SZ_TOP_LEFT,   SZ_TOP_RIGHT);
  128. SetResize(IDC_RADIO_DEFAULT,  SZ_TOP_CENTER,   SZ_TOP_RIGHT);
  129. SetResize(IDC_RADIO_OFFICEXP,  SZ_TOP_CENTER,   SZ_TOP_RIGHT);
  130. SetResize(IDC_RADIO_OFFICE2003,  SZ_TOP_CENTER,   SZ_TOP_RIGHT);
  131. // prevent vertical resizing.
  132. SetFlag(xtResizeNoVertical);
  133. // Load window placement
  134. LoadPlacement(_T("CColorPickerDlg"));
  135. //------------------------------------
  136. // TODO: Add extra initialization here
  137. //------------------------------------
  138. m_comboBox.SetCurSel(0);
  139. m_cpBackColor.SetColor(m_clrBack);
  140. m_cpBackColor.SetDefaultColor(GetSysColor(COLOR_WINDOW));
  141. m_cpBackColor.ShowText(m_bShowText);
  142. m_cpTextColor.SetColor(m_clrText);
  143. m_cpTextColor.SetDefaultColor(GetSysColor(COLOR_WINDOWTEXT));
  144. m_cpTextColor.ShowText(m_bShowText);
  145. // Add some user defined color values.
  146. CUIntArray arUserColors;
  147. arUserColors.Add(RGB(150,0,0));
  148. arUserColors.Add(RGB(0,150,0));
  149. arUserColors.Add(RGB(0,0,150));
  150. CXTColorSelectorCtrl::SetUserColors(arUserColors);
  151. /*
  152. SetColors method used to set custom colors for color popup
  153. static XTP_PICK_BUTTON standardColors[] =
  154. {
  155. {   RGB(0x00, 0x00, 0x00), XTP_IDS_CLR_BLACK            },
  156. {   RGB(0x80, 0x80, 0x80), XTP_IDS_CLR_GRAY             },
  157. {   RGB(0x80, 0x00, 0x00), XTP_IDS_CLR_MAROON           },
  158. {   RGB(0x80, 0x80, 0x00), XTP_IDS_CLR_OLIVE            },
  159. {   RGB(0x00, 0x80, 0x00), XTP_IDS_CLR_GREEN            },
  160. {   RGB(0x00, 0x80, 0x80), XTP_IDS_CLR_TEAL             },
  161. {   RGB(0x00, 0x00, 0x80), XTP_IDS_CLR_NAVY             },
  162. {   RGB(0x80, 0x00, 0x80), XTP_IDS_CLR_PURPLE           },
  163. {   RGB(0xFF, 0xFF, 0xFF), XTP_IDS_CLR_WHITE            },
  164. {   RGB(0xC0, 0xC0, 0xC0), XTP_IDS_CLR_SILVER           },
  165. {   RGB(0xFF, 0x00, 0x00), XTP_IDS_CLR_RED              },
  166. {   RGB(0xFF, 0xFF, 0x00), XTP_IDS_CLR_YELLOW           },
  167. {   RGB(0x00, 0xFF, 0x00), XTP_IDS_CLR_LIME             },
  168. {   RGB(0x00, 0xFF, 0xFF), XTP_IDS_CLR_AQUA             },
  169. {   RGB(0x00, 0x00, 0xFF), XTP_IDS_CLR_BLUE             },
  170. {   RGB(0xFF, 0x00, 0xFF), XTP_IDS_CLR_FUCHSIA          },
  171. };
  172. m_cpTextColor.SetColors(standardColors, _countof(standardColors), 8);
  173. */
  174. OnRadioOffice2003();
  175. return TRUE;  // return TRUE  unless you set the focus to a control
  176. }
  177. void CColorPickerDlg::OnDestroy()
  178. {
  179. // Save window placement
  180. SavePlacement(_T("CColorPickerDlg"));
  181. CXTResizeDialog::OnDestroy();
  182. }
  183. void CColorPickerDlg::OnSysCommand(UINT nID, LPARAM lParam)
  184. {
  185. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  186. {
  187. CAboutDlg dlgAbout;
  188. dlgAbout.DoModal();
  189. }
  190. else
  191. {
  192. CXTResizeDialog::OnSysCommand(nID, lParam);
  193. }
  194. }
  195. // If you add a minimize button to your dialog, you will need the code below
  196. //  to draw the icon.  For MFC applications using the document/view model,
  197. //  this is automatically done for you by the framework.
  198. void CColorPickerDlg::OnPaint()
  199. {
  200. if (IsIconic())
  201. {
  202. CPaintDC dc(this); // device context for painting
  203. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  204. // Center icon in client rectangle
  205. int cxIcon = GetSystemMetrics(SM_CXICON);
  206. int cyIcon = GetSystemMetrics(SM_CYICON);
  207. CRect rect;
  208. GetClientRect(&rect);
  209. int x = (rect.Width() - cxIcon + 1) / 2;
  210. int y = (rect.Height() - cyIcon + 1) / 2;
  211. // Draw the icon
  212. dc.DrawIcon(x, y, m_hIcon);
  213. }
  214. else
  215. {
  216. CXTResizeDialog::OnPaint();
  217. }
  218. }
  219. // The system calls this to obtain the cursor to display while the user drags
  220. //  the minimized window.
  221. HCURSOR CColorPickerDlg::OnQueryDragIcon()
  222. {
  223. return (HCURSOR) m_hIcon;
  224. }
  225. HBRUSH CColorPickerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  226. {
  227. HBRUSH hbr = CXTResizeDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  228. // TODO: Change any attributes of the DC here
  229. int nItem = pWnd->GetDlgCtrlID();
  230. switch (nItem)
  231. {
  232. case IDC_COMBO_DEMO:
  233. if( pWnd->IsWindowEnabled( ))
  234. {
  235. pDC->SetTextColor(m_clrText);
  236. pDC->SetBkColor(m_clrBack);
  237. }
  238. break;
  239. }
  240. // TODO: Return a different brush if the default is not desired
  241. return hbr;
  242. }
  243. void CColorPickerDlg::OnSelEndOkTextClr()
  244. {
  245. UpdateData();
  246. m_comboBox.Invalidate();
  247. }
  248. void CColorPickerDlg::OnSelEndOkBackClr()
  249. {
  250. UpdateData();
  251. m_comboBox.Invalidate();
  252. }
  253. void CColorPickerDlg::OnChkNofill()
  254. {
  255. // TODO: Add your control notification handler code here
  256. UpdateData();
  257. DWORD dwRem = m_bNoFill ? 0 : CPS_XT_NOFILL;
  258. DWORD dwAdd = m_bNoFill ? CPS_XT_NOFILL : 0;
  259. m_cpBackColor.ModifyCPStyle(dwRem, dwAdd);
  260. m_cpTextColor.ModifyCPStyle(dwRem, dwAdd);
  261. }
  262. void CColorPickerDlg::OnChkExtended()
  263. {
  264. // TODO: Add your control notification handler code here
  265. UpdateData();
  266. DWORD dwRem = m_bExtended ? 0 : CPS_XT_EXTENDED;
  267. DWORD dwAdd = m_bExtended ? CPS_XT_EXTENDED : 0;
  268. m_cpBackColor.ModifyCPStyle(dwRem, dwAdd);
  269. m_cpTextColor.ModifyCPStyle(dwRem, dwAdd);
  270. }
  271. void CColorPickerDlg::OnChkMorecolors()
  272. {
  273. // TODO: Add your control notification handler code here
  274. UpdateData();
  275. DWORD dwRem = m_bMoreColors ? 0 : CPS_XT_MORECOLORS;
  276. DWORD dwAdd = m_bMoreColors ? CPS_XT_MORECOLORS : 0;
  277. m_cpBackColor.ModifyCPStyle(dwRem, dwAdd);
  278. m_cpTextColor.ModifyCPStyle(dwRem, dwAdd);
  279. }
  280. void CColorPickerDlg::OnChk3dborder()
  281. {
  282. // TODO: Add your control notification handler code here
  283. UpdateData();
  284. DWORD dwRem = m_3DBorder ? 0 : CPS_XT_SHOW3DSELECTION;
  285. DWORD dwAdd = m_3DBorder ? CPS_XT_SHOW3DSELECTION : 0;
  286. m_cpBackColor.ModifyCPStyle(dwRem, dwAdd);
  287. m_cpTextColor.ModifyCPStyle(dwRem, dwAdd);
  288. }
  289. void CColorPickerDlg::OnChkDisplayHex()
  290. {
  291. // TODO: Add your control notification handler code here
  292. UpdateData();
  293. DWORD dwRem = m_bDisplayHex ? 0 : CPS_XT_SHOWHEXVALUE;
  294. DWORD dwAdd = m_bDisplayHex ? CPS_XT_SHOWHEXVALUE : 0;
  295. m_cpBackColor.ModifyCPStyle(dwRem, dwAdd);
  296. m_cpTextColor.ModifyCPStyle(dwRem, dwAdd);
  297. }
  298. void CColorPickerDlg::OnChkDisable()
  299. {
  300. // TODO: Add your control notification handler code here
  301. UpdateData();
  302. m_cpBackColor.EnableWindow(!m_bDisable);
  303. m_cpTextColor.EnableWindow(!m_bDisable);
  304. }
  305. void CColorPickerDlg::OnSetfocusComboDemo()
  306. {
  307. // don't allow interaction with combo box.
  308. m_cpTextColor.SetFocus();
  309. }
  310. void CColorPickerDlg::OnChkNoText()
  311. {
  312. UpdateData();
  313. m_cpBackColor.ShowText(m_bShowText);
  314. m_cpTextColor.ShowText(m_bShowText);
  315. }
  316. void CColorPickerDlg::OnChkColorText()
  317. {
  318. UpdateData();
  319. m_cpBackColor.ShowTextInColor(m_bColorText);
  320. m_cpTextColor.ShowTextInColor(m_bColorText);
  321. }
  322. void CColorPickerDlg::OnRadioDefault() 
  323. {
  324. XTThemeManager()->SetTheme(xtThemeDefault);
  325. }
  326. void CColorPickerDlg::OnRadioOfficeXP() 
  327. {
  328. XTThemeManager()->SetTheme(xtThemeOfficeXP);
  329. }
  330. void CColorPickerDlg::OnRadioOffice2003() 
  331. {
  332. XTThemeManager()->SetTheme(xtThemeOffice2003);
  333. }