diff --git a/src/cheat.cpp b/src/cheat.cpp index 3dc6aa2e..031f0c04 100644 --- a/src/cheat.cpp +++ b/src/cheat.cpp @@ -189,8 +189,8 @@ void FCEU_LoadGameCheats(FILE *override, int override_existing) unsigned int compare; int x; - char linebuf[2048]; - char namebuf[128]; + char linebuf[2048] = { 0 }; + char namebuf[128] = { 0 }; int tc = 0; char *fn; diff --git a/src/drivers/win/cheat.cpp b/src/drivers/win/cheat.cpp index ba3f0fdc..8327f3a9 100644 --- a/src/drivers/win/cheat.cpp +++ b/src/drivers/win/cheat.cpp @@ -31,7 +31,7 @@ static HWND pwindow = 0; //Handle to Cheats dialog HWND hCheat = 0; //mbg merge 7/19/06 had to add -static HMENU hCheatcontext; //Handle to cheat context menu +HMENU hCheatcontext = 0; //Handle to cheat context menu bool pauseWhileActive = false; //For checkbox "Pause while active" extern bool wasPausedByCheats; @@ -67,7 +67,7 @@ char GGcode[10]; int GGlist[GGLISTSIZE]; static int dontupdateGG; //this eliminates recursive crashing -bool dodecode; +// bool dodecode; HWND hGGConv; @@ -106,15 +106,7 @@ char *U8ToStr(uint8 a) int RedoCheatsCallB(char *name, uint32 a, uint8 v, int c, int s, int type, void* data) { char str[256] = { 0 }; - - if(a >= 0x8000) - EncodeGG(str, a, v, c); - else { - if(c == -1) - sprintf(str, "%04X:%02X", (int)a, (int)v); - else - sprintf(str, "%04X?%02X:%02X", (int)a, (int)c, (int)v); - } + GetCheatStr(str, a, v, c); LVITEM lvi = { 0 }; lvi.mask = LVIF_TEXT; @@ -255,12 +247,20 @@ int ShowResults(HWND hwndDlg, bool supressUpdate = false) void EnableCheatButtons(HWND hwndDlg, int enable) { - EnableWindow(GetDlgItem(hwndDlg,IDC_CHEAT_VAL_KNOWN),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_KNOWN),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_EQ),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_NE),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_GT),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_LT),enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_KNOWN), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_KNOWN), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_LABEL_KNOWN), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_EQ), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_NE), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_CHECK_NE_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_NE_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_GT), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_CHECK_GT_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_GT_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_LT), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_CHECK_LT_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_LT_BY), enable); + } HWND InitializeCheatList(HWND hwnd) @@ -313,6 +313,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_NE_BY, WM_SETFONT, (WPARAM)hNewFont, FALSE); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_GT_BY, WM_SETFONT, (WPARAM)hNewFont, FALSE); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_LT_BY, WM_SETFONT, (WPARAM)hNewFont, FALSE); + SendDlgItemMessage(hwndDlg, IDC_CHEAT_TEXT, WM_SETFONT, (WPARAM)hNewFont, FALSE); //text limits SendDlgItemMessage(hwndDlg, IDC_CHEAT_ADDR, EM_SETLIMITTEXT, 4, 0); @@ -323,15 +324,16 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_NE_BY, EM_SETLIMITTEXT, 2, 0); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_GT_BY, EM_SETLIMITTEXT, 2, 0); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_LT_BY, EM_SETLIMITTEXT, 2, 0); + SendDlgItemMessage(hwndDlg, IDC_CHEAT_TEXT, EM_SETLIMITTEXT, 10, 0); //disable or enable buttons - EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_KNOWN), FALSE); + CheckDlgButton(hwndDlg, IDC_RADIO_ADDRESS, MF_CHECKED); possiTotalCount = 0; possiItemCount = SendDlgItemMessage(hwndDlg, IDC_CHEAT_LIST_POSSIBILITIES, LVM_GETCOUNTPERPAGE, 0, 0); - EnableCheatButtons(hwndDlg, possiTotalCount != 0); ShowResults(hwndDlg); + EnableCheatButtons(hwndDlg, possiTotalCount != 0); //add header for cheat list and possibilities InitializeCheatList(hwndDlg); @@ -427,13 +429,11 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l RECT wrect; wrect.left = LVIR_BOUNDS; SendMessage(itemHwnd, LVM_GETITEMRECT, sel, (LPARAM)&wrect); - POINT point; point.x = wrect.left + (wrect.right - wrect.left) / 2; point.y = wrect.top + (wrect.bottom - wrect.top) / 2; ClientToScreen(itemHwnd, &point); } TrackPopupMenu(hCheatcontextsub, TPM_RIGHTBUTTON, point.x, point.y, 0, hwndDlg, 0); //Create menu - } } break; @@ -552,33 +552,11 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l break; case IDC_BTN_CHEAT_ADD: { - char str[256] = { 0 }; - uint32 a = 0; - uint8 v = 0; - int c = 0; - dodecode = true; + char name[256] = { 0 }; uint32 a; uint8 v = 0; int c = 0; + GetUICheatInfo(hwndDlg, name, &a, &v, &c); - GetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, str, 5); - if(str[0] != 0) - dodecode = false; - a = StrToU16(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_VAL, str, 3); - if(str[0] != 0) - dodecode = false; - v = StrToU8(str); - GetDlgItemText(hwndDlg,IDC_CHEAT_COM, str, 3); - if(str[0] != 0) - dodecode = false; - c = (str[0] == 0) ? -1 : StrToU8(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, str, 256); - if(dodecode && (strlen(str) == 6 || strlen(str) == 8)) - if(FCEUI_DecodeGG(str, &GGaddr, &GGval, &GGcomp)) { - a = GGaddr; - v = GGval; - c = GGcomp; - } - if (FCEUI_AddCheat(str, a, v, c, 1)) { - RedoCheatsCallB(str, a, v, c, 1, 1, NULL); + if (FCEUI_AddCheat(name, a, v, c, 1)) { + RedoCheatsCallB(name, a, v, c, 1, 1, NULL); int newselcheat = SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_GETITEMCOUNT, 0, 0) - 1; ListView_MoveSelectionMark(GetDlgItem(hwndDlg, IDC_LIST_CHEATS), selcheat, newselcheat); @@ -628,35 +606,14 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l case IDC_BTN_CHEAT_UPD: { selcheat = SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_GETSELECTIONMARK, 0, 0); - - dodecode = true; - char str[256] = { 0 }; - char* name = ""; uint32 a; uint8 v; int s; int c; - if (selcheat < 0) break; - GetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, str, 5); - if (str[0] != 0) - dodecode = false; - a = StrToU16(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_VAL, str, 3); - if (str[0] != 0) - dodecode = false; - v = StrToU8(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_COM, str, 3); - if (str[0] != 0) - dodecode = false; - c = (str[0] == 0) ? -1 : StrToU8(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, str, 256); - if (dodecode && (strlen(str) == 6 || strlen(str) == 8)) { - if (FCEUI_DecodeGG(str, &GGaddr, &GGval, &GGcomp)) { - a = GGaddr; - v = GGval; - c = GGcomp; - } - } - FCEUI_SetCheat(selcheat, str, a, v, c, -1, 1); - FCEUI_GetCheat(selcheat, &name, &a, &v, &c, &s, NULL); + + char name[256]; uint32 a; uint8 v; int s; int c; + GetUICheatInfo(hwndDlg, name, &a, &v, &c); + + FCEUI_SetCheat(selcheat, name, a, v, c, -1, 1); + FCEUI_GetCheat(selcheat, NULL, &a, &v, &c, &s, NULL); RedoCheatsCallB(name, a, v, c, s, 1, &selcheat); SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_SETSELECTIONMARK, 0, selcheat); @@ -700,8 +657,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l savecheats = 1; } } - break; } + break; case IDC_BTN_CHEAT_RESET: FCEUI_CheatSearchBegin(); ShowResults(hwndDlg); @@ -715,8 +672,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l knownvalue = StrToU8(str); FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_KNOWN, knownvalue, 0); ShowResults(hwndDlg); - break; } + break; case IDC_BTN_CHEAT_EQ: searchdone = 1; FCEUI_CheatSearchEnd(FCEU_SEARCH_PUERLY_RELATIVE_CHANGE,0,0); @@ -732,8 +689,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l } else FCEUI_CheatSearchEnd(FCEU_SEARCH_ANY_CHANGE, 0, 0); ShowResults(hwndDlg); - break; } + break; case IDC_BTN_CHEAT_GT: { char str[256] = { 0 }; @@ -744,8 +701,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l } else FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_GT, 0, 0); ShowResults(hwndDlg); - break; } + break; case IDC_BTN_CHEAT_LT: { char str[256] = { 0 }; @@ -756,10 +713,63 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l } else FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_LT, 0, 0); ShowResults(hwndDlg); - break; + } + break; + case IDC_RADIO_ADDRESS: + case IDC_RADIO_TEXT_CODE: + ToggleCheatInputMode(hwndDlg, LOWORD(wParam)); + break; + } + break; + case EN_UPDATE: + switch (LOWORD(wParam)) + { + case IDC_CHEAT_ADDR: + case IDC_CHEAT_VAL: + case IDC_CHEAT_COM: + { + if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_ADDRESS)) + { + char buf[16]; uint32 a; uint8 v; int c; + GetUICheatInfo(hwndDlg, NULL, &a, &v, &c); + GetCheatStr(buf, a, v, c); + SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf); + } + + // it was saparated to the text/game genie position + /* + if (dodecode && (strlen(buf) == 6 || strlen(buf) == 8)) + if (FCEUI_DecodeGG(buf, &GGaddr, &GGval, &GGcomp)) { + a = GGaddr; + v = GGval; + c = GGcomp; + } + */ + } + break; + case IDC_CHEAT_TEXT: + { + if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_TEXT_CODE)) + { + char buf[16]; + GetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf, 16); + int a = -1, v = -1; int c = -1; + if (strchr(buf, ':')) + { + if (strchr(buf, '?')) + sscanf(buf, "%X:%X?%X", &a, &c, &v); + else + sscanf(buf, "%X:%X", &a, &v); + } + else if (strlen(buf) == 6 || strlen(buf) == 8) + FCEUI_DecodeGG(buf, &a, &v, &c); + + SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)(a == -1 ? "" : U16ToStr(a))); + SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)(v == -1 ? "" : U8ToStr(v))); + SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)(c == -1 ? "" : U8ToStr(c))); + } } } - break; } break; case WM_NOTIFY: @@ -788,6 +798,11 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)U16ToStr(a)); SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)U8ToStr(v)); SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)(c == -1 ? "" : U8ToStr(c))); + + char code[32]; + GetCheatStr(code, a, v, c); + + SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, code); } EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_DEL), selcheatcount > 0); @@ -960,6 +975,16 @@ void UpdateCheatsAdded() UpdateCheatListGroupBoxUI(); } +void ToggleCheatInputMode(HWND hwndDlg, int modeId) +{ + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_ADDR), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_COM), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_LABEL), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_COM_LABEL), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_TEXT), modeId == IDC_RADIO_TEXT_CODE); +} + BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { char str[100]; @@ -981,66 +1006,63 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) }; case WM_INITDIALOG: //todo: set text limits - if (GGConv_wndx==-32000) GGConv_wndx=0; //Just in case - if (GGConv_wndy==-32000) GGConv_wndy=0; - SetWindowPos(hwndDlg,0,GGConv_wndx,GGConv_wndy,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOOWNERZORDER); - break; - case WM_CREATE: - - break; - case WM_PAINT: + if (GGConv_wndx == -32000) + GGConv_wndx = 0; //Just in case + if (GGConv_wndy == -32000) + GGConv_wndy = 0; + SetWindowPos(hwndDlg, 0, GGConv_wndx, GGConv_wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_CODE, EM_SETLIMITTEXT, 8, 0); break; case WM_CLOSE: case WM_QUIT: DestroyWindow(hGGConv); hGGConv = 0; break; - case WM_COMMAND: - switch(HIWORD(wParam)) { - case EN_UPDATE: - if(dontupdateGG)break; - dontupdateGG = 1; - switch(LOWORD(wParam)){ //lets find out what edit control got changed - case IDC_GAME_GENIE_CODE: //The Game Genie Code - in this case decode it. - GetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode,9); - if((strlen(GGcode) != 8) && (strlen(GGcode) != 6))break; + switch(HIWORD(wParam)) { + case EN_UPDATE: + if(dontupdateGG)break; + dontupdateGG = 1; + switch(LOWORD(wParam)){ //lets find out what edit control got changed + case IDC_GAME_GENIE_CODE: //The Game Genie Code - in this case decode it. + GetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode,9); + if((strlen(GGcode) != 8) && (strlen(GGcode) != 6))break; - FCEUI_DecodeGG(GGcode, &GGaddr, &GGval, &GGcomp); + FCEUI_DecodeGG(GGcode, &GGaddr, &GGval, &GGcomp); - sprintf(str,"%04X",GGaddr); - SetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str); + sprintf(str,"%04X",GGaddr); + SetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str); - if(GGcomp != -1) - sprintf(str,"%02X",GGcomp); - else str[0] = 0; + if(GGcomp != -1) + sprintf(str,"%02X",GGcomp); + else str[0] = 0; SetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str); - sprintf(str,"%02X",GGval); - SetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str); + sprintf(str,"%02X",GGval); + SetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str); //ListGGAddresses(); - break; + break; - case IDC_GAME_GENIE_ADDR: - case IDC_GAME_GENIE_COMP: - case IDC_GAME_GENIE_VAL: + case IDC_GAME_GENIE_ADDR: + case IDC_GAME_GENIE_COMP: + case IDC_GAME_GENIE_VAL: - GetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str,5); - if(strlen(str) != 4) break; + GetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str,5); + if(strlen(str) != 4) break; - GetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str,5); - if(strlen(str) != 2) {GGval = -1; break;} + GetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str,5); + if(strlen(str) != 2) {GGval = -1; break;} - GGaddr = GetEditHex(hGGConv,IDC_GAME_GENIE_ADDR); - GGval = GetEditHex(hGGConv,IDC_GAME_GENIE_VAL); + GGaddr = GetEditHex(hGGConv,IDC_GAME_GENIE_ADDR); + GGval = GetEditHex(hGGConv,IDC_GAME_GENIE_VAL); - GetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str,5); - if(strlen(str) != 2) GGcomp = -1; - else GGcomp = GetEditHex(hGGConv,IDC_GAME_GENIE_COMP); + GetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str,5); + if(strlen(str) != 2) GGcomp = -1; + else GGcomp = GetEditHex(hGGConv,IDC_GAME_GENIE_COMP); - EncodeGG(GGcode, GGaddr, GGval, GGcomp); - SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode); - //ListGGAddresses(); + EncodeGG(GGcode, GGaddr, GGval, GGcomp); + SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode); + //ListGGAddresses(); break; } ListGGAddresses(); @@ -1074,7 +1096,6 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) } } break; - case LBN_DBLCLK: switch (LOWORD(wParam)) { case IDC_LIST_GGADDRESSES: @@ -1192,11 +1213,31 @@ void DoGGConv() return; } -/* -void ListBox::OnRButtonDown(UINT nFlags, CPoint point) +inline void GetCheatStr(char* buf, int a, int v, int c) { -CPoint test = point; -} */ + if (a >= 0x8000) + EncodeGG(buf, a, v, c); + else { + if (c == -1) + sprintf(buf, "%04X:%02X", (int)a, (int)v); + else + sprintf(buf, "%04X?%02X:%02X", (int)a, (int)c, (int)v); + } + +} + +void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c) +{ + char buf[16]; + GetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, buf, 5); + *a = StrToU16(buf); + GetDlgItemText(hwndDlg, IDC_CHEAT_VAL, buf, 3); + *v = StrToU8(buf); + GetDlgItemText(hwndDlg, IDC_CHEAT_COM, buf, 3); + *c = (buf[0] == 0) ? -1 : StrToU8(buf); + if (name) + GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, name, 256); +} void DisableAllCheats() { diff --git a/src/drivers/win/cheat.h b/src/drivers/win/cheat.h index 7a24a5d7..99939705 100644 --- a/src/drivers/win/cheat.h +++ b/src/drivers/win/cheat.h @@ -15,6 +15,9 @@ void SetGGConvFocus(int address,int compare); void UpdateCheatList(); void UpdateCheatListGroupBoxUI(); void UpdateCheatsAdded(); +void ToggleCheatInputMode(HWND hwndDlg, int modeId); +void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c); +inline void GetCheatStr(char* buf, int a, int v, int c); extern unsigned int FrozenAddressCount; extern std::vector FrozenAddresses; @@ -35,5 +38,6 @@ SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, newIndex) (SetDlgItemText(hwnd, IDC_CHEAT_ADDR, (LPTSTR)"") & \ SetDlgItemText(hwnd, IDC_CHEAT_VAL, (LPTSTR)"") & \ SetDlgItemText(hwnd, IDC_CHEAT_COM, (LPTSTR)"") & \ -SetDlgItemText(hwnd, IDC_CHEAT_NAME, (LPTSTR)"")) +SetDlgItemText(hwnd, IDC_CHEAT_NAME, (LPTSTR)"") & \ +SetDlgItemText(hwnd, IDC_CHEAT_TEXT, (LPTSTR)"")) diff --git a/src/drivers/win/ramwatch.cpp b/src/drivers/win/ramwatch.cpp index 489f32ae..306c6406 100644 --- a/src/drivers/win/ramwatch.cpp +++ b/src/drivers/win/ramwatch.cpp @@ -131,7 +131,6 @@ bool InsertWatch(const AddressWatcher& Watch) return true; } - bool InsertWatch(const AddressWatcher& Watch, HWND parent) { if(!VerifyWatchNotAlreadyAdded(Watch)) @@ -144,9 +143,20 @@ bool InsertWatch(const AddressWatcher& Watch, HWND parent) int prevWatchCount = WatchCount; - rswatches[WatchCount] = Watch; - rswatches[WatchCount].CurValue = GetCurrentValue(rswatches[WatchCount]); - DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), parent, (DLGPROC)EditWatchProc, (LPARAM)WatchCount); + int tmpWatchIndex; + if (parent == RamWatchHWnd) + tmpWatchIndex = WatchCount; + else if (parent == RamSearchHWnd) + tmpWatchIndex = -2; + else if (parent == hCheat) + tmpWatchIndex = -3; + else + tmpWatchIndex = -4; + + rswatches[tmpWatchIndex] = Watch; + rswatches[tmpWatchIndex].CurValue = GetCurrentValue(rswatches[tmpWatchIndex]); + DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), parent, (DLGPROC)EditWatchProc, tmpWatchIndex); + rswatches.erase(tmpWatchIndex); return WatchCount > prevWatchCount; } @@ -158,7 +168,9 @@ bool InsertWatches(const AddressWatcher* watches, HWND parent, const int count) else { bool success = false; + char comment[256]; rswatches[-1] = watches[0]; + rswatches[-1].comment = comment; if(DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), parent, (DLGPROC)EditWatchProc, (LPARAM)-1)) for (int i = 0; i < count; ++i) { @@ -166,7 +178,6 @@ bool InsertWatches(const AddressWatcher* watches, HWND parent, const int count) watcher.comment = rswatches[-1].comment; success |= InsertWatch(watcher); } - free(rswatches[-1].comment); rswatches.erase(-1); return success; } @@ -768,7 +779,9 @@ void RefreshWatchListSelectedItemControlStatus(HWND hDlg) LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) //Gets info for a RAM Watch, and then inserts it into the Watch List { - static int index; + // since there are 3 windows can pops up the add watch dialog, we should store them separately. + // 0 for ram watch, 1 for ram search, 2 for cheat dialog. + static int indexes[4]; switch(uMsg) { @@ -777,12 +790,12 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara RECT r; GetWindowRect(hWnd, &r); SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); - - index = (int)lParam; - AddressWatcher& watcher = rswatches[index]; + + AddressWatcher& watcher = rswatches[lParam]; if (watcher.Type != 'S') { char Str_Tmp[1024]; - if (index != -1) + // -1 means batch add + if (lParam != -1) { sprintf(Str_Tmp, "%04X", watcher.Address); SetDlgItemText(hDlg, IDC_EDIT_COMPAREADDRESS, Str_Tmp); @@ -821,6 +834,8 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara SetDlgItemText(hDlg, IDC_PROMPT_EDIT, watcher.comment); HWND parent = GetParent(hDlg); + indexes[GetDlgStoreIndex(parent)] = lParam; + if (watcher.Type == 'S' || parent == RamSearchHWnd || parent == hCheat) { EnableWindow(GetDlgItem(hDlg, IDC_SPECIFICADDRESS), FALSE); @@ -845,21 +860,25 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara { case IDOK: { - char Str_Tmp[1024]; + char Str_Tmp[256]; + + HWND parent = GetParent(hDlg); + int index = indexes[GetDlgStoreIndex(parent)]; + // not a single watch editing operation if (index != -1) { // a normal watch, copy it to a temporary one AddressWatcher watcher = rswatches[index]; - if (watcher.comment != NULL) - watcher.comment = strcpy((char*)malloc(strlen(watcher.comment) + 2), watcher.comment); + // if (watcher.comment != NULL) + // watcher.comment = strcpy((char*)malloc(strlen(watcher.comment) + 2), watcher.comment); // It's from ram watch window, not a separator - // When it's from ram search window, all the information required is already set, + // When it's from ram search or cheat window, all the information required is already set, // so this is also unecessary if (RamWatchHWnd && RamWatchHWnd == GetParent(hDlg) && watcher.Type != 'S') { - GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 1024); + GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 256); // type if (SendDlgItemMessage(hDlg, IDC_SIGNED, BM_GETCHECK, 0, 0) == BST_CHECKED) @@ -910,9 +929,9 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara watcher.comment = Str_Tmp; // finallly update the watch list - if (index < WatchCount) + if (index >= 0 && index < WatchCount) // it's a watch editing operation. - // Only ram watch window can edit a watch, the ram search window only add watch. + // Only ram watch window can edit a watch, the ram search window and cheat window only add watch. EditWatch(index, watcher); else InsertWatch(watcher); @@ -924,7 +943,7 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara AddressWatcher& watcher = rswatches[index]; // comment GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 80); - watcher.comment = strcpy((char*) malloc(strlen(Str_Tmp) + 2), Str_Tmp); + strcpy(watcher.comment, Str_Tmp); } EndDialog(hDlg, true); @@ -1289,7 +1308,7 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); if(watchIndex != -1) { - DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC) EditWatchProc,(LPARAM)watchIndex); + DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC)EditWatchProc, watchIndex); SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); } return true; @@ -1300,7 +1319,7 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam target.WrongEndian = 0; target.Size = 'b'; target.Type = 's'; - DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC)EditWatchProc, (LPARAM)WatchCount); + DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC)EditWatchProc, WatchCount); SetFocus(GetDlgItem(hDlg, IDC_WATCHLIST)); return true; } diff --git a/src/drivers/win/ramwatch.h b/src/drivers/win/ramwatch.h index b93981ac..2df1638d 100644 --- a/src/drivers/win/ramwatch.h +++ b/src/drivers/win/ramwatch.h @@ -78,4 +78,9 @@ extern HWND RamWatchHWnd; #define WatchSizeConv(watch) (watch.Type == 'S' ? 0 : watch.Size == 'd' ? 4 : watch.Size == 'w' ? 2 : watch.Size == 'b' ? 1 : 0) #define SizeConvWatch(size) (size == 4 ? 'd' : size == 2 ? 'w' : size == 1 : 'b' : 0) +#define GetDlgStoreIndex(parent) \ + (parent == RamWatchHWnd ? 0 : \ + parent == RamSearchHWnd ? 1 : \ + parent == hCheat ? 2 : 3) + #endif diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index e1cb83ae..30192e26 100644 --- a/src/drivers/win/res.rc +++ b/src/drivers/win/res.rc @@ -12,7 +12,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// Neutral resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL @@ -25,8 +25,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_ICON3 ICON "res\\taseditor-icon.ico" -IDI_ICON4 ICON "res\\taseditor-icon32.ico" +IDI_ICON3 ICON "res/taseditor-icon.ico" +IDI_ICON4 ICON "res/taseditor-icon32.ico" ICON_1 ICON "res/ICON_1.ico" ICON_2 ICON "res/ICON_2.ico" @@ -1567,7 +1567,7 @@ STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS CAPTION "Game Genie Encoder/Decoder Tool" FONT 8, "Tahoma", 0, 0, 0x0 BEGIN - EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_AUTOHSCROLL + EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_UPPERCASE | ES_AUTOHSCROLL GROUPBOX "Game Genie Code",-1,107,5,69,42 GROUPBOX "Address/Compare/Value",65534,9,5,91,75 LTEXT "Address:",65533,18,24,35,8 @@ -1973,45 +1973,47 @@ BEGIN LTEXT "New Selection Name:",-1,5,240,68,8 END -CHEATCONSOLE DIALOGEX 0, 0, 431, 198 +CHEATCONSOLE DIALOGEX 0, 0, 395, 216 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Cheat Search" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Active Cheats",IDC_GROUPBOX_CHEATLIST,5,2,171,191,WS_TABSTOP - GROUPBOX "Cheat Search",IDC_GROUPBOX_CHEATSEARCH,181,2,244,191,WS_TABSTOP - CONTROL "",IDC_LIST_CHEATS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,11,11,159,131 + GROUPBOX "Active Cheats",IDC_GROUPBOX_CHEATLIST,5,2,178,209,WS_TABSTOP + GROUPBOX "Cheat Search",IDC_GROUPBOX_CHEATSEARCH,188,2,201,209,WS_TABSTOP + CONTROL "",IDC_LIST_CHEATS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,11,11,167,131 LTEXT "Name:",IDC_STATIC,13,147,22,10 - LTEXT "Address:",IDC_STATIC,13,162,30,8 - LTEXT "Value:",IDC_STATIC,74,162,22,8 - LTEXT "Compare:",IDC_STATIC,117,162,34,8 - EDITTEXT IDC_CHEAT_NAME,37,145,132,12,ES_AUTOHSCROLL | ES_WANTRETURN - EDITTEXT IDC_CHEAT_ADDR,45,160,25,12,ES_UPPERCASE | ES_WANTRETURN - EDITTEXT IDC_CHEAT_VAL,98,160,16,12,ES_UPPERCASE | ES_WANTRETURN - EDITTEXT IDC_CHEAT_COM,153,160,16,12,ES_UPPERCASE | ES_WANTRETURN - DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,12,174,36,16 - PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,48,174,36,16 - PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,84,174,36,16 - PUSHBUTTON "Reset",IDC_BTN_CHEAT_RESET,187,12,55,15 - PUSHBUTTON "Known Value:",IDC_BTN_CHEAT_KNOWN,187,35,55,15 - LTEXT "0x",IDC_STATIC,246,38,9,8 - EDITTEXT IDC_CHEAT_VAL_KNOWN,256,36,18,12,ES_UPPERCASE - GROUPBOX "Previous Compare",204,186,57,113,119 - PUSHBUTTON "Equal",IDC_BTN_CHEAT_EQ,192,74,55,15,WS_GROUP - PUSHBUTTON "Not Equal",IDC_BTN_CHEAT_NE,192,101,55,15 - CONTROL "By:",IDC_CHEAT_CHECK_NE_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,251,104,22,10 - EDITTEXT IDC_CHEAT_VAL_NE_BY,275,103,18,12,ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "Greater Than",IDC_BTN_CHEAT_GT,192,128,55,15 - CONTROL "By:",IDC_CHEAT_CHECK_GT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,251,131,22,10 - EDITTEXT IDC_CHEAT_VAL_GT_BY,275,130,18,12,ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "Less Than",IDC_BTN_CHEAT_LT,192,155,55,15 - CONTROL "By:",IDC_CHEAT_CHECK_LT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,251,158,22,10 - EDITTEXT IDC_CHEAT_VAL_LT_BY,275,157,18,12,ES_UPPERCASE | ES_WANTRETURN - GROUPBOX "Possibilities",IDC_CHEAT_BOX_POSSIBILITIES,304,8,116,168,WS_TABSTOP - CONTROL "",IDC_CHEAT_LIST_POSSIBILITIES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,309,18,106,153 + LTEXT "Value:",IDC_CHEAT_VAL_LABEL,83,162,22,8 + LTEXT "Compare:",IDC_CHEAT_COM_LABEL,126,162,34,8 + EDITTEXT IDC_CHEAT_NAME,37,145,141,12,ES_AUTOHSCROLL | ES_WANTRETURN + EDITTEXT IDC_CHEAT_ADDR,54,160,25,12,ES_UPPERCASE | ES_WANTRETURN + EDITTEXT IDC_CHEAT_VAL,107,160,16,12,ES_UPPERCASE | ES_WANTRETURN + EDITTEXT IDC_CHEAT_COM,162,160,16,12,ES_UPPERCASE | ES_WANTRETURN + DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,11,192,36,16 + PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,49,192,36,16 + PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,87,192,36,16 + PUSHBUTTON "Reset",IDC_BTN_CHEAT_RESET,200,12,55,15 + PUSHBUTTON "Known Value:",IDC_BTN_CHEAT_KNOWN,200,32,55,15 + LTEXT "0x",IDC_CHEAT_LABEL_KNOWN,225,51,9,8 + EDITTEXT IDC_CHEAT_VAL_KNOWN,236,49,18,12,ES_UPPERCASE + GROUPBOX "Previous Compare",IDC_GROUP_PREV_COM,193,63,69,132 + PUSHBUTTON "Equal",IDC_BTN_CHEAT_EQ,200,75,55,15,WS_GROUP + PUSHBUTTON "Not Equal",IDC_BTN_CHEAT_NE,200,96,55,15 + CONTROL "By:",IDC_CHEAT_CHECK_NE_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,114,22,10 + EDITTEXT IDC_CHEAT_VAL_NE_BY,236,113,18,12,ES_UPPERCASE | ES_WANTRETURN + PUSHBUTTON "Greater Than",IDC_BTN_CHEAT_GT,200,129,55,15 + CONTROL "By:",IDC_CHEAT_CHECK_GT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,147,22,10 + EDITTEXT IDC_CHEAT_VAL_GT_BY,236,146,18,12,ES_UPPERCASE | ES_WANTRETURN + PUSHBUTTON "Less Than",IDC_BTN_CHEAT_LT,200,162,55,15 + CONTROL "By:",IDC_CHEAT_CHECK_LT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,180,22,10 + EDITTEXT IDC_CHEAT_VAL_LT_BY,236,179,18,12,ES_UPPERCASE | ES_WANTRETURN + GROUPBOX "Possibilities",IDC_CHEAT_BOX_POSSIBILITIES,266,8,117,187,WS_TABSTOP + CONTROL "",IDC_CHEAT_LIST_POSSIBILITIES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,272,18,106,172 CONTROL " Pause emulation when this window is active",IDC_CHEAT_PAUSEWHENACTIVE, - "Button",BS_AUTOCHECKBOX,188,179,157,10 - PUSHBUTTON "Import...",IDC_BTN_CHEAT_ADDFROMFILE,128,174,43,16 + "Button",BS_AUTOCHECKBOX,198,198,157,10 + PUSHBUTTON "Import...",IDC_BTN_CHEAT_ADDFROMFILE,136,192,43,16 + CONTROL "Address:",IDC_RADIO_ADDRESS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,161,42,10 + CONTROL "Cheat Code / Game Genie:",IDC_RADIO_TEXT_CODE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,176,101,10 + EDITTEXT IDC_CHEAT_TEXT,115,175,63,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED END IDD_LUA DIALOGEX 0, 0, 270, 150 @@ -2431,8 +2433,8 @@ BEGIN "CHEATCONSOLE", DIALOG BEGIN - RIGHTMARGIN, 430 - BOTTOMMARGIN, 197 + RIGHTMARGIN, 394 + BOTTOMMARGIN, 215 END "VIDEOCONFIG", DIALOG @@ -2682,12 +2684,12 @@ IDB_BITMAP_SELECTED17 BITMAP "res\\te_17_selected.bmp" IDB_BITMAP_SELECTED18 BITMAP "res\\te_18_selected.bmp" IDB_BITMAP_SELECTED19 BITMAP "res\\te_19_selected.bmp" IDB_BRANCH_SPRITESHEET BITMAP "res\\branch_spritesheet.bmp" -#endif // English (U.S.) resources +#endif // Neutral resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// English (U.S) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US @@ -2716,7 +2718,7 @@ END #endif // APSTUDIO_INVOKED -#endif // English (U.S.) resources +#endif // English (U.S) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/drivers/win/resource.h b/src/drivers/win/resource.h index c94445c3..8f8f6adc 100644 --- a/src/drivers/win/resource.h +++ b/src/drivers/win/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} -// Microsoft Visual C++ 生成的包含文件。 -// 供 res.rc 使用 +// Microsoft Visual C++ generated file +// for res.rc // #define CLOSE_BUTTON 1 #define BUTTON_CLOSE 1 @@ -273,6 +273,7 @@ #define COMBO_NETMOO_LOCAL_PLAYERS 204 #define MENU_MV_EDIT_FIND_NEXT 204 #define IDC_DEBUGGER_FLAG_D 204 +#define IDC_GROUP_PREV_COM 204 #define IDC_NETMOO_KEY 205 #define IDC_DEBUGGER_FLAG_I 205 #define IDB_BITMAP20 205 @@ -584,6 +585,7 @@ #define IDC_NOTE_TO_FIND 1147 #define IDC_AUTOSAVE_PERIOD 1147 #define IDC_EXTRA_SCANLINES 1147 +#define IDC_CHEAT_TEXT 1147 #define IDC_BUTTON9 1148 #define TASEDITOR_FIND_NEXT_SIMILAR_MARKER 1148 #define IDC_SYMBOLIC_ADDRESS 1148 @@ -792,6 +794,12 @@ #define IDC_EXTRA_SCANLINES_TEXT 1309 #define IDC_DATASIZE_GROUPBOX 1310 #define IDC_DATATYPE_GROUPBOX 1311 +#define IDC_RADIO_ADDRESS 1312 +#define IDC_RADIO_TEXT_CODE 1313 +#define IDC_CHEAT_VAL_LABEL 1314 +#define IDC_CHEAT_COM_LABEL 1315 +#define IDC_CHEAT_KNOWN_LABEL 1316 +#define IDC_CHEAT_LABEL_KNOWN 1316 #define MENU_NETWORK 40040 #define MENU_PALETTE 40041 #define MENU_SOUND 40042 @@ -1273,7 +1281,7 @@ #define MENU_MV_FILE_LOAD_OAM 40599 #define DISASM_CONTEXT_SELECTALL 40599 #define CHEAT_CONTEXT_POSSI_ADDTOMEMORYWATCH 40600 -#define CHEAT_CONTEXT_POSSI_ADDCHEAT 40601 +#define CHEAT_CONTEXT_POSSI_ADDCHEAT 40601 #define CHEAT_CONTEXT_POSSI_GOTOINHEXEDITOR 40602 #define CHEAT_CONTEXT_POSSI_ADDTORAMWATCH 40603 #define IDC_DEBUGGER_ICONTRAY 55535 @@ -1290,7 +1298,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 304 #define _APS_NEXT_COMMAND_VALUE 40611 -#define _APS_NEXT_CONTROL_VALUE 1312 +#define _APS_NEXT_CONTROL_VALUE 1317 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif