qdlgptattset.cpp
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:5k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // qdlgptattset.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..qgis.h"
  5. #include "qdlgptattset.h"
  6. #include "..QObjectsincludeQLayerObj.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CQDlgPtAttSet dialog
  14. CQDlgPtAttSet::CQDlgPtAttSet(CWnd* pParent /*=NULL*/)
  15. : CDialog(CQDlgPtAttSet::IDD, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CQDlgPtAttSet)
  18. m_fXPt = 0.0;
  19. m_fYPt = 0.0;
  20. m_fElevationPt = 0.0;
  21. m_bReset = FALSE;
  22. m_lPtID = 0;
  23. m_szPtLyrName = _T("");
  24. m_szPtName = _T("");
  25. m_pWndDC = NULL;
  26. m_nShowPt = -1;
  27. //}}AFX_DATA_INIT
  28. }
  29. CQDlgPtAttSet::CQDlgPtAttSet(CQMapObj * pMap,CQPointObj * pPoint,CWnd* pParent /* = NULL */)
  30. : CDialog(CQDlgPtAttSet::IDD,pParent)
  31. {
  32. if(!pMap)return;
  33. if(!pPoint)return;
  34. m_pPoint = pPoint;  //让指针指向当前的点对象
  35. m_pMap = pMap;
  36. m_pWndDC = NULL;
  37. m_bReset = FALSE;
  38. m_nShowPt = 0;
  39. m_szOldPtName = m_pPoint->GetObjName();
  40. m_pPoint->GetPointPos(m_fOldX,m_fOldY);
  41. }
  42. void CQDlgPtAttSet::DoDataExchange(CDataExchange* pDX)
  43. {
  44. CDialog::DoDataExchange(pDX);
  45. //{{AFX_DATA_MAP(CQDlgPtAttSet)
  46. DDX_Text(pDX, IDC_EDIT_X_COOR_PT_ATTSET_DLG, m_fXPt);
  47. DDX_Text(pDX, IDC_EDIT_Y_COOR_PT_ATTSET_DLG, m_fYPt);
  48. DDX_Text(pDX, IDC_EDIT_ELEVATION_PT_ATTSET_DLG, m_fElevationPt);
  49. DDX_Check(pDX, IDC_CHECK_PT_COOR_PTATT_DLG, m_bReset);
  50. DDX_Text(pDX, IDC_EDIT_ID_PT_ATTSET_DLG, m_lPtID);
  51. DDX_Text(pDX, IDC_EDIT_LAYER_NAME_PT_ATTSET_DLG, m_szPtLyrName);
  52. DDX_Text(pDX, IDC_EDIT_NAME_PT_ATTSET_DLG, m_szPtName);
  53. DDX_Radio(pDX, IDC_RADIO_SHOW_PT_DLG, m_nShowPt);
  54. //}}AFX_DATA_MAP
  55. }
  56. BEGIN_MESSAGE_MAP(CQDlgPtAttSet, CDialog)
  57. //{{AFX_MSG_MAP(CQDlgPtAttSet)
  58. ON_BN_CLICKED(IDC_CHECK_PT_COOR_PTATT_DLG, OnCheckPtCoorPtattDlg)
  59. ON_BN_CLICKED(IDC_STATIC_COLOR_SHOW_CLICK_PT_DLG, OnStaticColorShowClickPtDlg)
  60. //}}AFX_MSG_MAP
  61. END_MESSAGE_MAP()
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CQDlgPtAttSet message handlers
  64. BOOL CQDlgPtAttSet::OnInitDialog() 
  65. {
  66. CDialog::OnInitDialog();
  67. UpdateData(TRUE);
  68. m_pPoint->GetPointPos(m_fXPt,m_fYPt);
  69. m_fElevationPt = m_pPoint->GetPtElevation();  // 获取点的高程
  70. m_ptColor = m_pPoint->GetObjBrushColor();
  71. //图层名称的显示
  72. long lLayerID = m_pPoint->GetObjLayerID();
  73. CQLayerObj * pLayer = m_pMap->FindLayer(lLayerID);
  74. m_szPtLyrName = pLayer->GetLayerName();
  75. m_szOldLyrName = m_szPtLyrName;                //旧的图层名称
  76. m_lPtID = m_pPoint->GetObjID();
  77. m_szPtName = m_pPoint->GetObjName();
  78. UpdateData(FALSE);
  79. EnableCtl(FALSE);
  80. m_pWndDC = GetDlgItem(IDC_STATIC_COLOR_SHOW_CLICK_PT_DLG)->GetDC();
  81. CBrush brush(m_ptColor);
  82. CBrush * pOldBrush = m_pWndDC->SelectObject(&brush);
  83. CRect recttemp;
  84. GetDlgItem(IDC_STATIC_COLOR_SHOW_CLICK_PT_DLG)->GetClientRect(&recttemp);
  85. m_pWndDC->Rectangle(recttemp);
  86. m_pWndDC->SelectObject(pOldBrush);
  87. return TRUE;  // return TRUE unless you set the focus to a control
  88.               // EXCEPTION: OCX Property Pages should return FALSE
  89. }
  90. void CQDlgPtAttSet::EnableCtl(BOOL bEnable)
  91. {
  92. GetDlgItem(IDC_EDIT_X_COOR_PT_ATTSET_DLG)->EnableWindow(bEnable);
  93. GetDlgItem(IDC_EDIT_Y_COOR_PT_ATTSET_DLG)->EnableWindow(bEnable);
  94. }
  95. void CQDlgPtAttSet::OnCheckPtCoorPtattDlg() 
  96. {
  97. // TODO: Add your control notification handler code here
  98. m_bReset = !m_bReset; //初始值假
  99. EnableCtl(m_bReset);
  100. }
  101. void CQDlgPtAttSet::OnStaticColorShowClickPtDlg() 
  102. {
  103. // TODO: Add your control notification handler code here
  104. CColorDialog clDlg;
  105. clDlg.m_cc.Flags |= CC_FULLOPEN | CC_RGBINIT;
  106. clDlg.m_cc.rgbResult = m_ptColor;
  107. m_pPoint->SetObjBrushColor(m_ptColor);
  108. m_pPoint->SetObjPenColor(m_ptColor);
  109. CRect rect;
  110. GetDlgItem(IDC_STATIC_COLOR_SHOW_CLICK_PT_DLG)->GetClientRect(&rect);
  111. if(clDlg.DoModal() == IDOK)
  112. {
  113. m_ptColor = clDlg.GetColor();
  114. CBrush brush(m_ptColor);
  115. CBrush * pOldBrush = m_pWndDC->SelectObject(&brush);
  116. m_pWndDC->Rectangle(rect);
  117. m_pWndDC->SelectObject(pOldBrush);
  118. m_pPoint->SetObjPenColor(m_ptColor);
  119. m_pPoint->SetObjBrushColor(m_ptColor);
  120. }
  121. }
  122. void CQDlgPtAttSet::OnOK() 
  123. {
  124. // TODO: Add extra validation here
  125. UpdateData(TRUE);
  126. if(m_fXPt == 0.0 && m_fYPt == 0.0)
  127. {
  128. AfxMessageBox("该点对象的坐标有问题,请确认!");
  129. GetDlgItem(IDC_EDIT_X_COOR_PT_ATTSET_DLG)->SetFocus(); //设置焦点
  130. m_fXPt = m_fOldX;
  131. m_fYPt = m_fOldY;
  132. UpdateData(FALSE);
  133. return;
  134. }
  135. if(m_szPtName.IsEmpty())
  136. {
  137. AfxMessageBox("图元的名称不能为空!");
  138. GetDlgItem(IDC_EDIT_NAME_PT_ATTSET_DLG)->SetFocus(); //设置焦点供用户进行编辑
  139. m_szPtName = m_szOldPtName;
  140. UpdateData(FALSE);
  141. return;
  142. }
  143. if(m_szPtLyrName.IsEmpty())
  144. {
  145. AfxMessageBox("图元的图层名称不能为空!");
  146. GetDlgItem(IDC_EDIT_LAYER_NAME_PT_ATTSET_DLG)->SetFocus(); //设置焦点供用户进行编辑
  147. m_szPtLyrName = m_szOldLyrName;
  148. UpdateData(FALSE);
  149. return;
  150. }
  151. m_pPoint->SetObjName(m_szPtName);
  152. m_pPoint->SetPtElevation(m_fElevationPt);
  153. m_pPoint->SetPointPos(m_fXPt,m_fYPt);
  154. m_pPoint->SetObjHided(m_nShowPt);
  155. CDialog::OnOK();
  156. }