rtoss - Blame information for rev 292

Subversion Repositories:
Rev:
Rev Author Line No. Line
280 roytam 1 // MemPmPage.cpp : 实现文件
2 //
3  
4 #include "stdafx.h"
5 #include "PokemonMemHack.h"
6  
7 // CMemPmPage 对话框
8  
9 IMPLEMENT_DYNAMIC(CMemPmPage, CPropertyPage)
10 CMemPmPage::CMemPmPage()
11         : CPropertyPage(CMemPmPage::IDD)
12 {
13         m_dwCurPm = -1;
14         m_dwCurTabPage = -1;
15  
16         m_pageBasic.m_szPageName = _T("基本");
17         m_rgpPages[0] = &m_pageBasic;
18  
19         m_pageAbility.m_szPageName = _T("能力");
20         m_rgpPages[1] = &m_pageAbility;
21  
22         m_pageSkill.m_szPageName = _T("技能");
23         m_rgpPages[2] = &m_pageSkill;
24  
25         m_pageRibbon.m_szPageName = _T("缎带");
26         m_rgpPages[3] = &m_pageRibbon;
27  
28         m_pageMisc.m_szPageName = _T("其它");
29         m_rgpPages[4] = &m_pageMisc;
30 }
31  
32 CMemPmPage::~CMemPmPage()
33 {
34 }
35  
36 void CMemPmPage::DoDataExchange(CDataExchange* pDX)
37 {
38         CPropertyPage::DoDataExchange(pDX);
39  
40         DDX_Control(pDX, IDC_TAB, m_ctrlTab);
41         DDX_Control(pDX, IDC_PM_LIST, m_ctrlPmList);
42         DDX_Control(pDX, IDC_CONFIRM, m_ctrlConfirm);
43 }
44  
45  
46 BEGIN_MESSAGE_MAP(CMemPmPage, CPropertyPage)
47         ON_BN_CLICKED(IDC_LANG_CN, OnBnClickedLangCn)
48         ON_BN_CLICKED(IDC_LANG_JP, OnBnClickedLangJp)
49         ON_BN_CLICKED(IDC_COUNT_DEC, OnBnClickedCountDec)
50         ON_BN_CLICKED(IDC_COUNT_HEX, OnBnClickedCountHex)
51         ON_BN_CLICKED(IDC_REFRESH, OnBnClickedRefresh)
52         ON_BN_CLICKED(IDC_CONFIRM, OnBnClickedConfirm)
53         ON_NOTIFY(LVN_ITEMCHANGED, IDC_PM_LIST, OnLvnItemchangedPmList)
54         ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnTcnSelchangeTab)
55         ON_BN_CLICKED(IDC_LANG_EN, OnBnClickedLangEn)
56         ON_BN_CLICKED(IDC_COUNT_NONE, OnBnClickedCountNone)
57         ON_BN_CLICKED(IDC_MOVE_UP, OnBnClickedMoveUp)
58         ON_BN_CLICKED(IDC_MOVE_DOWN, OnBnClickedMoveDown)
59 END_MESSAGE_MAP()
60  
61  
62 // CMemPmPage 消息处理程序
63 void CMemPmPage::ShowTabPage(DWORD dwPageIndex)
64 {
65         if(m_dwCurTabPage != dwPageIndex)
66         {
67                 if(m_dwCurTabPage < MEM_PM_PAGE_COUNT)
68                         m_rgpPages[m_dwCurTabPage]->ShowWindow(SW_HIDE);
69                 m_dwCurTabPage = dwPageIndex;
70                 if(m_dwCurTabPage < MEM_PM_PAGE_COUNT)
71                         m_rgpPages[m_dwCurTabPage]->ShowWindow(SW_SHOW);
72         }
73 }
74  
75 BOOL CMemPmPage::OnInitDialog()
76 {
77         CPropertyPage::OnInitDialog();
78  
79         DWORD   dwIndex;
80         CRect   rect;
81         CString szText;
82  
83         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
84         {
85                 m_ctrlTab.InsertItem(dwIndex, m_rgpPages[dwIndex]->m_szPageName);
86         }
87  
88         m_ctrlTab.GetWindowRect(&rect);
89         m_ctrlTab.AdjustRect(FALSE, &rect);
90         m_ctrlTab.ScreenToClient(&rect);
91  
92         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
93         {
94                 m_rgpPages[dwIndex]->Create(m_rgpPages[dwIndex]->m_uTemplateId, &m_ctrlTab);
95                 m_rgpPages[dwIndex]->ShowWindow(SW_HIDE);
96                 m_rgpPages[dwIndex]->MoveWindow(&rect);
97         }
98  
99         m_ctrlPmList.SetIconSpacing(SMALL_ICON_BIT_WIDTH + 10, SMALL_ICON_BIT_HEIGHT + 22);
100         m_ctrlPmList.SetExtendedStyle(LVS_EX_BORDERSELECT);
101         m_ctrlPmList.SetItemCount(ACTIVE_POKEMON_COUNT);
102  
103         CheckDlgButton(IDC_LANG_CN + cfg.dwLang, BST_CHECKED);
104  
105         CheckDlgButton(IDC_COUNT_NONE + cfg.dwCount, BST_CHECKED);
106  
107         OnChangeUILang();
108  
109         ShowTabPage(0);
110  
111         return TRUE;  // return TRUE unless you set the focus to a control
112         // 异常: OCX 属性页应返回 FALSE
113 }
114  
115 void CMemPmPage::SetPmList(BOOL bSelectionOnly)
116 {
117         DWORD   dwIndex, dwCount;
118         WORD    wBreed;
119         CString szText;
120         LVITEM  lvi;
121 /*
122         lvi.iSubItem = 0;
123         lvi.mask = LVIF_TEXT;
124  
125         dwCount = m_ctrlPmList.GetItemCount();
126         for(dwIndex = 0; dwIndex < ACTIVE_POKEMON_COUNT; ++dwIndex)
127         {
128                 if(g_MemHack.m_pActivePokeCodec == NULL)
129                 {
130                         wBreed = 0;
131                 }
132                 else
133                 {
134                         wBreed = g_MemHack.m_pActivePokeCodec[dwIndex].GetBreed();
135                 }
136  
137                 lvi.iItem = dwIndex;
138                 szText.Format(_T("%lu:"), dwIndex + 1);
139                 if(wBreed < BREED_COUNT)
140                         szText += cfg.pBreedNameList[wBreed].rgszText[cfg.dwLang];
141                 else
142                         szText += _T("未知");
143                 lvi.pszText = szText.GetBuffer();
144                 if(dwIndex < dwCount)
145                         m_ctrlPmList.SetItem(&lvi);
146                 else
147                         m_ctrlPmList.InsertItem(&lvi);
148                 szText.ReleaseBuffer();
149         }
150 */
151         if(!g_MemRom.m_bOpened)
152                 return;
153  
154         lvi.iSubItem = 0;
155         if(!bSelectionOnly)
156         {
157                 lvi.mask = LVIF_IMAGE | LVIF_TEXT;
158                 m_ctrlPmList.SetImageList(g_MemRom.m_pTinyIconList, LVSIL_NORMAL);
159                 dwCount = m_ctrlPmList.GetItemCount();
160                 for(dwIndex = 0; dwIndex < ACTIVE_POKEMON_COUNT; ++dwIndex)
161                 {
162                         if(g_MemHack.m_pActivePokeCodec == NULL)
163                         {
164                                 wBreed = 0;
165                         }
166                         else
167                         {
168                                 wBreed = g_MemHack.m_pActivePokeCodec[dwIndex].GetBreed();
169                         }
170                         if(wBreed == 0 || wBreed >= BREED_COUNT)
171                                 wBreed = 0x114;
172  
173                         lvi.iItem = dwIndex;
174                         lvi.iImage = g_MemRom.GetSmallIconIndex(wBreed, rand() % g_MemRom.GetSmallIconCount(wBreed));
175  
176                         szText.Format(_T("%lu"), dwIndex + 1);
177                         lvi.pszText = szText.GetBuffer();
178                         if(dwIndex < dwCount)
179                                 m_ctrlPmList.SetItem(&lvi);
180                         else
181                                 m_ctrlPmList.InsertItem(&lvi);
182                         szText.ReleaseBuffer();
183                 }
184         }
185         else if(m_dwCurPm < ACTIVE_POKEMON_COUNT)
186         {
187                 lvi.mask = LVIF_IMAGE;
188                 lvi.iItem = m_dwCurPm;
189                 wBreed = g_MemHack.m_pActivePokeCodec[m_dwCurPm].GetBreed();
190                 if(wBreed == 0 || wBreed >= BREED_COUNT)
191                         wBreed = 0x114;
192                 lvi.iImage = g_MemRom.GetSmallIconIndex(wBreed, rand() % g_MemRom.GetSmallIconCount(wBreed));
193  
194                 m_ctrlPmList.SetItem(&lvi);
195         }
196  
197         if(m_dwCurPm >= ACTIVE_POKEMON_COUNT)
198                 m_ctrlPmList.SetItemState(0, -1, LVIS_SELECTED | LVIS_FOCUSED);
199  
200         if(bSelectionOnly)
201         {
202                 m_pageAbility.TransData(TRUE);
203                 m_pageSkill.TransData(TRUE);
204         }
205 }
206  
207 VOID CMemPmPage::OnChangeUILang(VOID)
208 {
209         DWORD   dwIndex;
210  
211         SetPmList();
212  
213         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
214         {
215                 m_rgpPages[dwIndex]->OnChangeUILang();
216         }
217  
218         CPropertySheet *pPropSht = reinterpret_cast<CPropertySheet *>(GetParent());
219         if(pPropSht)
220         {
221                 CMemMiscPage1 *pMiscPage1 =reinterpret_cast<CMemMiscPage1 *>(pPropSht->GetPage(2));
222                 if(pMiscPage1)
223                 {
224                         pMiscPage1->OnChangeUILang();
225                 }
226         }
227 }
228  
229 void CMemPmPage::OnBnClickedLangCn()
230 {
231         if(cfg.dwLang == ui_lang_cn)
232                 return;
233  
234         cfg.dwLang = ui_lang_cn;
235         OnChangeUILang();
236 }
237  
238 void CMemPmPage::OnBnClickedLangJp()
239 {
240         if(cfg.dwLang == ui_lang_jp)
241                 return;
242  
243         cfg.dwLang = ui_lang_jp;
244         OnChangeUILang();
245 }
246  
247 void CMemPmPage::OnBnClickedLangEn()
248 {
249         if(cfg.dwLang == ui_lang_en)
250                 return;
251  
252         cfg.dwLang = ui_lang_en;
253         OnChangeUILang();
254 }
255  
256 void CMemPmPage::OnBnClickedCountNone()
257 {
258         if(cfg.dwCount == ui_count_none)
259                 return;
260  
261         cfg.dwCount = ui_count_none;
262         OnChangeUILang();
263 }
264  
265 void CMemPmPage::OnBnClickedCountDec()
266 {
267         if(cfg.dwCount == ui_count_dec)
268                 return;
269  
270         cfg.dwCount = ui_count_dec;
271         OnChangeUILang();
272 }
273  
274 void CMemPmPage::OnBnClickedCountHex()
275 {
276         if(cfg.dwCount == ui_count_hex)
277                 return;
278  
279         cfg.dwCount = ui_count_hex;
280         OnChangeUILang();
281 }
282  
283 void CMemPmPage::OnBnClickedRefresh()
284 {
285         DWORD   dwIndex;
286  
287         if(!g_MemHack.ReadActivePokemons())
288         {
289                 AfxMessageBox(IDS_ERR_MEM_ACCESS, MB_OK | MB_ICONERROR);
290         }
291         else if(!g_MemRom.OpenRom(
292                                 NULL,
293                                 &g_MemHack.m_vbah,
294                                 CPokemonRom::rom_breed_list |
295                                 CPokemonRom::rom_skill_list |
296                                 CPokemonRom::rom_experience_list |
292 roytam 297                                 CPokemonRom::rom_lvlup_learn_list |
298                                 CPokemonRom::rom_derive_learn_list |
299                                 CPokemonRom::rom_machine_learn_list |
300                                 CPokemonRom::rom_machine_skill_list |
280 roytam 301                                 CPokemonRom::rom_tiny_image_list))
302         {
303                 AfxMessageBox(IDS_ERR_MEM_ACCESS, MB_OK | MB_ICONERROR);
304                 m_ctrlConfirm.EnableWindow(FALSE);
305         }
306         else
307         {
308                 m_ctrlConfirm.EnableWindow(TRUE);
309         }
310  
311         SetPmList();
312         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
313         {
314                 m_rgpPages[dwIndex]->TransData(TRUE);
315         }
316 }
317  
318 void CMemPmPage::OnBnClickedConfirm()
319 {
320         DWORD   dwIndex;
321  
322         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
323         {
324                 m_rgpPages[dwIndex]->TransData(FALSE);
325         }
326  
327         if(!g_MemHack.SaveActivePokemons())
328         {
329                 AfxMessageBox(IDS_ERR_MEM_ACCESS, MB_OK | MB_ICONERROR);
330         }
331 }
332  
333 void CMemPmPage::OnLvnItemchangedPmList(NMHDR *pNMHDR, LRESULT *pResult)
334 {
335         LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
336         *pResult = 0;
337         DWORD   dwIndex;
338  
339         if((pNMLV->uNewState & LVIS_SELECTED) &&
340                 m_dwCurPm != pNMLV->iItem)
341         {
342                 if(m_dwCurPm < ACTIVE_POKEMON_COUNT)
343                 {
344                         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
345                         {
346                                 m_rgpPages[dwIndex]->TransData(FALSE);
347                         }
348                 }
349  
350                 m_dwCurPm = pNMLV->iItem;
351  
352                 if(m_dwCurPm < ACTIVE_POKEMON_COUNT)
353                 {
354                         for(dwIndex = 0; dwIndex < MEM_PM_PAGE_COUNT; ++dwIndex)
355                         {
356                                 m_rgpPages[dwIndex]->TransData(TRUE);
357                         }
358                 }
359         }
360 }
361  
362 void CMemPmPage::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
363 {
364         *pResult = 0;
365         ShowTabPage(m_ctrlTab.GetCurSel());
366 }
367  
368 void CMemPmPage::OnBnClickedMoveUp()
369 {
370         if(m_dwCurPm > 0)
371         {
372                 if(!g_MemHack.SwapActivePokemons(m_dwCurPm, m_dwCurPm - 1))
373                 {
374                         AfxMessageBox(_T("失败!"), MB_OK | MB_ICONERROR);
375                 }
376                 else
377                 {
378                         SetPmList();
379                         --m_dwCurPm;
380                         m_ctrlPmList.SetItemState(m_dwCurPm, -1, LVIS_SELECTED | LVIS_FOCUSED);
381                 }
382         }
383 }
384  
385 void CMemPmPage::OnBnClickedMoveDown()
386 {
387         if(m_dwCurPm < ACTIVE_POKEMON_COUNT - 1)
388         {
389                 if(!g_MemHack.SwapActivePokemons(m_dwCurPm, m_dwCurPm + 1))
390                 {
391                         AfxMessageBox(_T("失败!"), MB_OK | MB_ICONERROR);
392                 }
393                 else
394                 {
395                         SetPmList();
396                         ++m_dwCurPm;
397                         m_ctrlPmList.SetItemState(m_dwCurPm, -1, LVIS_SELECTED | LVIS_FOCUSED);
398                 }
399         }
400 }