LinkDlg.cpp
上传用户:y440e3
上传日期:2010-03-08
资源大小:200k
文件大小:6k
源码类别:

GIS编程

开发平台:

Visual C++

  1. // LinkDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "draw.h"
  5. #include "drawdoc.h"
  6. #include "linkdataset.h"
  7. #include "LinkDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CLinkDlg dialog
  15. CLinkDlg::CLinkDlg(CWnd* pParent /*=NULL*/)
  16. : CDialog(CLinkDlg::IDD, pParent)
  17. {
  18. //{{AFX_DATA_INIT(CLinkDlg)
  19. m_pSet = NULL;
  20. //}}AFX_DATA_INIT
  21. }
  22. CLinkDlg::CLinkDlg(CDrawDoc* pDoc,CLinkDataSet* pSet,short LinkMode,short DatabaseID,int RecordID,CWnd* pParent /*=NULL*/)
  23. : CDialog(CLinkDlg::IDD, pParent)
  24. {
  25. m_pDoc=pDoc;
  26. m_pSet=pSet;
  27. m_DatabaseID=DatabaseID;
  28. m_RecordID=RecordID;
  29. m_LinkMode=LinkMode;
  30. if(m_pSet->IsOpen())
  31. m_pSet->Close();
  32. m_pSet->Open();
  33. m_NumbLink=0;
  34. if(!m_pSet->IsBOF())
  35. {
  36. m_pSet->MoveFirst();
  37. while(!m_pSet->IsEOF())
  38. {
  39. m_GraphLB[m_NumbLink]=m_GraphLB1[m_NumbLink]=m_pSet->m_graph_id;
  40. m_GraphID[m_NumbLink]=m_GraphID1[m_NumbLink]=m_pSet->m_element_id;
  41. m_NumbLink++;
  42. m_pSet->MoveNext();
  43. }
  44. m_pSet->MoveFirst();
  45. }
  46. m_NumbLink1=m_NumbLink;
  47. }
  48. void CLinkDlg::DoDataExchange(CDataExchange* pDX)
  49. {
  50. CDialog::DoDataExchange(pDX);
  51. //{{AFX_DATA_MAP(CLinkDlg)
  52. DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_database_id, m_pSet);
  53. DDX_FieldText(pDX, IDC_EDIT3, m_pSet->m_record_id, m_pSet);
  54. DDX_FieldText(pDX, IDC_EDIT4, m_pSet->m_graph_id, m_pSet);
  55. DDX_FieldText(pDX, IDC_EDIT5, m_pSet->m_element_id, m_pSet);
  56. DDX_FieldText(pDX, IDC_EDIT1, m_pSet->m_link_mode, m_pSet);
  57. //}}AFX_DATA_MAP
  58. }
  59. BEGIN_MESSAGE_MAP(CLinkDlg, CDialog)
  60. //{{AFX_MSG_MAP(CLinkDlg)
  61. ON_BN_CLICKED(IDC_LINK_ADD, OnLinkAdd)
  62. ON_LBN_SELCHANGE(IDC_LIST2, OnSelchangeList2)
  63. ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
  64. ON_BN_CLICKED(IDC_LINK_DELETE, OnLinkDelete)
  65. ON_BN_CLICKED(IDC_LINK_DELALL, OnLinkDelAll)
  66. ON_BN_CLICKED(IDC_LINK_ADDALL, OnLinkAddAll)
  67. //}}AFX_MSG_MAP
  68. END_MESSAGE_MAP()
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CLinkDlg message handlers
  71. BOOL CLinkDlg::OnInitDialog() 
  72. {
  73. //CDialog::OnInitDialog();
  74. CString m_str;
  75. char p1[10];
  76. plist1=(CListBox *)GetDlgItem(IDC_LIST1);
  77. plist2=(CListBox *)GetDlgItem(IDC_LIST2);
  78. plist1->ResetContent();
  79. plist2->ResetContent();
  80. graph_Name[0]="直线";
  81. graph_Name[1]="连续直线";
  82. graph_Name[2]="圆";
  83. graph_Name[3]="圆弧";
  84. graph_Name[4]="标注文本";
  85. for(int i=0;i<m_NumbLink;i++)
  86. {
  87. sprintf(p1,"%7d",m_GraphID[i]);
  88. m_str=p1;
  89. m_str+="    ";
  90. m_str+=graph_Name[m_GraphLB[i]-1];
  91. plist1->AddString(m_str);
  92. }
  93. for(i=0;i<m_pDoc->n_GraphSelect;i++)
  94. {
  95. m_str.Empty();
  96. sprintf(p1,"%7d",m_pDoc->GraphSelect[i].pbh);
  97. m_str+=p1;
  98. m_str+="    ";
  99. m_str+=graph_Name[m_pDoc->GraphSelect[i].Lb-1];
  100. plist2->AddString(m_str);
  101. }
  102. sprintf(p1,"%d",m_LinkMode);
  103. SetDlgItemText(IDC_EDIT1,"1");
  104. sprintf(p1,"%d",m_DatabaseID);
  105. SetDlgItemText(IDC_EDIT2,p1);
  106. sprintf(p1,"%d",m_RecordID);
  107. SetDlgItemText(IDC_EDIT3,p1);
  108. if(m_NumbLink>0)
  109. {
  110. UpdateData(FALSE);
  111. plist1->SetCurSel(0);
  112. OnSelchangeList1();
  113. }
  114. return TRUE;  // return TRUE unless you set the focus to a control
  115.               // EXCEPTION: OCX Property Pages should return FALSE
  116. }
  117. void CLinkDlg::OnLinkAdd() 
  118. {
  119. // TODO: Add your control notification handler code here
  120. CString m_str;
  121. char p1[8];
  122. GetDlgItemText(IDC_EDIT4,m_str);
  123. m_str.TrimLeft();
  124. if(m_str.GetLength()<1)
  125. return;
  126. int lb=atoi(m_str);
  127. m_str.Empty();
  128. if(lb<0)
  129. return;
  130. GetDlgItemText(IDC_EDIT5,m_str);
  131. int id=atoi(m_str);
  132. if(!IsExistLink(lb,id))
  133. {
  134. m_GraphID[m_NumbLink]=id;
  135. m_GraphLB[m_NumbLink++]=lb;
  136. sprintf(p1,"%7d",id);
  137. m_str=p1;
  138. m_str+="    ";
  139. m_str+=graph_Name[lb-1];
  140. plist1->AddString(m_str);
  141. plist1->SetCurSel(m_NumbLink-1);
  142. }
  143. }
  144. BOOL CLinkDlg::IsExistLink(short lb, int id)
  145. {
  146. for(int i=0;i<m_NumbLink;i++)
  147. {
  148. if(m_GraphID[i]==id&&m_GraphLB[i]==lb)
  149. return TRUE;
  150. }
  151. return FALSE;
  152. }
  153. BOOL CLinkDlg::IsExistLink1(short lb, int id)
  154. {
  155. for(int i=0;i<m_NumbLink1;i++)
  156. {
  157. if(m_GraphID1[i]==id&&m_GraphLB1[i]==lb)
  158. return TRUE;
  159. }
  160. return FALSE;
  161. }
  162. void CLinkDlg::OnSelchangeList2() 
  163. {
  164. // TODO: Add your control notification handler code here
  165. int nlist2=plist2->GetCurSel();
  166. if(nlist2<0)
  167. return;
  168. char p1[10];
  169. SetDlgItemText(IDC_STATIC1,graph_Name[m_pDoc->GraphSelect[nlist2].Lb-1]);
  170. sprintf(p1,"%d",m_pDoc->GraphSelect[nlist2].Lb);
  171. SetDlgItemText(IDC_EDIT4,p1);
  172. sprintf(p1,"%d",m_pDoc->GraphSelect[nlist2].pbh);
  173. SetDlgItemText(IDC_EDIT5,p1);
  174. }
  175. void CLinkDlg::OnSelchangeList1() 
  176. {
  177. // TODO: Add your control notification handler code here
  178. int nlist1=plist1->GetCurSel();
  179. if(nlist1<0)
  180. return;
  181. char p1[10];
  182. SetDlgItemText(IDC_STATIC1,graph_Name[m_GraphLB[nlist1]-1]);
  183. sprintf(p1,"%d",m_GraphLB[nlist1]);
  184. SetDlgItemText(IDC_EDIT4,p1);
  185. sprintf(p1,"%d",m_GraphID[nlist1]);
  186. SetDlgItemText(IDC_EDIT5,p1);
  187. }
  188. void CLinkDlg::OnLinkDelete() 
  189. {
  190. // TODO: Add your control notification handler code here
  191. int nlist1=plist1->GetCurSel();
  192. if(nlist1<0)
  193. return;
  194. for(int i=nlist1;i<m_NumbLink-1;i++)
  195. {
  196. m_GraphLB[i]=m_GraphLB[i+1];
  197. m_GraphID[i]=m_GraphID[i+1];
  198. }
  199. m_NumbLink--;
  200. plist1->DeleteString(nlist1);
  201. if(nlist1==m_NumbLink)
  202. plist1->SetCurSel(nlist1-1);
  203. else
  204. plist1->SetCurSel(nlist1);
  205. OnSelchangeList1();
  206. }
  207. void CLinkDlg::OnLinkDelAll() 
  208. {
  209. m_NumbLink=0;
  210. plist1->ResetContent();
  211. // TODO: Add your control notification handler code here
  212. }
  213. void CLinkDlg::OnLinkAddAll() 
  214. {
  215. for(int i=0;i<m_pDoc->n_GraphSelect;i++)
  216. {
  217. plist2->SetCurSel(i);
  218. OnSelchangeList2();
  219. OnLinkAdd();
  220. }
  221. // TODO: Add your control notification handler code here
  222. }
  223. void CLinkDlg::OnOK() 
  224. {
  225. // TODO: Add extra validation here
  226. for(int i=m_NumbLink1-1;i>=0;i--) //从数据库中删除已经存在的连接
  227. {
  228. if(!IsExistLink(m_GraphLB1[i],m_GraphID1[i])) //如果原来的连接不存在,即现在删除了这个连接
  229. {
  230. m_pSet->MoveFirst();
  231. m_pSet->Move(i);
  232. m_pSet->Delete();
  233. }
  234. }
  235. for(i=0;i<m_NumbLink;i++) //增加连接
  236. {
  237. if(!IsExistLink1(m_GraphLB[i],m_GraphID[i])) //如果这个连接原来不存在,即现在增加了这个连接
  238. {
  239. plist1->SetCurSel(i);
  240. OnSelchangeList1();
  241. m_pSet->AddNew();
  242. UpdateData(); //保存数据
  243. if(m_pSet->CanUpdate())
  244. m_pSet->Update();
  245. }
  246. }
  247. m_pSet->Close();
  248. EndDialog(IDOK);
  249. }
  250. void CLinkDlg::OnCancel() 
  251. {
  252. // TODO: Add extra cleanup here
  253. m_pSet->Close();
  254. CDialog::OnCancel();
  255. }