DlgOptItemPriority.cpp
上传用户:tianheyiqi
上传日期:2010-04-16
资源大小:282k
文件大小:9k
源码类别:

外挂编程

开发平台:

Visual C++

  1. // DlgOptItemPriority.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ROA.h"
  5. #include "DlgOptItemPriority.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CDlgOptItemPriority dialog
  13. typedef struct tagItemInfo
  14. {
  15. LPCTSTR lpszDesc;
  16. COLORREF colFore;
  17. COLORREF colBk;
  18. }ITEMINFO;
  19. ITEMINFO iteminfo[eIpMax] = 
  20. {
  21. {"0 - 抢夺", RGB(255, 255, 255), RGB(255, 0, 0)},
  22. {"1 - 收集", RGB(255, 255, 255), RGB(0, 0, 255)},
  23. {"2 - 捡取", RGB(0, 0, 0), RGB(255, 255, 0)},
  24. {"3 - 忽略", RGB(0, 0, 0), RGB(255, 255, 255)}
  25. };
  26. CDlgOptItemPriority::CDlgOptItemPriority(CWnd* pParent /*=NULL*/)
  27. : CDialog(CDlgOptItemPriority::IDD, pParent)
  28. {
  29. //{{AFX_DATA_INIT(CDlgOptItemPriority)
  30. m_ID = _T("");
  31. m_Name = _T("");
  32. //}}AFX_DATA_INIT
  33. }
  34. void CDlgOptItemPriority::DoDataExchange(CDataExchange* pDX)
  35. {
  36. CDialog::DoDataExchange(pDX);
  37. //{{AFX_DATA_MAP(CDlgOptItemPriority)
  38. DDX_Control(pDX, IDC_ITEM_TYPE, m_Type);
  39. DDX_Control(pDX, IDC_CHOISE, m_Choise);
  40. DDX_Control(pDX, IDC_LIST, m_ItemList);
  41. DDX_Text(pDX, IDC_ITEM_ID, m_ID);
  42. DDX_Text(pDX, IDC_ITEM_NAME, m_Name);
  43. //}}AFX_DATA_MAP
  44. }
  45. BEGIN_MESSAGE_MAP(CDlgOptItemPriority, CDialog)
  46. //{{AFX_MSG_MAP(CDlgOptItemPriority)
  47. ON_CBN_SELCHANGE(IDC_CHOISE, OnSelchangeChoise)
  48. ON_NOTIFY(NM_CLICK, IDC_LIST, OnClickList)
  49. ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST, OnColumnclickList)
  50. ON_CBN_SELCHANGE(IDC_ITEM_TYPE, OnSelchangeItemType)
  51. ON_EN_CHANGE(IDC_ITEM_NAME, OnChangeItemName)
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CDlgOptItemPriority message handlers
  56. BOOL CDlgOptItemPriority::OnInitDialog() 
  57. {
  58. CDialog::OnInitDialog();
  59. CRect rect;
  60. CString strTotal, strTypeId, strTypeName;
  61. POSITION pos;
  62. int i;
  63. m_ItemList.GetClientRect(&rect);
  64. m_ItemList.InsertColumn(0, "物品ID", LVCFMT_LEFT, 50);
  65. m_ItemList.InsertColumn(1, "名称", LVCFMT_LEFT, 100);
  66. m_ItemList.InsertColumn(2, "类型", LVCFMT_LEFT, 100);
  67. m_ItemList.InsertColumn(3, "优先级", LVCFMT_LEFT, rect.Width() - 270);
  68. ListView_SetExtendedListViewStyleEx(m_ItemList.m_hWnd, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT, 0xFFFFFFFF);
  69. //Fill choise priority
  70. for(i=0; i<eIpMax; i++)
  71. {
  72. m_Choise.InsertString(i, iteminfo[i].lpszDesc);
  73. m_Choise.SetItemData(i, i);
  74. }
  75. //Fill choise type
  76. pos = mapEquipType.GetStartPosition();
  77. while (pos)
  78. {
  79. mapEquipType.GetNextAssoc(pos, strTypeId, strTypeName);
  80. m_Type.AddString(strTypeName);
  81. }
  82. FillItemList();
  83. strTotal.Format("总数: %d", m_ItemList.GetItemCount());
  84. SetDlgItemText(IDC_TOTAL, strTotal);
  85. /* NM_LISTVIEW NMListView;
  86. NMListView.iSubItem = 0;
  87. OnColumnclickList((NMHDR*)&NMListView, NULL);
  88. */
  89. long wParam;
  90. //Sort item list by IDs
  91. wParam = 0;
  92. m_ItemList.SortItems(SortData, wParam);
  93. //after sort,item pos has changed,so must refresh color of item
  94. RefreshColors();
  95. return TRUE;  // return TRUE unless you set the focus to a control
  96.               // EXCEPTION: OCX Property Pages should return FALSE
  97. }
  98. void CDlgOptItemPriority::FillItemList()
  99. {
  100. int nIndex = 0;
  101. CString strItemId, strItem, strPriority;
  102. BOOL bFound;
  103. m_ItemList.DeleteAllItems();
  104. POSITION pos = mapItem.GetStartPosition();
  105. while (pos != NULL)
  106. {
  107. mapItem.GetNextAssoc(pos, strItemId, strItem);
  108. strItemId.TrimLeft();
  109. strItemId.TrimRight();
  110. strPriority = mapItem.FindValue(strItemId, eItemPriority, &bFound);
  111. if(bFound)
  112. {
  113. nIndex = m_ItemList.InsertItem(m_ItemList.GetItemCount(), strItemId);
  114. m_ItemList.SetItemText(nIndex, 1, mapItem.FindValue(strItemId, eItemName));
  115. m_ItemList.SetItemText(nIndex, 2, mapEquipType.FindValue(atoi(mapItem.FindValue(strItemId, eItemSlots))));
  116. m_ItemList.SetItemText(nIndex, 3, strPriority);
  117. m_ItemList.SetItemData(nIndex, (atoi(strItemId)));
  118. }
  119. }
  120. RefreshColors();
  121. }
  122. void CDlgOptItemPriority::OnSelchangeChoise() 
  123. {
  124. CString strPriority;
  125. DWORD data = m_Choise.GetItemData(m_Choise.GetCurSel());
  126. int nIndex;
  127. strPriority.Format("%d", data);
  128. CString strItemId, strTemp;
  129. POSITION pos = m_ItemList.GetFirstSelectedItemPosition();
  130. while (pos != NULL)
  131. {
  132. nIndex = m_ItemList.GetNextSelectedItem(pos);
  133. m_ItemList.SetItemText(nIndex, 3, strPriority);
  134. strItemId = m_ItemList.GetItemText(nIndex, 0);
  135. // strTemp.Format("%d", atoi(strItemId));
  136. // mapItemPriority.SetAt(strTemp, strPriority);
  137. }
  138. RefreshColors();
  139. }
  140. void CDlgOptItemPriority::OnOK() 
  141. {
  142. if (m_ItemList.GetItemCount())
  143. {
  144. SaveToFile();
  145. utlLogout2("载入[物品信息]......", eLogCommon, false);
  146. BOOL bDone = mapItem.init(ROA_MAP_ITEMS, "物品");
  147. utlLogout3(bDone?"成功":"失败", eLogCommon, false);
  148. }
  149. CDialog::OnOK();
  150. }
  151. void CDlgOptItemPriority::SaveToFile()
  152. {
  153. CFile file;
  154. int i;
  155. int nCount = m_ItemList.GetItemCount();
  156. CString strItemId, strName, strTypeName, strTypeID, Priority, strTemp;
  157. long wParam;
  158. //Sort item list by IDs
  159. wParam = 0;
  160. m_ItemList.SortItems(SortData, wParam);
  161. do
  162. {
  163. if(file.Open(ROA_MAP_ITEMS, CFile::modeWrite|CFile::modeCreate))
  164. {
  165. CArchive arc(&file, CArchive::store);
  166. for (i = 0; i < nCount; ++i)
  167. {
  168. //Get Item ID
  169. strItemId = m_ItemList.GetItemText(i, 0);
  170. //Get Item Name
  171. strName = m_ItemList.GetItemText(i, 1);
  172. //Get Item Type ID
  173. POSITION pos = mapEquipType.GetStartPosition();
  174. while (pos)
  175. {
  176. mapEquipType.GetNextAssoc(pos, strTypeID, strTypeName);
  177. if (strTypeName == m_ItemList.GetItemText(i, 2))
  178. {
  179. break;
  180. }
  181. }
  182. //Get Item Priority
  183. Priority = m_ItemList.GetItemText(i, 3);
  184. strTemp.Format("%d %s %d %srn", atoi(strItemId), strName, atoi(strTypeID), Priority);
  185. arc.WriteString(strTemp);
  186. }
  187. arc.Close();
  188. file.Close();
  189. }
  190. }while(0);
  191. }
  192. void CDlgOptItemPriority::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
  193. {
  194. CString strType;
  195. m_ID = "ID: ";
  196. m_Name = "";
  197. if(m_ItemList.GetSelectedCount() == 1)
  198. {
  199. POSITION pos = m_ItemList.GetFirstSelectedItemPosition();
  200. int nIndex = m_ItemList.GetNextSelectedItem(pos);
  201. //Get Cur Priority
  202. m_Choise.SetCurSel(atoi(m_ItemList.GetItemText(nIndex, 3)));
  203. //Get Cur Name
  204. GetDlgItem(IDC_ITEM_NAME)->EnableWindow(true);
  205. m_Name = m_ItemList.GetItemText(nIndex, 1);
  206. //Get Cur ID
  207. m_ID += m_ItemList.GetItemText(nIndex, 0);
  208. //Get Cur Type
  209. for (int i = 0; i < m_Type.GetCount(); ++i)
  210. {
  211. m_Type.GetLBText(i, strType);
  212. if (strType == m_ItemList.GetItemText(nIndex, 2))
  213. {
  214. m_Type.SetCurSel(i);
  215. break;
  216. }
  217. }
  218. }
  219. else
  220. {
  221. GetDlgItem(IDC_ITEM_NAME)->EnableWindow(false);
  222. m_Type.SetCurSel(-1);
  223. m_Choise.SetCurSel(-1);
  224. }
  225. UpdateData(false);
  226. *pResult = 0;
  227. }
  228. void CDlgOptItemPriority::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult) 
  229. {
  230. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  231. static BOOL bCol[4] = {false, false, false, false};
  232. int nIndex = pNMListView->iSubItem;
  233. long wParam;
  234. wParam = nIndex + bCol[nIndex]*256;
  235. m_ItemList.SortItems(SortData, wParam);
  236. bCol[nIndex] = !bCol[nIndex];
  237. RefreshColors();
  238. if(pResult)
  239. *pResult = 0;
  240. }
  241. int CALLBACK CDlgOptItemPriority::SortData(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
  242. {
  243. CString strTemp1, strTemp2, strSort1, strSort2;
  244. BOOL bSort = lParamSort / 256;
  245. BOOL nCol = lParamSort & 0xFF;
  246. BOOL bCompare;
  247. strTemp1.Format("%d", lParam1);
  248. strTemp2.Format("%d", lParam2);
  249. switch(nCol)
  250. {
  251. case 0:
  252. bCompare = (atoi(strTemp1) < atoi(strTemp2));
  253. break;
  254. case 1:
  255. strSort1 = mapItem.FindValue(strTemp1, eItemName);
  256. strSort2 = mapItem.FindValue(strTemp2, eItemName);
  257. bCompare = (strSort1 < strSort2);
  258. break;
  259. case 2:
  260. strSort1 = mapEquipType.FindValue(atoi(mapItem.FindValue(strTemp1, eItemSlots)));
  261. strSort2 = mapEquipType.FindValue(atoi(mapItem.FindValue(strTemp2, eItemSlots)));
  262. bCompare = (strSort1 < strSort2);
  263. break;
  264. case 3:
  265. strSort1 = mapItem.FindValue(strTemp1, eItemPriority);
  266. strSort2 = mapItem.FindValue(strTemp2, eItemPriority);
  267. bCompare = (strSort1 < strSort2);
  268. break;
  269. }
  270. return(bSort?bCompare:!bCompare);
  271. }
  272. void CDlgOptItemPriority::RefreshColors()
  273. {
  274. int i;
  275. int nPriority;
  276. for(i=0; i<m_ItemList.GetItemCount(); i++)
  277. {
  278. nPriority = atoi(m_ItemList.GetItemText(i, 3));
  279. m_ItemList.SetRowColor(i, iteminfo[nPriority].colBk, iteminfo[nPriority].colFore);
  280. }
  281. }
  282. void CDlgOptItemPriority::OnSelchangeItemType() 
  283. {
  284. CString strType;
  285. m_Type.GetLBText(m_Type.GetCurSel(), strType);
  286. int nIndex;
  287. CString strTemp;
  288. POSITION pos = m_ItemList.GetFirstSelectedItemPosition();
  289. while (pos != NULL)
  290. {
  291. nIndex = m_ItemList.GetNextSelectedItem(pos);
  292. m_ItemList.SetItemText(nIndex, 2, strType);
  293. }
  294. }
  295. void CDlgOptItemPriority::OnChangeItemName() 
  296. {
  297. UpdateData(true);
  298. int nIndex;
  299. POSITION pos = m_ItemList.GetFirstSelectedItemPosition();
  300. while (pos != NULL)
  301. {
  302. nIndex = m_ItemList.GetNextSelectedItem(pos);
  303. m_ItemList.SetItemText(nIndex, 1, m_Name);
  304. }
  305. }