GetPointDlg.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 10k
Category:

Graph program

Development Platform:

Visual C++

  1. // GetPointDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..//..//Solidgraph.h"
  5. #include "GetPointDlg.h"
  6. #include ".getpointdlg.h"
  7. // CGetPointDlg dialog
  8. IMPLEMENT_DYNAMIC(CGetPointDlg, CDialog)
  9. CGetPointDlg::CGetPointDlg(CWnd* pParent /*=NULL*/)
  10. : CDialog(CGetPointDlg::IDD, pParent)
  11. {
  12. m_tabs_counter = 1;
  13. m_enable_history = NULL;
  14. m_was_diasabled = false;
  15. }
  16. CGetPointDlg::~CGetPointDlg()
  17. {
  18. if (m_enable_history)
  19. delete[] m_enable_history;
  20. }
  21. void CGetPointDlg::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CDialog::DoDataExchange(pDX);
  24. DDX_Control(pDX, IDC_GET_POINT_X_EDIT, m_x_edit);
  25. DDX_Control(pDX, IDC_GET_POINT_Y_EDIT, m_y_edit);
  26. DDX_Control(pDX, IDC_GET_POINT_Z_EDIT, m_z_edit);
  27. DDX_Control(pDX, IDC_PNT_X_LOCK_BTN, m_x_lock_btn);
  28. DDX_Control(pDX, IDC_PNT_Y_LOCK_BTN, m_y_lock_btn);
  29. DDX_Control(pDX, IDC_PNT_Z_LOCK_BTN, m_z_lock_btn);
  30. }
  31. BEGIN_MESSAGE_MAP(CGetPointDlg, CDialog)
  32. ON_BN_CLICKED(IDC_PNT_X_LOCK_BTN, OnBnClickedPntXLockBtn)
  33. ON_BN_CLICKED(IDC_PNT_Y_LOCK_BTN, OnBnClickedPntYLockBtn)
  34. ON_BN_CLICKED(IDC_PNT_Z_LOCK_BTN, OnBnClickedPntZLockBtn)
  35. ON_WM_CHAR()
  36. ON_WM_ERASEBKGND()
  37. ON_WM_CTLCOLOR()
  38. ON_WM_SIZE()
  39. ON_WM_KEYDOWN()
  40. END_MESSAGE_MAP()
  41. IBaseInterfaceOfGetDialogs::DLG_TYPE CGetPointDlg::GetType()
  42. {
  43. return IBaseInterfaceOfGetDialogs::GET_POINT_DLG;
  44. }
  45. CWnd*   CGetPointDlg::GetWindow()
  46. {
  47. return this;
  48. }
  49. void    CGetPointDlg::EnableControls(bool enbl)
  50. {
  51. if (m_enable_history==NULL)
  52. m_enable_history = new bool[9];
  53. if (enbl)
  54. {
  55. GetDlgItem(IDC_GET_POINT_X_STATIC)->EnableWindow(m_enable_history[0]);
  56. GetDlgItem(IDC_GET_POINT_Y_STATIC)->EnableWindow(m_enable_history[1]);
  57. GetDlgItem(IDC_GET_POINT_Z_STATIC)->EnableWindow(m_enable_history[2]);
  58. GetDlgItem(IDC_GET_POINT_X_EDIT)->EnableWindow(m_enable_history[3]);
  59. GetDlgItem(IDC_GET_POINT_Y_EDIT)->EnableWindow(m_enable_history[4]);
  60. GetDlgItem(IDC_GET_POINT_Z_EDIT)->EnableWindow(m_enable_history[5]);
  61. GetDlgItem(IDC_PNT_X_LOCK_BTN)->EnableWindow(m_enable_history[6]);
  62. GetDlgItem(IDC_PNT_Y_LOCK_BTN)->EnableWindow(m_enable_history[7]);
  63. GetDlgItem(IDC_PNT_Z_LOCK_BTN)->EnableWindow(m_enable_history[8]);
  64. m_was_diasabled = false;
  65. GetDlgItem(IDC_GET_POINT_X_EDIT)->SetFocus();
  66. }
  67. else
  68. {
  69. if (!m_was_diasabled)
  70. {
  71. m_enable_history[0] = GetDlgItem(IDC_GET_POINT_X_STATIC)->IsWindowEnabled()!=0;
  72. m_enable_history[1] = GetDlgItem(IDC_GET_POINT_Y_STATIC)->IsWindowEnabled()!=0;
  73. m_enable_history[2] = GetDlgItem(IDC_GET_POINT_Z_STATIC)->IsWindowEnabled()!=0;
  74. m_enable_history[3] = GetDlgItem(IDC_GET_POINT_X_EDIT)->IsWindowEnabled()!=0;
  75. m_enable_history[4] = GetDlgItem(IDC_GET_POINT_Y_EDIT)->IsWindowEnabled()!=0;
  76. m_enable_history[5] = GetDlgItem(IDC_GET_POINT_Z_EDIT)->IsWindowEnabled()!=0;
  77. m_enable_history[6] = GetDlgItem(IDC_PNT_X_LOCK_BTN)->IsWindowEnabled()!=0;
  78. m_enable_history[7] = GetDlgItem(IDC_PNT_Y_LOCK_BTN)->IsWindowEnabled()!=0;
  79. m_enable_history[8] = GetDlgItem(IDC_PNT_Z_LOCK_BTN)->IsWindowEnabled()!=0;
  80. }
  81. GetDlgItem(IDC_GET_POINT_X_STATIC)->EnableWindow(FALSE);
  82. GetDlgItem(IDC_GET_POINT_Y_STATIC)->EnableWindow(FALSE);
  83. GetDlgItem(IDC_GET_POINT_Z_STATIC)->EnableWindow(FALSE);
  84. GetDlgItem(IDC_GET_POINT_X_EDIT)->EnableWindow(FALSE);
  85. GetDlgItem(IDC_GET_POINT_Y_EDIT)->EnableWindow(FALSE);
  86. GetDlgItem(IDC_GET_POINT_Z_EDIT)->EnableWindow(FALSE);
  87. GetDlgItem(IDC_PNT_X_LOCK_BTN)->EnableWindow(FALSE);
  88. GetDlgItem(IDC_PNT_Y_LOCK_BTN)->EnableWindow(FALSE);
  89. GetDlgItem(IDC_PNT_Z_LOCK_BTN)->EnableWindow(FALSE);
  90. m_was_diasabled = true;
  91. }
  92. }
  93. bool  CGetPointDlg::SetPoint(double x, double y, double z)
  94. {
  95. m_x_edit.SetValue(static_cast<float>(x));
  96. m_y_edit.SetValue(static_cast<float>(y));
  97. m_z_edit.SetValue(static_cast<float>(z));
  98. return true;
  99. }
  100. bool  CGetPointDlg::GetPoint(double& x, double& y, double& z)
  101. {
  102. x = static_cast<double>(m_x_edit.GetValue());
  103. y = static_cast<double>(m_y_edit.GetValue());
  104. z = static_cast<double>(m_z_edit.GetValue());
  105. return true;
  106. }
  107. bool  CGetPointDlg::IsXFixed()
  108. {
  109. return m_x_edit.IsFixed();
  110. }
  111. bool  CGetPointDlg::IsYFixed()
  112. {
  113. return m_y_edit.IsFixed();
  114. }
  115. bool  CGetPointDlg::IsZFixed()
  116. {
  117. return m_z_edit.IsFixed();
  118. }
  119. bool  CGetPointDlg::XFix(bool fix)
  120. {
  121. m_x_lock_btn.SetPressed(fix);
  122. return true;
  123. }
  124. bool  CGetPointDlg::YFix(bool fix)
  125. {
  126. m_y_lock_btn.SetPressed(fix);
  127. return true;
  128. }
  129. bool  CGetPointDlg::ZFix(bool fix)
  130. {
  131. m_z_lock_btn.SetPressed(fix);
  132. return true;
  133. }
  134. void CGetPointDlg::OnOK()
  135. {
  136. // TODO: Add your specialized code here and/or call the base class
  137. //__super::OnOK();
  138. }
  139. void CGetPointDlg::OnCancel()
  140. {
  141. // TODO: Add your specialized code here and/or call the base class
  142. //__super::OnCancel();
  143. }
  144. BOOL CGetPointDlg::OnInitDialog()
  145. {
  146. __super::OnInitDialog();
  147. CString lab;
  148. lab.LoadString(IDS_X_LOCK);
  149. m_x_lock_btn.SetToolTipText(lab);
  150. m_x_lock_btn.LoadBitmap(::LoadImage(::AfxGetResourceHandle(),
  151. MAKEINTRESOURCE(IDB_LOCK_BUTTON_BITMAP), 
  152. IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS));
  153. m_x_edit.SetFixButton(&m_x_lock_btn);
  154. lab.LoadString(IDS_Y_LOCK);
  155. m_y_lock_btn.SetToolTipText(lab);
  156. m_y_lock_btn.LoadBitmap(::LoadImage(::AfxGetResourceHandle(),
  157. MAKEINTRESOURCE(IDB_LOCK_BUTTON_BITMAP), 
  158. IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS));
  159. m_y_edit.SetFixButton(&m_y_lock_btn);
  160. lab.LoadString(IDS_Z_LOCK);
  161. m_z_lock_btn.SetToolTipText(lab);
  162. m_z_lock_btn.LoadBitmap(::LoadImage(::AfxGetResourceHandle(),
  163. MAKEINTRESOURCE(IDB_LOCK_BUTTON_BITMAP), 
  164. IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS));
  165. m_z_edit.SetFixButton(&m_z_lock_btn);
  166. return TRUE;  // return TRUE unless you set the focus to a control
  167. // EXCEPTION: OCX Property Pages should return FALSE
  168. }
  169. void CGetPointDlg::OnBnClickedPntXLockBtn()
  170. {
  171. m_x_lock_btn.SetPressed(!m_x_lock_btn.IsPressed());
  172. }
  173. void CGetPointDlg::OnBnClickedPntYLockBtn()
  174. {
  175. m_y_lock_btn.SetPressed(!m_y_lock_btn.IsPressed());
  176. }
  177. void CGetPointDlg::OnBnClickedPntZLockBtn()
  178. {
  179. m_z_lock_btn.SetPressed(!m_z_lock_btn.IsPressed());
  180. }
  181. void CGetPointDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
  182. {
  183. switch(nChar) 
  184. {
  185. /*case 120:  // X
  186. case _T('X'):
  187. m_x_lock_btn.SetPressed(!m_x_lock_btn.IsPressed());
  188. break;
  189. case 121:  // Y
  190. case _T('Y'):
  191. m_y_lock_btn.SetPressed(!m_y_lock_btn.IsPressed());
  192. break;
  193. case 122:  // Z
  194. case _T('Z'):
  195. m_z_lock_btn.SetPressed(!m_z_lock_btn.IsPressed());
  196. break;*/
  197. case VK_RETURN:
  198. case VK_ESCAPE:
  199. ASSERT(0);
  200. return;
  201. case VK_TAB:
  202. GetDlgItem(IDC_GET_POINT_X_EDIT+((m_tabs_counter++)%3))->SetFocus();
  203. ((CEdit*)GetFocus())->SetSel(0,-1);
  204. return;
  205. default:
  206. {
  207. CWnd* focW = GetFocus();
  208. if (focW==&m_y_edit)
  209. {
  210. m_y_edit.OnChar(nChar,nRepCnt,nFlags);
  211. return;
  212. }
  213. else
  214. if (focW==&m_z_edit)
  215. {
  216. m_z_edit.OnChar(nChar,nRepCnt,nFlags);
  217. return;
  218. }
  219. else
  220. if (focW==&m_x_edit)
  221. {
  222. m_x_edit.OnChar(nChar,nRepCnt,nFlags);
  223. return;
  224. }
  225. else
  226. {
  227. m_x_edit.SendMessage(GET_DIALOGS_MESSAGE_PRE_SET_FOCUS,nChar,nRepCnt);
  228. }
  229. return;
  230. }
  231. break;
  232. }
  233. CDialog::OnChar(nChar, nRepCnt, nFlags);
  234. }
  235. BOOL CGetPointDlg::OnEraseBkgnd(CDC* pDC)
  236. {
  237. // TODO: Add your message handler code here and/or call default
  238. return  TRUE;//__super::OnEraseBkgnd(pDC);
  239. }
  240. HBRUSH CGetPointDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  241. {
  242. // Call the base class implementation first! Otherwise, it may
  243. // undo what we are trying to accomplish here.
  244. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  245. if (nCtlColor==CTLCOLOR_STATIC && (pWnd!=&m_x_edit) 
  246. && (pWnd!=&m_y_edit) && (pWnd!=&m_z_edit))
  247. {
  248. pDC->SetTextColor(0);
  249. //pDC->SetBkColor(RGB(255,255,255));
  250. pDC->SetBkMode(TRANSPARENT);
  251. hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
  252. }
  253. return hbr;
  254. }
  255. void CGetPointDlg::OnSize(UINT nType, int cx, int cy)
  256. {
  257. __super::OnSize(nType, cx, cy);
  258. if (m_x_edit.m_hWnd && cx>10)
  259. {
  260. CRect rcEd;
  261. CRect rcBt;
  262. m_x_edit.GetWindowRect(rcEd);
  263. ScreenToClient(rcEd);
  264. m_x_lock_btn.GetWindowRect(rcBt);
  265. ScreenToClient(rcBt);
  266. m_x_edit.MoveWindow(rcEd.left,rcEd.top,cx-rcEd.left-rcBt.Width()-3,rcEd.Height());
  267. m_x_edit.GetWindowRect(rcEd);
  268. ScreenToClient(rcEd);
  269. m_x_lock_btn.MoveWindow(rcEd.right+1,rcBt.top,rcBt.Width(),rcBt.Height());
  270. m_y_edit.GetWindowRect(rcEd);
  271. ScreenToClient(rcEd);
  272. m_y_lock_btn.GetWindowRect(rcBt);
  273. ScreenToClient(rcBt);
  274. m_y_edit.MoveWindow(rcEd.left,rcEd.top,cx-rcEd.left-rcBt.Width()-3,rcEd.Height());
  275. m_y_edit.GetWindowRect(rcEd);
  276. ScreenToClient(rcEd);
  277. m_y_lock_btn.MoveWindow(rcEd.right+1,rcBt.top,rcBt.Width(),rcBt.Height());
  278. m_z_edit.GetWindowRect(rcEd);
  279. ScreenToClient(rcEd);
  280. m_z_lock_btn.GetWindowRect(rcBt);
  281. ScreenToClient(rcBt);
  282. m_z_edit.MoveWindow(rcEd.left,rcEd.top,cx-rcEd.left-rcBt.Width()-3,rcEd.Height());
  283. m_z_edit.GetWindowRect(rcEd);
  284. ScreenToClient(rcEd);
  285. m_z_lock_btn.MoveWindow(rcEd.right+1,rcBt.top,rcBt.Width(),rcBt.Height());
  286. }
  287. }
  288. void CGetPointDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  289. {
  290. /* CWnd* focW = GetFocus();
  291. if (focW!=GetDlgItem(IDC_GET_POINT_X_EDIT) &&
  292. focW!=GetDlgItem(IDC_GET_POINT_Y_EDIT) &&
  293. focW!=GetDlgItem(IDC_GET_POINT_Z_EDIT))
  294. {
  295. //GetDlgItem(IDC_PNT_X_EDIT)->SetWindowText("");
  296. GetDlgItem(IDC_GET_POINT_X_EDIT)->SetFocus();
  297. }
  298. GetFocus()->SendMessage(WM_KEYDOWN,nChar,0);
  299. GetFocus()->SendMessage(WM_CHAR,nChar,0);
  300. */
  301. switch(nChar) 
  302. {
  303. case 120:  // X
  304. case _T('X'):
  305. m_x_lock_btn.SetPressed(!m_x_lock_btn.IsPressed());
  306. break;
  307. case 121:  // Y
  308. case _T('Y'):
  309. m_y_lock_btn.SetPressed(!m_y_lock_btn.IsPressed());
  310. break;
  311. case 122:  // Z
  312. case _T('Z'):
  313. m_z_lock_btn.SetPressed(!m_z_lock_btn.IsPressed());
  314. break;
  315. case VK_RETURN:
  316. case VK_ESCAPE:
  317. ASSERT(0);
  318. return;
  319. case VK_TAB:
  320. GetDlgItem(IDC_GET_POINT_X_EDIT+((m_tabs_counter++)%3))->SetFocus();
  321. ((CEdit*)GetFocus())->SetSel(0,-1);
  322. return;
  323. default:
  324. {
  325. /* CWnd* focW = GetFocus();
  326. if (focW==&m_y_edit)
  327. {
  328. m_y_edit.OnKeyDown(nChar,nRepCnt,nFlags);
  329. return;
  330. }
  331. else
  332. if (focW==&m_z_edit)
  333. {
  334. m_z_edit.OnKeyDown(nChar,nRepCnt,nFlags);
  335. return;
  336. }
  337. else
  338. if (focW==&m_x_edit)
  339. {
  340. m_x_edit.OnKeyDown(nChar,nRepCnt,nFlags);
  341. return;
  342. }
  343. else
  344. {
  345. m_x_edit.SendMessage(GET_DIALOGS_MESSAGE_PRE_SET_FOCUS,nChar,nRepCnt);
  346. }
  347. return;*/
  348. }
  349. break;
  350. }
  351. __super::OnKeyDown(nChar, nRepCnt, nFlags);
  352. }