SAVERDLG.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:7k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // Saverdlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Saver.h"
  5. #include "drawwnd.h"
  6. #include "Saverdlg.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char BASED_CODE 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. // Implementation
  22. protected:
  23. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  24. //{{AFX_MSG(CAboutDlg)
  25. virtual BOOL OnInitDialog();
  26. //}}AFX_MSG
  27. DECLARE_MESSAGE_MAP()
  28. };
  29. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  30. {
  31. //{{AFX_DATA_INIT(CAboutDlg)
  32. //}}AFX_DATA_INIT
  33. }
  34. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  35. {
  36. CDialog::DoDataExchange(pDX);
  37. //{{AFX_DATA_MAP(CAboutDlg)
  38. //}}AFX_DATA_MAP
  39. }
  40. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  41. //{{AFX_MSG_MAP(CAboutDlg)
  42. // No message handlers
  43. //}}AFX_MSG_MAP
  44. END_MESSAGE_MAP()
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CAboutDlg message handlers
  47. BOOL CAboutDlg::OnInitDialog()
  48. {
  49. CDialog::OnInitDialog();
  50. CenterWindow();
  51. // TODO: Add extra about dlg initialization here
  52. return TRUE;  // return TRUE  unless you set the focus to a control
  53. }
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CSaverDlg dialog
  56. CSaverDlg::CSaverDlg(CWnd* pParent /*=NULL*/)
  57. : CDialog(CSaverDlg::IDD, pParent), m_wndPreview(FALSE)
  58. {
  59. //{{AFX_DATA_INIT(CSaverDlg)
  60. m_nWidth = 0;
  61. m_nCapStyle = -1;
  62. m_nResolution = 0;
  63. m_nSpeed = 0;
  64. m_nJoinStyle = -1;
  65. //}}AFX_DATA_INIT
  66. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  67. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  68. }
  69. void CSaverDlg::DoDataExchange(CDataExchange* pDX)
  70. {
  71. CDialog::DoDataExchange(pDX);
  72. //{{AFX_DATA_MAP(CSaverDlg)
  73. DDX_Control(pDX, IDC_JOIN_STYLE, m_comboJoin);
  74. DDX_Control(pDX, IDC_CAP_STYLE, m_comboStyle);
  75. DDX_Control(pDX, IDC_SCROLLBAR_SPEED, m_scrollSpeed);
  76. DDX_Control(pDX, IDC_SCROLLBAR_RES, m_scrollRes);
  77. DDX_Text(pDX, IDC_EDIT_WIDTH, m_nWidth);
  78. DDV_MinMaxInt(pDX, m_nWidth, 1, 100);
  79. DDX_CBIndex(pDX, IDC_CAP_STYLE, m_nCapStyle);
  80. DDX_Scroll(pDX, IDC_SCROLLBAR_RES, m_nResolution);
  81. DDX_Scroll(pDX, IDC_SCROLLBAR_SPEED, m_nSpeed);
  82. DDX_CBIndex(pDX, IDC_JOIN_STYLE, m_nJoinStyle);
  83. //}}AFX_DATA_MAP
  84. }
  85. BEGIN_MESSAGE_MAP(CSaverDlg, CDialog)
  86. //{{AFX_MSG_MAP(CSaverDlg)
  87. ON_WM_SYSCOMMAND()
  88. ON_WM_PAINT()
  89. ON_WM_QUERYDRAGICON()
  90. ON_WM_HSCROLL()
  91. ON_BN_CLICKED(IDC_BUTTON_COLOR, OnButtonColor)
  92. ON_EN_KILLFOCUS(IDC_EDIT_WIDTH, OnKillfocusEditWidth)
  93. ON_CBN_SELENDOK(IDC_JOIN_STYLE, OnSelendokStyle)
  94. ON_CBN_SELENDOK(IDC_CAP_STYLE, OnSelendokStyle)
  95. //}}AFX_MSG_MAP
  96. END_MESSAGE_MAP()
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CSaverDlg message handlers
  99. BOOL CSaverDlg::OnInitDialog()
  100. {
  101. CDialog::OnInitDialog();
  102. CRect rect;
  103. GetDlgItem(IDC_PREVIEW)->GetWindowRect(&rect);
  104. ScreenToClient(&rect);
  105. m_wndPreview.Create(NULL, WS_VISIBLE|WS_CHILD, rect, this, NULL);
  106. m_wndPreview.SetColor(m_color);
  107. m_wndPreview.SetResolution(m_nResolution);
  108. m_wndPreview.SetSpeed(m_nSpeed);
  109. OnSelendokStyle();
  110. m_wndPreview.SetPenWidth(m_nWidth);
  111. m_scrollRes.SetScrollRange(1, 30);
  112. m_scrollSpeed.SetScrollRange(1, 100);
  113. m_scrollRes.SetScrollPos(m_nResolution);
  114. m_scrollSpeed.SetScrollPos(m_nSpeed);
  115. CenterWindow();
  116. // Add "About..." menu item to system menu.
  117. // IDM_ABOUTBOX must be in the system command range.
  118. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  119. ASSERT(IDM_ABOUTBOX < 0xF000);
  120. CMenu* pSysMenu = GetSystemMenu(FALSE);
  121. CString strAboutMenu;
  122. strAboutMenu.LoadString(IDS_ABOUTBOX);
  123. if (!strAboutMenu.IsEmpty())
  124. {
  125. pSysMenu->AppendMenu(MF_SEPARATOR);
  126. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  127. }
  128. // TODO: Add extra initialization here
  129. return TRUE;  // return TRUE  unless you set the focus to a control
  130. }
  131. void CSaverDlg::OnSysCommand(UINT nID, LPARAM lParam)
  132. {
  133. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  134. {
  135. CAboutDlg dlgAbout;
  136. dlgAbout.DoModal();
  137. }
  138. else
  139. {
  140. CDialog::OnSysCommand(nID, lParam);
  141. }
  142. }
  143. // If you add a minimize button to your dialog, you will need the code below
  144. //  to draw the icon.  For MFC applications using the document/view model,
  145. //  this is automatically done for you by the framework.
  146. void CSaverDlg::OnPaint()
  147. {
  148. if (IsIconic())
  149. {
  150. CPaintDC dc(this); // device context for painting
  151. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  152. // Center icon in client rectangle
  153. int cxIcon = GetSystemMetrics(SM_CXICON);
  154. int cyIcon = GetSystemMetrics(SM_CYICON);
  155. CRect rect;
  156. GetClientRect(&rect);
  157. int x = (rect.Width() - cxIcon + 1) / 2;
  158. int y = (rect.Height() - cyIcon + 1) / 2;
  159. // Draw the icon
  160. dc.DrawIcon(x, y, m_hIcon);
  161. }
  162. else
  163. {
  164. CDialog::OnPaint();
  165. }
  166. }
  167. // The system calls this to obtain the cursor to display while the user drags
  168. //  the minimized window.
  169. HCURSOR CSaverDlg::OnQueryDragIcon()
  170. {
  171. return (HCURSOR) m_hIcon;
  172. }
  173. void CSaverDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  174. {
  175. ASSERT(pScrollBar != NULL);
  176. int nCurPos = pScrollBar->GetScrollPos();
  177. switch (nSBCode)
  178. {
  179. case SB_LEFT: //    Scroll to far left.
  180. nCurPos = 1;
  181. break;
  182. case SB_LINELEFT: //    Scroll left.
  183. nCurPos--;
  184. break;
  185. case SB_LINERIGHT: //    Scroll right.
  186. nCurPos++;
  187. break;
  188. case SB_PAGELEFT: //    Scroll one page left.
  189. nCurPos -= 10;
  190. break;
  191. case SB_PAGERIGHT: //    Scroll one page right.
  192. nCurPos += 10;
  193. break;
  194. case SB_RIGHT: //    Scroll to far right.
  195. nCurPos = 100;
  196. break;
  197. case SB_THUMBPOSITION: //    Scroll to absolute position. The current position is specified by the nPos parameter.
  198. case SB_THUMBTRACK: //    Drag scroll box to specified position. The current position is specified by the nPos parameter.
  199. nCurPos = nPos;
  200. }
  201. if (nCurPos < 1)
  202. nCurPos = 1;
  203. if (nCurPos > 100)
  204. nCurPos = 100;
  205. pScrollBar->SetScrollPos(nCurPos);
  206. m_wndPreview.SetSpeed(m_scrollSpeed.GetScrollPos());
  207. m_wndPreview.SetResolution(m_scrollRes.GetScrollPos());
  208. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  209. }
  210. void CSaverDlg::OnButtonColor()
  211. {
  212. CColorDialog dlg(m_color);
  213. if (dlg.DoModal() == IDOK)
  214. {
  215. m_color = dlg.GetColor();
  216. m_wndPreview.SetColor(m_color);
  217. }
  218. }
  219. void CSaverDlg::OnKillfocusEditWidth()
  220. {
  221. int nWidth = GetDlgItemInt(IDC_EDIT_WIDTH);
  222. if (nWidth < 1)
  223. nWidth = 1;
  224. m_wndPreview.SetPenWidth(nWidth);
  225. }
  226. void CSaverDlg::OnSelendokStyle()
  227. {
  228. int nStyle = 0;
  229. int nSel = m_comboStyle.GetCurSel();
  230. if (nSel < 0)
  231. nSel = 0;
  232. if (nSel == 0)
  233. nStyle = PS_ENDCAP_ROUND;
  234. else if (nSel == 1)
  235. nStyle = PS_ENDCAP_SQUARE;
  236. else
  237. nStyle = PS_ENDCAP_FLAT;
  238. nSel = m_comboJoin.GetCurSel();
  239. if (nSel < 0)
  240. nSel = 0;
  241. if (nSel == 0)
  242. nStyle |= PS_JOIN_ROUND;
  243. else if (nSel == 1)
  244. nStyle |= PS_JOIN_BEVEL;
  245. else
  246. nStyle |= PS_JOIN_MITER;
  247. m_wndPreview.SetLineStyle(nStyle);
  248. }