ClrWellDemoDlg.cpp
上传用户:dengyong
上传日期:2007-01-01
资源大小:40k
文件大小:9k
源码类别:

组合框控件

开发平台:

Visual C++

  1. // ClrWellDemoDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ClrWellDemo.h"
  5. #include "ClrWellDemoDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. // No message handlers
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CClrWellDemoDlg dialog
  50. CClrWellDemoDlg::CClrWellDemoDlg(CWnd* pParent /*=NULL*/)
  51. : CDialog(CClrWellDemoDlg::IDD, pParent)
  52. {
  53. //{{AFX_DATA_INIT(CClrWellDemoDlg)
  54. m_Aqua = FALSE;
  55. m_Black = FALSE;
  56. m_Blue = FALSE;
  57. m_Fuschia = FALSE;
  58. m_Gray = FALSE;
  59. m_Green = FALSE;
  60. m_Lime = FALSE;
  61. m_Maroon = FALSE;
  62. m_Navy = FALSE;
  63. m_Olive = FALSE;
  64. m_Purple = FALSE;
  65. m_Red = FALSE;
  66. m_Silver = FALSE;
  67. m_Teal = FALSE;
  68. m_White = FALSE;
  69. m_Yellow = FALSE;
  70. m_IsotropicWells = FALSE;
  71. m_OuterBorder = 0;
  72. m_InnerBorder = 0;
  73. m_NumCols = 0;
  74. m_WellHeight = 0;
  75. m_Shape = 0;
  76. //}}AFX_DATA_INIT
  77. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  78. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  79. }
  80. void CClrWellDemoDlg::DoDataExchange(CDataExchange* pDX)
  81. {
  82. CDialog::DoDataExchange(pDX);
  83. //{{AFX_DATA_MAP(CClrWellDemoDlg)
  84. DDX_Control(pDX, IDC_OUTERBORDER_SPIN, m_OuterBorderSpin);
  85. DDX_Control(pDX, IDC_NUMCOLS_SPIN, m_NumColsSpin);
  86. DDX_Control(pDX, IDC_INNERBORDER_SPIN, m_InnerBorderSpin);
  87. DDX_Control(pDX, IDC_UPDATE, m_Update);
  88. DDX_Control(pDX, IDC_WELLHEIGHT_SPIN, m_WellHeightSpin);
  89. DDX_Control(pDX, IDC_WELLHEIGHT_EDIT, m_WellHeightEdit);
  90. DDX_Control(pDX, IDC_WIDTHSLIDER, m_SliderControl);
  91. DDX_Check(pDX, IDC_AQUA, m_Aqua);
  92. DDX_Check(pDX, IDC_BLACK, m_Black);
  93. DDX_Check(pDX, IDC_BLUE, m_Blue);
  94. DDX_Check(pDX, IDC_FUSCHIA, m_Fuschia);
  95. DDX_Check(pDX, IDC_GRAY, m_Gray);
  96. DDX_Check(pDX, IDC_GREEN, m_Green);
  97. DDX_Check(pDX, IDC_LIME, m_Lime);
  98. DDX_Check(pDX, IDC_MAROON, m_Maroon);
  99. DDX_Check(pDX, IDC_NAVY, m_Navy);
  100. DDX_Check(pDX, IDC_OLIVE, m_Olive);
  101. DDX_Check(pDX, IDC_PURPLE, m_Purple);
  102. DDX_Check(pDX, IDC_RED, m_Red);
  103. DDX_Check(pDX, IDC_SILVER, m_Silver);
  104. DDX_Check(pDX, IDC_TEAL, m_Teal);
  105. DDX_Check(pDX, IDC_WHITE, m_White);
  106. DDX_Check(pDX, IDC_YELLOW, m_Yellow);
  107. DDX_Check(pDX, IDC_ISOTROPICWELLS, m_IsotropicWells);
  108. DDX_Text(pDX, IDC_OUTERBORDER_EDIT, m_OuterBorder);
  109. DDX_Text(pDX, IDC_INNERBORDER_EDIT, m_InnerBorder);
  110. DDX_Text(pDX, IDC_NUMCOLS_EDIT, m_NumCols);
  111. DDX_Text(pDX, IDC_WELLHEIGHT_EDIT, m_WellHeight);
  112. DDX_Radio(pDX, IDC_SHAPE, m_Shape);
  113. //}}AFX_DATA_MAP
  114. }
  115. BEGIN_MESSAGE_MAP(CClrWellDemoDlg, CDialog)
  116. //{{AFX_MSG_MAP(CClrWellDemoDlg)
  117. ON_WM_SYSCOMMAND()
  118. ON_WM_PAINT()
  119. ON_WM_QUERYDRAGICON()
  120. ON_BN_CLICKED(IDC_ISOTROPICWELLS, OnIsotropicwells)
  121. ON_BN_CLICKED(IDC_UPDATE, OnUpdate)
  122. //}}AFX_MSG_MAP
  123. END_MESSAGE_MAP()
  124. /////////////////////////////////////////////////////////////////////////////
  125. // CClrWellDemoDlg message handlers
  126. BOOL CClrWellDemoDlg::OnInitDialog()
  127. {
  128. CDialog::OnInitDialog();
  129. // Add "About..." menu item to system menu.
  130. // IDM_ABOUTBOX must be in the system command range.
  131. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  132. ASSERT(IDM_ABOUTBOX < 0xF000);
  133. CMenu* pSysMenu = GetSystemMenu(FALSE);
  134. if (pSysMenu != NULL)
  135. {
  136. CString strAboutMenu;
  137. strAboutMenu.LoadString(IDS_ABOUTBOX);
  138. if (!strAboutMenu.IsEmpty())
  139. {
  140. pSysMenu->AppendMenu(MF_SEPARATOR);
  141. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  142. }
  143. }
  144. // Set the icon for this dialog.  The framework does this automatically
  145. //  when the application's main window is not a dialog
  146. SetIcon(m_hIcon, TRUE); // Set big icon
  147. SetIcon(m_hIcon, FALSE); // Set small icon
  148. m_ColorButton.SubclassDlgItem(IDC_COLORBTN, this);
  149.    m_SliderControl.SetRange(10,200);
  150.    m_SliderControl.SetTicFreq(10);
  151.    m_SliderControl.SetPos(100);
  152.    m_InnerBorderSpin.SetRange(0,5);
  153.    m_InnerBorderSpin.SetPos(0);
  154.    m_OuterBorderSpin.SetRange(0,10);
  155.    m_OuterBorderSpin.SetPos(0);
  156.    m_WellHeightSpin.SetRange(5,50);
  157.    m_WellHeightSpin.SetPos(10);
  158.    m_NumColsSpin.SetRange(1,40);
  159.    m_NumColsSpin.SetPos(4);
  160. return TRUE;  // return TRUE  unless you set the focus to a control
  161. }
  162. void CClrWellDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
  163. {
  164. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  165. {
  166. CAboutDlg dlgAbout;
  167. dlgAbout.DoModal();
  168. }
  169. else
  170. {
  171. CDialog::OnSysCommand(nID, lParam);
  172. }
  173. }
  174. // If you add a minimize button to your dialog, you will need the code below
  175. //  to draw the icon.  For MFC applications using the document/view model,
  176. //  this is automatically done for you by the framework.
  177. void CClrWellDemoDlg::OnPaint() 
  178. {
  179. if (IsIconic())
  180. {
  181. CPaintDC dc(this); // device context for painting
  182. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  183. // Center icon in client rectangle
  184. int cxIcon = GetSystemMetrics(SM_CXICON);
  185. int cyIcon = GetSystemMetrics(SM_CYICON);
  186. CRect rect;
  187. GetClientRect(&rect);
  188. int x = (rect.Width() - cxIcon + 1) / 2;
  189. int y = (rect.Height() - cyIcon + 1) / 2;
  190. // Draw the icon
  191. dc.DrawIcon(x, y, m_hIcon);
  192. }
  193. else
  194. {
  195. CDialog::OnPaint();
  196. }
  197. }
  198. // The system calls this to obtain the cursor to display while the user drags
  199. //  the minimized window.
  200. HCURSOR CClrWellDemoDlg::OnQueryDragIcon()
  201. {
  202. return (HCURSOR) m_hIcon;
  203. }
  204. void CClrWellDemoDlg::OnIsotropicwells() 
  205. {
  206.    UpdateData();
  207.    if(m_IsotropicWells)
  208.       {
  209.       m_WellHeightEdit.EnableWindow(FALSE);
  210.       m_WellHeightSpin.EnableWindow(FALSE);
  211.       }
  212.    else
  213.       {
  214.       m_WellHeightEdit.EnableWindow(TRUE);
  215.       m_WellHeightSpin.EnableWindow(TRUE);
  216.       }
  217. }
  218. void CClrWellDemoDlg::OnUpdate() 
  219. {
  220. // update all values to the color button
  221.    UpdateData();
  222.    // Colors first
  223.    CArray<COLORREF, COLORREF&>* colors;
  224.    colors = new CArray<COLORREF, COLORREF&>;
  225.    COLORREF local_color;
  226.    if(m_Black)
  227.       {
  228.       local_color = RGB(0,0,0);
  229.       colors->Add(local_color);
  230.       }
  231.    if(m_Blue)
  232.       {
  233.       local_color = RGB(0,0,255);
  234.       colors->Add(local_color);
  235.       }
  236.    if(m_Green)
  237.       {
  238.       local_color = RGB(0,56,0);
  239.       colors->Add(local_color);
  240.       }
  241.    if(m_Aqua)
  242.       {
  243.       local_color = RGB(0,255,255);
  244.       colors->Add(local_color);
  245.       }
  246.    if(m_Red) 
  247.       {
  248.       local_color = RGB(255,0,0);
  249.       colors->Add(local_color);
  250.       }
  251.    if(m_Purple) 
  252.       {
  253.       local_color = RGB(56,0,56);
  254.       colors->Add(local_color);
  255.       }
  256.    if(m_Silver) 
  257.       {
  258.       local_color = RGB(137,137,137);
  259.       colors->Add(local_color);
  260.       }
  261.    if(m_White) 
  262.       {
  263.       local_color = RGB(255,255,255);
  264.       colors->Add(local_color);
  265.       }
  266.    if(m_Gray) 
  267.       {
  268.       local_color = RGB(56,56,56);
  269.       colors->Add(local_color);
  270.       }
  271.    if(m_Maroon) 
  272.       {
  273.       local_color = RGB(56,0,0);
  274.       colors->Add(local_color);
  275.       }
  276.    if(m_Fuschia) 
  277.       {
  278.       local_color = RGB(255,0,255);
  279.       colors->Add(local_color);
  280.       }
  281.    if(m_Teal) 
  282.       {
  283.       local_color = RGB(0,56,56);
  284.       colors->Add(local_color);
  285.       }
  286.    if(m_Olive) 
  287.       {
  288.       local_color = RGB(56,56,0);
  289.       colors->Add(local_color);
  290.       }
  291.    if(m_Navy) 
  292.       {
  293.       local_color = RGB(0,0,56);
  294.       colors->Add(local_color);
  295.       }
  296.    if(m_Yellow) 
  297.       {
  298.       local_color = RGB(255,255,0);
  299.       colors->Add(local_color);
  300.       }
  301.    if(m_Lime) 
  302.       {
  303.       local_color = RGB(0,255,0);
  304.       colors->Add(local_color);
  305.       }
  306.    m_ColorButton.SetColorsFromArray(colors);
  307.    
  308.    delete colors;
  309.    // Borders
  310.    m_ColorButton.SetBorderThickness(m_OuterBorder,m_InnerBorder);
  311.    // Shape
  312.    m_ColorButton.MakeColorWellsIsotropic(m_IsotropicWells);
  313.    m_ColorButton.SetColorWellHeight(m_WellHeight);
  314.    switch(m_Shape)
  315.       {
  316.       case 0:
  317.          m_ColorButton.SetColorWellShape(CColorBtn::RECTANGLE);
  318.          break;
  319.       case 1:
  320.          m_ColorButton.SetColorWellShape(CColorBtn::ELLIPSE);
  321.          break;
  322.       default:
  323.          ASSERT(FALSE);
  324.          break;
  325.       }
  326.    // number of columns
  327.    m_ColorButton.SetNumColorWellColumns(m_NumCols);
  328.    //width
  329.    short width = m_SliderControl.GetPos();
  330.    CRect temprect;
  331.    m_ColorButton.GetWindowRect(&temprect);
  332.    width = (short)((float)width*(float)temprect.Width()/100);
  333.    m_ColorButton.SetDialogWidth(width); 
  334.       
  335.       
  336. }