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

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #include "stdafx.h"
  22. #if (!defined __EXTCOLORDLG_H)
  23. #include <ExtColorDlg.h>
  24. #endif
  25. #if (!defined __EXT_PAINT_MANAGER_H)
  26. #include <ExtPaintManager.h>
  27. #endif
  28. #if (!defined __EXT_CONTROLS_COMMON_H)
  29. #include <ExtControlsCommon.h>
  30. #endif
  31. #if (!defined __EXT_LOCALIZATION_H)
  32. #include <../Src/ExtLocalization.h>
  33. #endif
  34. #include <Resources/Resource.h>
  35. #ifdef _DEBUG
  36. #define new DEBUG_NEW
  37. #undef THIS_FILE
  38. static char THIS_FILE[] = __FILE__;
  39. #endif
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CExtColorDlg dialog
  42. IMPLEMENT_DYNAMIC( CExtColorDlg, CExtResizableDialog );
  43. CExtColorDlg::CExtColorDlg(
  44. COLORREF clrInit /*= RGB(255,255,255)*/ ,
  45. COLORREF clrNew /*= RGB(255,255,255)*/ ,
  46. CWnd* pParent /*=NULL*/
  47. )
  48. : __BASEOF_CExtColorDlg__ ( IDD_EXT_COLOR_DIALOG, pParent )
  49. , m_clrInit( clrInit )
  50. , m_clrNew( clrNew )
  51. , m_strCaption( _T("") )
  52. , m_bDialogInitColplete( false )
  53. , m_bSyncingValues( false )
  54. , m_wndColorCtrl( CExtColorCtrl::MODE_HEXAGON )
  55. , m_wndColorDiff( CExtColorCtrl::MODE_DIFF )
  56. {
  57. //{{AFX_DATA_INIT(CExtColorDlg)
  58. // NOTE: the ClassWizard will add member initialization here
  59. //}}AFX_DATA_INIT
  60. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  61. m_hIcon = AfxGetApp()->LoadIcon(IDD_EXT_COLOR_DIALOG);
  62. ASSERT( m_hIcon != NULL );
  63. }
  64. CExtColorDlg::~CExtColorDlg()
  65. {
  66. ASSERT( m_hIcon != NULL );
  67. if( m_hIcon != NULL )
  68. ::DestroyIcon( m_hIcon );
  69. }
  70. void CExtColorDlg::DoDataExchange(CDataExchange* pDX)
  71. {
  72. __BASEOF_CExtColorDlg__ :: DoDataExchange(pDX);
  73. //{{AFX_DATA_MAP(CExtColorDlg)
  74. DDX_Control(pDX, IDC_SPIN_C, m_SpinC);
  75. DDX_Control(pDX, IDC_SPIN_M, m_SpinM);
  76. DDX_Control(pDX, IDC_SPIN_Y, m_SpinY);
  77. DDX_Control(pDX, IDC_SPIN_S, m_SpinS);
  78. DDX_Control(pDX, IDC_SPIN_R, m_SpinR);
  79. DDX_Control(pDX, IDC_SPIN_L, m_SpinL);
  80. DDX_Control(pDX, IDC_SPIN_H, m_SpinH);
  81. DDX_Control(pDX, IDC_SPIN_G, m_SpinG);
  82. DDX_Control(pDX, IDC_SPIN_B, m_SpinB);
  83. DDX_Control(pDX, IDC_EDIT_S, m_EditS);
  84. DDX_Control(pDX, IDC_EDIT_R, m_EditR);
  85. DDX_Control(pDX, IDC_EDIT_L, m_EditL);
  86. DDX_Control(pDX, IDC_EDIT_H, m_EditH);
  87. DDX_Control(pDX, IDC_EDIT_G, m_EditG);
  88. DDX_Control(pDX, IDC_EDIT_B, m_EditB);
  89. DDX_Control(pDX, IDC_EDIT_C, m_EditC);
  90. DDX_Control(pDX, IDC_EDIT_M, m_EditM);
  91. DDX_Control(pDX, IDC_EDIT_Y, m_EditY);
  92. DDX_Control(pDX, IDC_COMBO_SEL_TYPE, m_ComboType);
  93. DDX_Control(pDX, IDCANCEL, m_BtnCancel);
  94. DDX_Control(pDX, IDOK, m_BtnOK);
  95. DDX_Control(pDX, IDC_STATIC_COLORS_TEXT, m_labelColors);
  96. DDX_Control(pDX, IDC_STATIC_R, m_labelChR);
  97. DDX_Control(pDX, IDC_STATIC_G, m_labelChG);
  98. DDX_Control(pDX, IDC_STATIC_B, m_labelChB);
  99. DDX_Control(pDX, IDC_STATIC_C, m_labelChC);
  100. DDX_Control(pDX, IDC_STATIC_M, m_labelChM);
  101. DDX_Control(pDX, IDC_STATIC_Y, m_labelChY);
  102. DDX_Control(pDX, IDC_STATIC_H, m_labelChH);
  103. DDX_Control(pDX, IDC_STATIC_S, m_labelChS);
  104. DDX_Control(pDX, IDC_STATIC_L, m_labelChL);
  105. DDX_Control(pDX, IDC_STATIC_TXT_NEW, m_labelTxtNew);
  106. DDX_Control(pDX, IDC_STATIC_TXT_CURRENT, m_labelTxtCurrent);
  107. //}}AFX_DATA_MAP
  108. }
  109. BEGIN_MESSAGE_MAP( CExtColorDlg, CExtResizableDialog )
  110. //{{AFX_MSG_MAP(CExtColorDlg)
  111. ON_WM_CONTEXTMENU()
  112. ON_CBN_SELENDOK(IDC_COMBO_SEL_TYPE, OnSelendokComboSelType)
  113. ON_WM_SIZE()
  114. //}}AFX_MSG_MAP
  115. ON_REGISTERED_MESSAGE(CExtColorCtrl::g_nMsgColorChanged,OnColorChanged)
  116. ON_EN_CHANGE(IDC_EDIT_C, SyncFromEditCMY)
  117. ON_EN_CHANGE(IDC_EDIT_M, SyncFromEditCMY)
  118. ON_EN_CHANGE(IDC_EDIT_Y, SyncFromEditCMY)
  119. ON_EN_CHANGE(IDC_EDIT_R, SyncFromEditRGB)
  120. ON_EN_CHANGE(IDC_EDIT_B, SyncFromEditRGB)
  121. ON_EN_CHANGE(IDC_EDIT_G, SyncFromEditRGB)
  122. ON_EN_CHANGE(IDC_EDIT_H, SyncFromEditHSL)
  123. ON_EN_CHANGE(IDC_EDIT_S, SyncFromEditHSL)
  124. ON_EN_CHANGE(IDC_EDIT_L, SyncFromEditHSL)
  125. END_MESSAGE_MAP()
  126. /////////////////////////////////////////////////////////////////////////////
  127. // CExtColorDlg message handlers
  128. BOOL CExtColorDlg::OnInitDialog()
  129. {
  130. m_bDialogInitColplete = false;
  131. if( ! __BASEOF_CExtColorDlg__ :: OnInitDialog() )
  132. {
  133. ASSERT( FALSE );
  134. return FALSE;
  135. }
  136. m_ComboType.ResetContent();
  137. ASSERT( m_ComboType.GetCount() == 0 );
  138. for( int i = int(CExtColorCtrl::MODE_NAMED_MIN);
  139. i <= int(CExtColorCtrl::MODE_NAMED_MAX);
  140. i++
  141. )
  142. m_ComboType.AddString(
  143. CExtColorCtrl::GetColorModeName(
  144. CExtColorCtrl::e_mode_t(i)
  145. )
  146. );
  147. ASSERT( m_hIcon != NULL );
  148. SetIcon( m_hIcon, TRUE );
  149. SetIcon( m_hIcon, FALSE );
  150. if( !m_strCaption.IsEmpty() )
  151. {
  152. int nCP = m_strCaption.ReverseFind( _T('n') );
  153. if( nCP > 0 )
  154. {
  155. int nLen = m_strCaption.GetLength();
  156. ASSERT( nLen > 0 );
  157. int nCPR = nLen - nCP - 1;
  158. m_strCaption = m_strCaption.Right( nCPR );
  159. }
  160. if( !m_strCaption.IsEmpty() )
  161. SetWindowText( m_strCaption );
  162. }
  163. m_wndColorCtrl.m_selClrs.m_clrCurrent = m_clrInit;
  164. m_wndColorCtrl.m_selClrs.m_clrPrev = m_clrInit;
  165. m_wndColorCtrl.m_selClrs.m_clrNew = m_clrNew;
  166. m_wndColorDiff.m_selClrs.m_clrCurrent = m_clrInit;
  167. m_wndColorDiff.m_selClrs.m_clrPrev = m_clrInit;
  168. m_wndColorDiff.m_selClrs.m_clrNew = m_clrInit; //m_clrNew;
  169. //m_ComboType.SetCurSel( 0 );
  170. m_ComboType.SetCurSel( (int)(CExtColorCtrl::e_mode_t)m_wndColorCtrl );
  171. AddAnchor( IDC_COMBO_SEL_TYPE, __RDA_LT, __RDA_RT );
  172. AddAnchor( IDC_STATIC_HEX_FULL, __RDA_LT, __RDA_RB );
  173. AddAnchor( IDC_SPIN_R, __RDA_RT );
  174. AddAnchor( IDC_STATIC_R, __RDA_RT );
  175. AddAnchor( IDC_EDIT_R, __RDA_RT );
  176. AddAnchor( IDC_SPIN_G, __RDA_RT );
  177. AddAnchor( IDC_STATIC_G, __RDA_RT );
  178. AddAnchor( IDC_EDIT_G, __RDA_RT );
  179. AddAnchor( IDC_SPIN_B, __RDA_RT );
  180. AddAnchor( IDC_STATIC_B, __RDA_RT );
  181. AddAnchor( IDC_EDIT_B, __RDA_RT );
  182. AddAnchor( IDC_SPIN_H, __RDA_RT );
  183. AddAnchor( IDC_STATIC_H, __RDA_RT );
  184. AddAnchor( IDC_EDIT_H, __RDA_RT );
  185. AddAnchor( IDC_SPIN_S, __RDA_RT );
  186. AddAnchor( IDC_STATIC_S, __RDA_RT );
  187. AddAnchor( IDC_EDIT_S, __RDA_RT );
  188. AddAnchor( IDC_SPIN_L, __RDA_RT );
  189. AddAnchor( IDC_STATIC_L, __RDA_RT );
  190. AddAnchor( IDC_EDIT_L, __RDA_RT );
  191. AddAnchor( IDC_SPIN_C, __RDA_RT );
  192. AddAnchor( IDC_STATIC_C, __RDA_RT );
  193. AddAnchor( IDC_EDIT_C, __RDA_RT );
  194. AddAnchor( IDC_SPIN_M, __RDA_RT );
  195. AddAnchor( IDC_STATIC_M, __RDA_RT );
  196. AddAnchor( IDC_EDIT_M, __RDA_RT );
  197. AddAnchor( IDC_SPIN_Y, __RDA_RT );
  198. AddAnchor( IDC_STATIC_Y, __RDA_RT );
  199. AddAnchor( IDC_EDIT_Y, __RDA_RT );
  200. AddAnchor( IDC_STATIC_TXT_NEW, __RDA_RT );
  201. AddAnchor( IDC_STATIC_TXT_CURRENT, __RDA_RT );
  202. AddAnchor( IDC_STATIC_CMP, __RDA_RT );
  203. AddAnchor( IDOK, __RDA_LB );
  204. AddAnchor( IDCANCEL, __RDA_LB );
  205. ShowSizeGrip( TRUE );
  206. VERIFY(
  207. m_wndColorCtrl.SubclassDlgItem(
  208. IDC_STATIC_HEX_FULL,
  209. this
  210. )
  211. );
  212. VERIFY(
  213. m_wndColorDiff.SubclassDlgItem(
  214. IDC_STATIC_CMP,
  215. this
  216. )
  217. );
  218. m_SpinR.SetRange( 0, 255 );
  219. m_SpinG.SetRange( 0, 255 );
  220. m_SpinB.SetRange( 0, 255 );
  221. m_SpinH.SetRange( 0, 255 );
  222. m_SpinL.SetRange( 0, 255 );
  223. m_SpinS.SetRange( 0, 255 );
  224. m_SpinC.SetRange( 0, 255 );
  225. m_SpinM.SetRange( 0, 255 );
  226. m_SpinY.SetRange( 0, 255 );
  227. m_bDialogInitColplete = true;
  228. OnColorChanged(
  229. (WPARAM)m_wndColorCtrl.GetSafeHwnd(),
  230. (LPARAM)&m_wndColorCtrl.m_selClrs
  231. );
  232. m_wndColorDiff.SetupColor( m_clrInit, false );
  233. _ColorModelLoad();
  234. if( ( ! m_strSection.IsEmpty() ) && ( ! m_strEntryDialogPosition.IsEmpty() ) )
  235. EnableSaveRestore( LPCTSTR(m_strSection), LPCTSTR(m_strEntryDialogPosition) );
  236. return TRUE;
  237. }
  238. void CExtColorDlg::OnOK()
  239. {
  240. ASSERT_VALID( this );
  241. _ColorModelSave();
  242. __BASEOF_CExtColorDlg__::OnOK();
  243. }
  244. void CExtColorDlg::OnCancel()
  245. {
  246. ASSERT_VALID( this );
  247. _ColorModelSave();
  248. __BASEOF_CExtColorDlg__::OnCancel();
  249. }
  250. bool CExtColorDlg::_ColorModelLoad()
  251. {
  252. ASSERT_VALID( this );
  253. if( m_strSection.IsEmpty()
  254. || m_strEntryColorModelSelection.IsEmpty()
  255. || m_strEntryColorModelSelection == m_strEntryDialogPosition
  256. || GetSafeHwnd() == NULL
  257. || m_ComboType.GetSafeHwnd() == NULL
  258. )
  259. return false;
  260. INT nVal = (INT)
  261. ::AfxGetApp() ->
  262. GetProfileInt( LPCTSTR(m_strSection), LPCTSTR(m_strEntryColorModelSelection), -1 );
  263. if( ! ( INT(CExtColorCtrl::MODE_NAMED_MIN) <= nVal && nVal <= INT(CExtColorCtrl::MODE_NAMED_MAX) ) )
  264. return false;
  265. CExtColorCtrl::e_mode_t eMode = (CExtColorCtrl::e_mode_t) nVal;
  266. m_ComboType.SetCurSel( nVal );
  267. m_wndColorCtrl = eMode;
  268. return true;
  269. }
  270. bool CExtColorDlg::_ColorModelSave()
  271. {
  272. ASSERT_VALID( this );
  273. if( m_strSection.IsEmpty()
  274. || m_strEntryColorModelSelection.IsEmpty()
  275. || m_strEntryColorModelSelection == m_strEntryDialogPosition
  276. || GetSafeHwnd() == NULL
  277. || m_ComboType.GetSafeHwnd() == NULL
  278. )
  279. return false;
  280. CExtColorCtrl::e_mode_t eMode = (CExtColorCtrl::e_mode_t) m_ComboType.GetCurSel();
  281. INT nVal = (INT) eMode;
  282. if( ! ( INT(CExtColorCtrl::MODE_NAMED_MIN) <= nVal && nVal <= INT(CExtColorCtrl::MODE_NAMED_MAX) ) )
  283. return false;
  284. bool bRetVal =
  285. ::AfxGetApp() ->
  286. WriteProfileInt( LPCTSTR(m_strSection), LPCTSTR(m_strEntryColorModelSelection), nVal )
  287. ? true : false;
  288. return bRetVal;
  289. }
  290. __EXT_MFC_INT_PTR CExtColorDlg::DoModal()
  291. {
  292. m_bDialogInitColplete = false;
  293. __EXT_MFC_INT_PTR nRetVal = __BASEOF_CExtColorDlg__ :: DoModal();
  294. m_bDialogInitColplete = false;
  295. return nRetVal;
  296. }
  297. void CExtColorDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
  298. {
  299. pWnd;
  300. point;
  301. }
  302. void CExtColorDlg::OnSelendokComboSelType() 
  303. {
  304. if( ! m_bDialogInitColplete )
  305. return;
  306. CExtColorCtrl::e_mode_t eMode =
  307. (CExtColorCtrl::e_mode_t)m_ComboType.GetCurSel();
  308. m_wndColorCtrl = eMode;
  309. }
  310. void CExtColorDlg::OnSize(UINT nType, int cx, int cy) 
  311. {
  312. __BASEOF_CExtColorDlg__ :: OnSize(nType, cx, cy);
  313. Invalidate();
  314. UpdateWindow();
  315. }
  316. LRESULT CExtColorDlg::OnColorChanged(WPARAM wParam,LPARAM lParam)
  317. {
  318. wParam;
  319. if( m_bSyncingValues )
  320. return 0;
  321. m_bSyncingValues = true;
  322. CExtColorCtrl::selection_colors_t * pClrs =
  323. (CExtColorCtrl::selection_colors_t *)lParam;
  324. ASSERT( pClrs != NULL );
  325. SyncToEditRGB( pClrs->m_clrNew, true, true, true );
  326. m_bSyncingValues = false;
  327. return 0;
  328. }
  329. void CExtColorDlg::SyncToEditRGB(
  330. COLORREF clr,
  331. bool bSyncRGB,
  332. bool bSyncCMY,
  333. bool bSyncHLS
  334. )
  335. {
  336. if( bSyncRGB )
  337. {
  338. CExtSafeString sR,sG,sB;
  339. sR.Format( _T("%d"), GetRValue(clr) );
  340. sG.Format( _T("%d"), GetGValue(clr) );
  341. sB.Format( _T("%d"), GetBValue(clr) );
  342. m_EditR.SetWindowText( sR );
  343. m_EditG.SetWindowText( sG );
  344. m_EditB.SetWindowText( sB );
  345. } // if( bSyncRGB )
  346. if( bSyncCMY )
  347. {
  348. COLORREF clrCMY =
  349. CExtBitmap::stat_RGBtoCMY( clr );
  350. CExtSafeString sC,sM,sY;
  351. sC.Format( _T("%d"), GetRValue(clrCMY) );
  352. sM.Format( _T("%d"), GetGValue(clrCMY) );
  353. sY.Format( _T("%d"), GetBValue(clrCMY) );
  354. m_EditC.SetWindowText( sC );
  355. m_EditM.SetWindowText( sM );
  356. m_EditY.SetWindowText( sY );
  357. } // if( bSyncCMY )
  358. if( bSyncHLS )
  359. {
  360. CExtSafeString sH,sS,sL;
  361. double fH=0.0,fS=0.0,fL=0.0;
  362. //CExtPaintManager::stat_ConvertRGBToHSL
  363. CExtBitmap::stat_RGBtoHSL(
  364. clr, &fH, &fS, &fL );
  365. int nH,nS,nL;
  366. nH = min( 255, (UINT)(0.5+fH*255.0) ); // UINT(fH*255.0);
  367. nS = min( 255, (UINT)(0.5+fS*255.0) ); // UINT(fS*255.0);
  368. nL = min( 255, (UINT)(0.5+fL*255.0) ); // UINT(fL*255.0);
  369. sH.Format( _T("%d"), nH );
  370. sS.Format( _T("%d"), nS );
  371. sL.Format( _T("%d"), nL );
  372. m_EditH.SetWindowText( sH );
  373. m_EditS.SetWindowText( sS );
  374. m_EditL.SetWindowText( sL );
  375. } // if( bSyncHLS )
  376. if( m_wndColorCtrl.m_selClrs.m_clrNew != clr )
  377. {
  378. // m_wndColorCtrl.m_selClrs.m_clrNew = clr;
  379. // m_wndColorCtrl.Invalidate();
  380. // m_wndColorCtrl.UpdateWindow();
  381. m_wndColorCtrl.SetupColor( clr, false );
  382. }
  383. if( m_wndColorDiff.m_selClrs.m_clrNew != clr )
  384. {
  385. // m_wndColorDiff.m_selClrs.m_clrNew = clr;
  386. // m_wndColorDiff.Invalidate();
  387. // m_wndColorDiff.UpdateWindow();
  388. m_wndColorDiff.SetupColor( clr, false );
  389. }
  390. m_clrNew = m_wndColorCtrl.m_selClrs.m_clrNew;
  391. }
  392. void CExtColorDlg::SyncFromEditRGB()
  393. {
  394. if( (! m_bDialogInitColplete ) || m_bSyncingValues )
  395. return;
  396. CExtLocalResourceHelper _LRH;
  397. CExtSafeString sMsgInvalidRange;
  398. if( ! g_ResourceManager->LoadString( sMsgInvalidRange, IDS_VALUE_IN_RNG_255 ) )
  399. sMsgInvalidRange = _T("Value must be in range 0..255");
  400. m_bSyncingValues = true;
  401. CString s;
  402. m_EditR.GetWindowText( s );
  403. int nR = _ttol(s);
  404. if( nR < 0 || nR > 255 )
  405. {
  406. UINT nType = MB_OK;
  407. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  408. nType |= MB_RTLREADING;
  409. #if (!defined __EXT_MFC_NO_MSG_BOX)
  410. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  411. #else
  412. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  413. #endif
  414. m_EditR.SetFocus();
  415. m_bSyncingValues = false;
  416. return;
  417. }
  418. m_EditG.GetWindowText( s );
  419. int nG = _ttol(s);
  420. if( nG < 0 || nG > 255 )
  421. {
  422. UINT nType = MB_OK;
  423. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  424. nType |= MB_RTLREADING;
  425. #if (!defined __EXT_MFC_NO_MSG_BOX)
  426. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  427. #else
  428. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  429. #endif
  430. m_EditG.SetFocus();
  431. m_bSyncingValues = false;
  432. return;
  433. }
  434. m_EditB.GetWindowText( s );
  435. int nB = _ttol(s);
  436. if( nB < 0 || nB > 255 )
  437. {
  438. UINT nType = MB_OK;
  439. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  440. nType |= MB_RTLREADING;
  441. #if (!defined __EXT_MFC_NO_MSG_BOX)
  442. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  443. #else
  444. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  445. #endif
  446. m_EditB.SetFocus();
  447. m_bSyncingValues = false;
  448. return;
  449. }
  450. COLORREF clr = RGB(nR,nG,nB);
  451. SyncToEditRGB( clr, false, true, true );
  452. m_bSyncingValues = false;
  453. }
  454. void CExtColorDlg::SyncFromEditCMY()
  455. {
  456. if( (! m_bDialogInitColplete ) || m_bSyncingValues )
  457. return;
  458. CExtLocalResourceHelper _LRH;
  459. CExtSafeString sMsgInvalidRange;
  460. if( ! g_ResourceManager->LoadString( sMsgInvalidRange, IDS_VALUE_IN_RNG_255 ) )
  461. sMsgInvalidRange = _T("Value must be in range 0..255");
  462. m_bSyncingValues = true;
  463. CString s;
  464. m_EditC.GetWindowText( s );
  465. int nC = _ttol(s);
  466. if( nC < 0 || nC > 255 )
  467. {
  468. UINT nType = MB_OK;
  469. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  470. nType |= MB_RTLREADING;
  471. #if (!defined __EXT_MFC_NO_MSG_BOX)
  472. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  473. #else
  474. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  475. #endif
  476. m_EditC.SetFocus();
  477. m_bSyncingValues = false;
  478. return;
  479. }
  480. m_EditM.GetWindowText( s );
  481. int nM = _ttol(s);
  482. if( nM < 0 || nM > 255 )
  483. {
  484. UINT nType = MB_OK;
  485. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  486. nType |= MB_RTLREADING;
  487. #if (!defined __EXT_MFC_NO_MSG_BOX)
  488. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  489. #else
  490. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  491. #endif
  492. m_EditM.SetFocus();
  493. m_bSyncingValues = false;
  494. return;
  495. }
  496. m_EditY.GetWindowText( s );
  497. int nY = _ttol(s);
  498. if( nY < 0 || nY > 255 )
  499. {
  500. UINT nType = MB_OK;
  501. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  502. nType |= MB_RTLREADING;
  503. #if (!defined __EXT_MFC_NO_MSG_BOX)
  504. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  505. #else
  506. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  507. #endif
  508. m_EditY.SetFocus();
  509. m_bSyncingValues = false;
  510. return;
  511. }
  512. COLORREF clr =
  513. CExtBitmap::stat_CMYtoRGB(
  514. RGB( nC, nM, nY )
  515. );
  516. SyncToEditRGB( clr, true, false, true );
  517. m_bSyncingValues = false;
  518. }
  519. void CExtColorDlg::SyncFromEditHSL()
  520. {
  521. if( (! m_bDialogInitColplete ) || m_bSyncingValues )
  522. return;
  523. CExtLocalResourceHelper _LRH;
  524. CExtSafeString sMsgInvalidRange;
  525. if( ! g_ResourceManager->LoadString( sMsgInvalidRange, IDS_VALUE_IN_RNG_255 ) )
  526. sMsgInvalidRange = _T("Value must be in range 0..255");
  527. m_bSyncingValues = true;
  528. CString s;
  529. m_EditH.GetWindowText( s );
  530. int nH = _ttol(s);
  531. if( nH < 0 || nH > 255 )
  532. {
  533. UINT nType = MB_OK;
  534. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  535. nType |= MB_RTLREADING;
  536. #if (!defined __EXT_MFC_NO_MSG_BOX)
  537. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  538. #else
  539. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  540. #endif
  541. m_EditH.SetFocus();
  542. m_bSyncingValues = false;
  543. return;
  544. }
  545. m_EditS.GetWindowText( s );
  546. int nS = _ttol(s);
  547. if( nS < 0 || nS > 255 )
  548. {
  549. UINT nType = MB_OK;
  550. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  551. nType |= MB_RTLREADING;
  552. #if (!defined __EXT_MFC_NO_MSG_BOX)
  553. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  554. #else
  555. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  556. #endif
  557. m_EditS.SetFocus();
  558. m_bSyncingValues = false;
  559. return;
  560. }
  561. m_EditL.GetWindowText( s );
  562. int nL = _ttol(s);
  563. if( nL < 0 || nL > 255 )
  564. {
  565. UINT nType = MB_OK;
  566. if( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 )
  567. nType |= MB_RTLREADING;
  568. #if (!defined __EXT_MFC_NO_MSG_BOX)
  569. ::ProfUISMsgBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  570. #else
  571. ::MessageBox( GetSafeHwnd(), sMsgInvalidRange, NULL, nType );
  572. #endif
  573. m_EditL.SetFocus();
  574. m_bSyncingValues = false;
  575. return;
  576. }
  577. COLORREF clr =
  578. //CExtPaintManager::stat_GetRGBFromHLSExtend
  579. CExtBitmap::stat_HLStoRGB(
  580. min( 1.0, (double)(0.5+nH)/255.0 ), // double(nH)/255.0
  581. min( 1.0, (double)(0.5+nL)/255.0 ), // double(nL)/255.0
  582. min( 1.0, (double)(0.5+nS)/255.0 )  // double(nS)/255.0
  583. );
  584. SyncToEditRGB( clr, true, true, false );
  585. m_bSyncingValues = false;
  586. }