Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
MainDlg.cpp
Package: SCM_Editor_0911.rar [view]
Upload User: binky88
Upload Date: 2015-05-28
Package Size: 199k
Code Size: 61k
Category:
Windows Develop
Development Platform:
Visual C++
- // MainDlg.cpp : implementation of the CMainDlg class
- //
- /////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "resource.h"
- #include "MainDlg.h"
- #include "static_function.h"
- #include "wizard.h"
- #define DRAG_DELAY 60
- LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
- {
- // center the dialog on the screen
- CenterWindow();
- // set icons
- HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
- IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
- SetIcon(hIcon, TRUE);
- HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
- IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
- SetIcon(hIconSmall, FALSE);
- // TCHAR szWindowName[255] = {0};
- // LoadString(NULL, GetLangString(LS_WINDOWTITLE), szWindowName, 255);
- // SetWindowText(szWindowName);
- m_bDragging = false;
- m_wndTree.SubclassWindow(GetDlgItem(IDC_RAWCODE_TREE));
- m_wndBlogLink.SubclassWindow(GetDlgItem(IDC_BLOG));
- m_wndBlogLink.SetHyperLink (_T("http://mask911.net/"));
- m_wndPCLink.SubclassWindow(GetDlgItem(IDC_PSPCHINA));
- m_wndPCLink.SetHyperLink (_T("http://bbs.pspchina.net/"));
- m_treeRawCode = CTreeViewCtrlEx(GetDlgItem(IDC_RAWCODE_TREE));
- m_image.Create(IDB_TREEIMAGE, 16, 1, RGB(255,255,255));
- m_treeRawCode.SetImageList(m_image.m_hImageList, TVSIL_NORMAL);
- m_hRoot = NULL;
- m_TimerTicks = 0;
- m_nOldY = -1;
- m_nClassCount = 0;
- m_nCodeCount = 0;
- m_bShouldTrigger = TRUE;
- SetDlgItemText(IDC_CLASS_COUNT, _T("Class Number: 0/50"));
- SetDlgItemText(IDC_CODE_COUNT, _T("Code Number: 0/500"));
- RegisterHotKey(m_treeRawCode.m_hWnd, ID_ACCELERATOR_MOVEDOWN, MOD_CONTROL, VK_DOWN);
- RegisterHotKey(m_treeRawCode.m_hWnd, ID_ACCELERATOR_MOVEUP, MOD_CONTROL, VK_UP);
- // m_tooltip.Create(m_treeRawCode.m_hWnd);
- // // m_tooltip.Activate(TRUE);
- // // m_tooltip.AddTool(GetDlgItem(IDC_RAWCODE_TREE), _T("Tree Tool Tip"));
- // m_tooltip.SetMaxTipWidth(0);
- //
- // m_ti.cbSize = sizeof(m_ti);
- // m_ti.uFlags = TTF_IDISHWND|TTF_TRACK|TTF_ABSOLUTE|TTF_TRANSPARENT;
- // m_ti.hwnd = m_treeRawCode.m_hWnd;
- // m_ti.hinst = NULL;
- // m_ti.uId = (UINT)m_treeRawCode.m_hWnd;
- // m_ti.lpszText = LPSTR_TEXTCALLBACK;
- // m_ti.rect.left = 0;
- // m_ti.rect.top = 0;
- // m_ti.rect.right = 0;
- // m_ti.rect.bottom = 0;
- //
- // m_tooltip.AddTool(&m_ti);
- // // m_tooltip.SendMessage(TTM_ADDTOOL, 0, (LPARAM)&m_ti);
- return TRUE;
- }
- LRESULT CMainDlg::OnOk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
- {
- // TODO: Add validation code
- HWND hFocus = GetFocus();
- if(wNotifyCode == 0)
- {
- if(GetDlgItem(IDC_FILENAME) == hFocus)
- {
- TCHAR szFileName[MAX_PATH] = {0};
- GetDlgItemText(IDC_FILENAME, szFileName, MAX_PATH);
- m_strSCMFile = SCM_String(szFileName);
- if(m_strSCMFile.length() > 0 && (GetFileAttributes(m_strSCMFile.c_str()) != INVALID_FILE_ATTRIBUTES))
- {
- ClearData();
- LoadFile(m_strSCMFile.c_str());
- ::SetFocus(m_treeRawCode.m_hWnd);
- m_treeRawCode.SelectItem(m_hRoot);
- }
- }
- else if((m_treeRawCode.GetEditControl()).m_hWnd == hFocus)
- {
- m_treeRawCode.EndEditLabelNow(FALSE);
- }
- else if(m_treeRawCode.m_hWnd == hFocus)
- {
- m_treeRawCode.EditLabel(m_treeRawCode.GetSelectedItem());
- }
- }
- return 0;
- }
- LRESULT CMainDlg::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND hWndCtl, BOOL& /*bHandled*/)
- {
- HWND hFocus = GetFocus();
- if((m_treeRawCode.GetEditControl()).m_hWnd == hFocus)
- {
- m_treeRawCode.EndEditLabelNow(TRUE);
- }
- else if(m_treeRawCode.m_hWnd == hFocus)
- {
- if(m_bDragging)
- {
- m_bDragging = FALSE;
- CImageList::DragLeave(m_treeRawCode.m_hWnd);
- CImageList::EndDrag();
- m_treeRawCode.SelectDropTarget(NULL);
- KillTimer(m_nScrollTimerID);
- RECT rect;
- m_treeRawCode.GetClientRect(&rect);
- m_treeRawCode.InvalidateRect(&rect, TRUE);
- m_treeRawCode.UpdateWindow();
- INPUT input;
- input.type = INPUT_MOUSE;
- input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
- input.mi.time = 0;
- SendInput(1, &input, sizeof(input));
- }
- }
- return 0;
- }
- LRESULT CMainDlg::OnClose(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your message handler code here and/or call default
- EndDialog(wParam);
- return 0;
- }
- LRESULT CMainDlg::OnSelectfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your control notification handler code here
- OPENFILENAME ofn;
- TCHAR szFile[MAX_PATH] = {0};
- TCHAR szInitalDir[MAX_PATH] = {0};
- GetDlgItemText(IDC_FILENAME, szInitalDir, MAX_PATH);
- ZeroMemory(&ofn, sizeof(OPENFILENAME));
- ofn.lStructSize = sizeof(ofn);
- ofn.hwndOwner = m_hWnd;
- ofn.lpstrFile = szFile;
- ofn.lpstrFile[0] = _T('');
- ofn.nMaxFile = sizeof(szFile);
- ofn.lpstrFilter = _T("SCEP CheatMaster 0.7 Raw Code File*.scm");
- ofn.nFilterIndex = 1;
- ofn.lpstrTitle = _T("Please Open a SCEP CheatMaster 0.7 Raw Code File");
- ofn.lpstrInitialDir = szInitalDir;
- ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
- if(TRUE == GetOpenFileName(&ofn))
- {
- m_strSCMFile = SCM_String(ofn.lpstrFile);
- SetDlgItemText(IDC_FILENAME, ofn.lpstrFile);
- ClearData();
- LoadFile(m_strSCMFile.c_str());
- ::SetFocus(m_treeRawCode.m_hWnd);
- m_treeRawCode.SelectItem(m_hRoot);
- }
- return 0;
- }
- LRESULT CMainDlg::OnOpenfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your control notification handler code here
- ClearData();
- LoadFile(m_strSCMFile.c_str());
- ::SetFocus(m_treeRawCode.m_hWnd);
- m_treeRawCode.SelectItem(m_hRoot);
- return 0;
- }
- bool CMainDlg::LoadFile(LPCTSTR lpszFileName)
- {
- if(GetFileAttributes(lpszFileName) == INVALID_FILE_ATTRIBUTES)
- {
- MessageBox(_T("Please Select an exist SCEP CheatMaster 0.7 Raw Code File!"), _T("Error"), MB_OK|MB_TOPMOST);
- ClearData();
- return false;
- }
- HANDLE hRawCodeFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
- if(hRawCodeFile == INVALID_HANDLE_VALUE)
- {
- MessageBox(_T("Please Select an exist SCEP CheatMaster 0.7 Raw Code File!"), _T("Error"), MB_OK|MB_TOPMOST);
- ClearData();
- return false;
- }
- // FileName
- HTREEITEM hTreeItem;
- if(m_hRoot == NULL)
- m_hRoot = InsertTreeItem(lpszFileName, TVI_ROOT, TVI_ROOT);
- else
- m_treeRawCode.SetItemText(m_hRoot, lpszFileName);
- AddTreeNode(m_hRoot, MAX_PATH, _T(""), _T(""), _T(""), (LPTSTR)lpszFileName, NODE_TYPE_FILENAME);
- char szReadData[50] = {0};
- TCHAR szDisplayData[100] = {0};
- // ID
- readString(hRawCodeFile, szReadData, 50, NULL, 0x0A);
- ZeroMemory(szDisplayData, sizeof(szDisplayData));
- _tcscpy(szDisplayData, (s2ws(szReadData)).c_str());
- hTreeItem = InsertTreeItem(szDisplayData, m_hRoot, m_hRoot);
- AddTreeNode(hTreeItem, 12, _T(""), _T(""), _T("ID: "), szDisplayData, NODE_TYPE_GAMEINFO);
- // Name
- readString(hRawCodeFile, szReadData, 50, NULL, 0x0A);
- ZeroMemory(szDisplayData, sizeof(szDisplayData));
- _tcscpy(szDisplayData, (s2ws(szReadData)).c_str());
- hTreeItem = InsertTreeItem(szDisplayData, m_hRoot, hTreeItem);
- AddTreeNode(hTreeItem, 30, _T(""), _T(""), _T("NAME: "), szDisplayData, NODE_TYPE_GAMEINFO);
- // START
- readString(hRawCodeFile, szReadData, 50, "$", 0x0A);
- if(stricmp(szReadData, "START"))
- {
- MessageBox(_T("This is not a valid SCEP CheatMaster 0.7 Raw Code File!"), _T("Error"), MB_OK|MB_TOPMOST);
- ClearData();
- return false;
- }
- HTREEITEM hClassItem;
- HTREEITEM hCodeItem;
- HTREEITEM hMemoryItem;
- int nCodeNumber = 1;
- TCHAR szCodeNumber[5] = {0};
- DWORD dwReaded;
- do
- {
- // ClassName
- if(!readString(hRawCodeFile, szReadData, 50, "$", '{'))
- break;
- hClassItem = InsertTreeItem((SCM_String(_T("Class Name: ")) + s2ws(szReadData)).c_str(), m_hRoot, hTreeItem);
- AddTreeNode(hClassItem, 19, _T(""), _T(""), _T("Class Name: "), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_CLASSNAME);
- hCodeItem = hClassItem;
- nCodeNumber = 1;
- do
- {
- // CodeItem
- _itot(nCodeNumber++, szCodeNumber, 10);
- ZeroMemory(szDisplayData, sizeof(szDisplayData));
- _tcscpy(szDisplayData, (SCM_String(_T("Code ")) + SCM_String(szCodeNumber)).c_str());
- hCodeItem = InsertTreeItem(szDisplayData, hClassItem, hCodeItem);
- AddTreeNode(hCodeItem, MAX_PATH, _T(""), _T(""), _T("Code "), szCodeNumber, NODE_TYPE_RAWCODENUMBER);
- // CodeName
- readString(hRawCodeFile, szReadData, 50, "$", ' ');
- if (!strcmp(szReadData, " "))
- strcpy(szReadData, RAWCODENAMEEMPTY);
- hTreeItem = InsertTreeItem((SCM_String(_T("Code Name: ")) + s2ws(szReadData)).c_str(), hCodeItem, hCodeItem);
- AddTreeNode(hTreeItem, 9, _T(""), _T(" "), _T("Code Name: "), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_RAWCODENAME);
- // ItemStat
- readString(hRawCodeFile, szReadData, 50, "$", ' ');
- ZeroMemory(szDisplayData, sizeof(szDisplayData));
- switch(atoi(szReadData))
- {
- case 0:
- _tcscpy(szDisplayData, _T("Code Stat: Disable"));
- break;
- case 1:
- _tcscpy(szDisplayData, _T("Code Stat: Enable"));
- break;
- case 2:
- _tcscpy(szDisplayData, _T("Code Stat: Lock"));
- break;
- default:
- _tcscpy(szDisplayData, _T("Code Stat: Unknown"));
- break;
- }
- hTreeItem = InsertTreeItem(szDisplayData, hCodeItem, hTreeItem);
- AddTreeNode(hTreeItem, 1, _T("012"), _T(""), _T("Code Stat: "), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_RAWCODESTAT);
- // MemTitle
- ZeroMemory(szDisplayData, sizeof(szDisplayData));
- _tcscpy(szDisplayData, _T("Memory"));
- hMemoryItem = InsertTreeItem(szDisplayData, hCodeItem, hTreeItem);
- AddTreeNode(hMemoryItem, MAX_PATH, _T(""), _T(""), _T(""), szDisplayData, NODE_TYPE_RAWCODEMEMORY);
- // Mem1
- readString(hRawCodeFile, szReadData, 50, "$(", ' ');
- hTreeItem = InsertTreeItem((SCM_String(_T("Memory1: 0x")) + s2ws(szReadData)).c_str(), hMemoryItem, hMemoryItem);
- AddTreeNode(hTreeItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory1: 0x"), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_RAWCODEMEMORYN);
- // Mem2
- readString(hRawCodeFile, szReadData, 50, NULL, ' ');
- hTreeItem = InsertTreeItem((SCM_String(_T("Memory2: 0x")) + s2ws(szReadData)).c_str(), hMemoryItem, hTreeItem);
- AddTreeNode(hTreeItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory2: 0x"), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_RAWCODEMEMORYN);
- // Mem3
- readString(hRawCodeFile, szReadData, 50, NULL, ' ');
- hTreeItem = InsertTreeItem((SCM_String(_T("Memory3: 0x")) + s2ws(szReadData)).c_str(), hMemoryItem, hTreeItem);
- AddTreeNode(hTreeItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory3: 0x"), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_RAWCODEMEMORYN);
- // Mem4
- readString(hRawCodeFile, szReadData, 50, NULL, ')');
- hTreeItem = InsertTreeItem((SCM_String(_T("Memory4: 0x")) + s2ws(szReadData)).c_str(), hMemoryItem, hTreeItem);
- AddTreeNode(hTreeItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory4: 0x"), (LPTSTR)s2ws(szReadData).c_str(), NODE_TYPE_RAWCODEMEMORYN);
- ReadFile(hRawCodeFile, szReadData, 1, &dwReaded, NULL);
- if(szReadData[0] == '}')
- break;
- } while(1);
- } while(1);
- m_treeRawCode.Expand(m_hRoot, TVE_EXPAND);
- CloseHandle(hRawCodeFile);
- UpdateClassCodeCount();
- return true;
- }
- void CMainDlg::ClearData()
- {
- if(m_hRoot != NULL && m_treeRawCode.ItemHasChildren(m_hRoot))
- {
- HTREEITEM hNextItem;
- HTREEITEM hChildItem = m_treeRawCode.GetChildItem(m_hRoot);
- while (hChildItem != NULL)
- {
- hNextItem = m_treeRawCode.GetNextItem(hChildItem, TVGN_NEXT);
- m_treeRawCode.DeleteItem(hChildItem);
- hChildItem = hNextItem;
- }
- }
- if(m_vTreeNode.size() > 0)
- {
- m_vTreeNode.clear();
- }
- m_nClassCount = 0;
- m_nCodeCount = 0;
- UpdateClassCodeCount();
- }
- LRESULT CMainDlg::OnKillfocusFilename(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your control notification handler code here
- TCHAR szFileName[MAX_PATH] = {0};
- GetDlgItemText(IDC_FILENAME, szFileName, MAX_PATH);
- m_strSCMFile = SCM_String(szFileName);
- return 0;
- }
- HTREEITEM CMainDlg::InsertTreeItem(LPCTSTR lpszText, HTREEITEM hParent, HTREEITEM hAfter)
- {
- TVITEM tvi = { 0 }; // TreeView Item
- TVINSERTSTRUCT tvins = { 0 }; // TreeView Insert Struct
- tvi.mask = TVIF_TEXT;
- tvi.pszText = (LPTSTR)lpszText;
- tvi.cchTextMax = _tcslen(lpszText);
- tvins.item = tvi;
- tvins.hParent = hParent;
- tvins.hInsertAfter = hAfter;
- return TreeView_InsertItem(m_treeRawCode.m_hWnd, &tvins);
- }
- void CMainDlg::AddTreeNode(HTREEITEM hTreeItem, int nLimitLength, LPTSTR lpszValidChars, LPTSTR lpszInvalidChars, LPTSTR lpszFront,LPTSTR lpszValue, int nType, int nPos)
- {
- TreeNode treeNode;
- ZeroMemory(&treeNode, sizeof(TreeNode));
- treeNode.hItem = hTreeItem;
- treeNode.nLimitLength = nLimitLength;
- _tcsncpy(treeNode.szValidChars, lpszValidChars, 100);
- _tcsncpy(treeNode.szInvalidChars, lpszInvalidChars, 100);
- _tcsncpy(treeNode.szFront, lpszFront, 50);
- _tcsncpy(treeNode.szValue, lpszValue, 50);
- treeNode.nType = nType;
- if(nType == NODE_TYPE_CLASSNAME)
- m_nClassCount ++;
- else if(nType == NODE_TYPE_RAWCODENUMBER)
- m_nCodeCount ++;
- if(nPos == -1)
- m_vTreeNode.push_back(treeNode);
- else
- m_vTreeNode.insert(m_vTreeNode.begin()+nPos, treeNode);
- }
- LRESULT CMainDlg::OnBeginLabelEdit(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
- {
- LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
- // TODO: Add your control notification handler code here
- m_nTreeNodeIndex = GetTreeNodeIndex(pTVDispInfo->item.hItem);
- if(m_nTreeNodeIndex != -1)
- {
- if( (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_FILENAME) ||
- (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODENUMBER) ||
- (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODEMEMORY))
- {
- m_treeRawCode.EndEditLabelNow(TRUE);
- return 0;
- }
- if(NULL != m_vTreeNode[m_nTreeNodeIndex].szFront && 0 < _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront))
- {
- TCHAR *pDest;
- pDest = _tcsstr(pTVDispInfo->item.pszText, m_vTreeNode[m_nTreeNodeIndex].szFront);
- if (NULL != pDest && _tcslen(pDest) == _tcslen(pTVDispInfo->item.pszText))
- {
- if (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODENAME)
- {
- if (!_tcscmp((pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront)), _T(RAWCODENAMEEMPTY)))
- {
- m_treeRawCode.GetEditControl().SetWindowText(_T(""));
- m_strEditControlText = SCM_String(pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront));
- }
- else
- {
- m_treeRawCode.GetEditControl().SetWindowText(pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront));
- m_strEditControlText = SCM_String(pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront));
- }
- }
- else if (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODESTAT)
- {
- TCHAR szStat[10] = {0};
- _tcscpy(szStat, pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront));
- if(!_tcscmp(szStat, _T("Disable")))
- _tcscpy(szStat, _T("0"));
- else if(!_tcscmp(szStat, _T("Enable")))
- _tcscpy(szStat, _T("1"));
- else if(!_tcscmp(szStat, _T("Lock")))
- _tcscpy(szStat, _T("2"));
- else if(_tcslen(szStat) == 0)
- _tcscpy(szStat, _T(""));
- else
- _tcscpy(szStat, _T("3"));
- m_treeRawCode.GetEditControl().SetWindowText(szStat);
- m_strEditControlText = SCM_String(szStat);
- // RECT rect;
- // m_treeRawCode.GetItemRect(pTVDispInfo->item.hItem, &rect, TRUE);
- // hComboBox = comboBox.Create(m_treeRawCode.m_hWnd, rect, NULL, WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL);
- // comboBox.AddString(_T("Disable"));
- // comboBox.AddString(_T("Enable"));
- // comboBox.AddString(_T("Lock"));
- // comboBox.ShowDropDown();
- // comboBox.SetFocus();
- // ::SetWindowLong(hComboBox, GWL_WNDPROC, (LONG)ComboBoxProc);
- }
- else
- {
- m_treeRawCode.GetEditControl().SetWindowText(pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront));
- m_strEditControlText = SCM_String(pDest + _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront));
- }
- }
- else
- {
- m_strEditControlText = SCM_String(pTVDispInfo->item.pszText);
- }
- }
- if(m_vTreeNode[m_nTreeNodeIndex].nLimitLength != -1)
- m_treeRawCode.GetEditControl().LimitText(m_vTreeNode[m_nTreeNodeIndex].nLimitLength);
- }
- return 0;
- }
- LRESULT CMainDlg::OnEndLabelEdit(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
- {
- LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
- // TODO: Add your control notification handler code here
- if ((pTVDispInfo->item.mask | TVIF_TEXT) != pTVDispInfo->item.mask)
- return 0;
- if(m_nTreeNodeIndex != -1)
- {
- if( (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_FILENAME) ||
- (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODENUMBER) ||
- (m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODEMEMORY))
- return 0;
- if (NULL != m_vTreeNode[m_nTreeNodeIndex].szValidChars && 0 < _tcslen(m_vTreeNode[m_nTreeNodeIndex].szValidChars))
- {
- int nTextLen = _tcslen(pTVDispInfo->item.pszText);
- for (int i = 0; i < nTextLen; i++)
- {
- if(NULL == _tcschr(m_vTreeNode[m_nTreeNodeIndex].szValidChars, pTVDispInfo->item.pszText[i]))
- {
- m_treeRawCode.EditLabel(pTVDispInfo->item.hItem);
- if(m_vTreeNode[m_nTreeNodeIndex].nLimitLength != -1)
- m_treeRawCode.GetEditControl().LimitText(m_vTreeNode[m_nTreeNodeIndex].nLimitLength);
- m_treeRawCode.GetEditControl().SetWindowText(m_strEditControlText.c_str());
- EDITBALLOONTIP ebt;
- ZeroMemory(&ebt, sizeof(EDITBALLOONTIP));
- ebt.cbStruct = sizeof(ebt);
- TCHAR szText[300] = _T("Your input have some invalid words, please retry!nThe valid words:"");
- _tcscat(szText, m_vTreeNode[m_nTreeNodeIndex].szValidChars);
- _tcscat(szText, _T("""));
- ebt.pszText = szText;
- m_treeRawCode.GetEditControl().ShowBalloonTip(&ebt);
- return 0;
- }
- }
- }
- if (NULL != m_vTreeNode[m_nTreeNodeIndex].szInvalidChars && 0 < _tcslen(m_vTreeNode[m_nTreeNodeIndex].szInvalidChars))
- {
- int nTextLen = _tcslen(m_vTreeNode[m_nTreeNodeIndex].szInvalidChars);
- for (int i = 0; i < nTextLen; i++)
- {
- if(NULL != _tcschr(pTVDispInfo->item.pszText, m_vTreeNode[m_nTreeNodeIndex].szInvalidChars[i]))
- {
- m_treeRawCode.EditLabel(pTVDispInfo->item.hItem);
- if(m_vTreeNode[m_nTreeNodeIndex].nLimitLength != -1)
- m_treeRawCode.GetEditControl().LimitText(m_vTreeNode[m_nTreeNodeIndex].nLimitLength);
- m_treeRawCode.GetEditControl().SetWindowText(m_strEditControlText.c_str());
- EDITBALLOONTIP ebt;
- ZeroMemory(&ebt, sizeof(EDITBALLOONTIP));
- ebt.cbStruct = sizeof(ebt);
- TCHAR szText[300] = _T("Your input have some invalid words, please retry!nThe invalid words:"");
- _tcscat(szText, m_vTreeNode[m_nTreeNodeIndex].szInvalidChars);
- _tcscat(szText, _T("""));
- ebt.pszText = szText;
- m_treeRawCode.GetEditControl().ShowBalloonTip(&ebt);
- return 0;
- }
- }
- }
- if(NULL != m_vTreeNode[m_nTreeNodeIndex].szFront && 0 < _tcslen(m_vTreeNode[m_nTreeNodeIndex].szFront))
- {
- TCHAR szText[30] = {0};
- if(m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODESTAT)
- {
- if(_tcslen(pTVDispInfo->item.pszText) == 0)
- {
- _tcscpy(szText, _T("Disable"));
- _tcscpy(pTVDispInfo->item.pszText, _T("0"));
- }
- else
- {
- switch(_ttoi(pTVDispInfo->item.pszText))
- {
- case 0:
- _tcscpy(szText, _T("Disable"));
- break;
- case 1:
- _tcscpy(szText, _T("Enable"));
- break;
- case 2:
- _tcscpy(szText, _T("Lock"));
- break;
- default:
- _tcscpy(szText, _T("Unknown"));
- break;
- }
- }
- }
- else if(m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODENAME)
- {
- if(_tcslen(pTVDispInfo->item.pszText) == 0)
- _tcscpy(szText, _T(RAWCODENAMEEMPTY));
- else
- _tcscpy(szText, pTVDispInfo->item.pszText);
- }
- else if(m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_RAWCODEMEMORYN)
- {
- int nLength = _tcslen(pTVDispInfo->item.pszText);
- if(nLength < 8)
- {
- ZeroMemory(szText, sizeof(szText));
- _tcsncpy(szText, _T("00000000"), 8-nLength);
- _tcscat(szText, pTVDispInfo->item.pszText);
- }
- else
- _tcscpy(szText, pTVDispInfo->item.pszText);
- }
- else
- _tcscpy(szText, pTVDispInfo->item.pszText);
- SCM_String strText = SCM_String(m_vTreeNode[m_nTreeNodeIndex].szFront);
- strText += SCM_String(szText);
- m_treeRawCode.SetItemText(pTVDispInfo->item.hItem, strText.c_str());
- }
- if(m_vTreeNode[m_nTreeNodeIndex].nType == NODE_TYPE_GAMEINFO)
- {
- SCM_String strText = SCM_String(m_vTreeNode[m_nTreeNodeIndex].szFront);
- strText += SCM_String(pTVDispInfo->item.pszText);
- _tcscpy(m_vTreeNode[m_nTreeNodeIndex].szValue, strText.c_str());
- }
- else
- {
- _tcscpy(m_vTreeNode[m_nTreeNodeIndex].szValue, pTVDispInfo->item.pszText);
- }
- }
- else
- m_treeRawCode.SetItemText(pTVDispInfo->item.hItem, pTVDispInfo->item.pszText);
- m_nTreeNodeIndex = -2;
- return 0;
- }
- int CMainDlg::GetTreeNodeIndex(HTREEITEM hTreeItem)
- {
- for(int i = 0; i < m_vTreeNode.size(); i++)
- {
- if(hTreeItem == m_vTreeNode[i].hItem)
- return i;
- }
- return -1;
- }
- //LRESULT CMainDlg::OnNMDblclkRawcodeTree(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& bHandled)
- void CMainDlg::OnLButtonDoubleClick_Tree(UINT nFlags, CPoint point)
- {
- // TODO: Add your control notification handler code here
- m_bShouldTrigger = FALSE;
- int n = GetTreeNodeIndex(m_treeRawCode.GetSelectedItem());
- if(m_vTreeNode[n].nType == NODE_TYPE_RAWCODEMEMORY)
- {
- GetMemoryInfo(n);
- if(m_treeRawCode.GetItemState(m_treeRawCode.GetSelectedItem(), TVIS_EXPANDED) != TVIS_EXPANDED)
- m_treeRawCode.Expand(m_treeRawCode.GetSelectedItem(), TVE_EXPAND);
- return;
- }
- SetMsgHandled(FALSE);
- }
- int CMainDlg::GetMemoryInfo(int nTreeNodeIndex)
- {
- CWizardDlg dlgWizard;
- int nMemoryType;
- switch(m_vTreeNode[nTreeNodeIndex+1].szValue[0])
- {
- case '0':
- case '1':
- case '2':
- nMemoryType = MEMORY_DIRECT;
- break;
- case '3':
- nMemoryType = MEMORY_VARIABLE;
- break;
- case '4':
- case '8':
- nMemoryType = MEMORY_COMPRESS;
- break;
- case 'D':
- case 'd':
- case 'E':
- case 'e':
- nMemoryType = MEMORY_CONDITION;
- break;
- case '7':
- nMemoryType = MEMORY_CALC;
- break;
- case '5':
- nMemoryType = MEMORY_COPY;
- break;
- case '6':
- nMemoryType = MEMORY_POINTER;
- break;
- case 'B':
- case 'b':
- case 'C':
- case 'c':
- nMemoryType = MEMORY_STOP;
- break;
- default:
- nMemoryType = MEMORY_UNKNOWN;
- break;
- }
- if( nMemoryType == MEMORY_DIRECT &&
- !_tcsicmp(m_vTreeNode[nTreeNodeIndex+1].szValue, _T("00000000")) &&
- !_tcsicmp(m_vTreeNode[nTreeNodeIndex+2].szValue, _T("00000000")) &&
- !_tcsicmp(m_vTreeNode[nTreeNodeIndex+3].szValue, _T("00000000")) &&
- !_tcsicmp(m_vTreeNode[nTreeNodeIndex+4].szValue, _T("00000000")))
- nMemoryType = MEMORY_UNKNOWN;
- ParseMemoryInfo(m_vTreeNode[nTreeNodeIndex+1].szValue, m_vTreeNode[nTreeNodeIndex+2].szValue, m_vTreeNode[nTreeNodeIndex+3].szValue,
- m_vTreeNode[nTreeNodeIndex+4].szValue, dlgWizard.m_pType.m_memInfo);
- if(IDOK == dlgWizard.DoModal())
- MessageBox(_T("Wizard Ok"));
- return 0;
- }
- LRESULT CMainDlg::OnTvnKeydownRawcodeTree(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
- {
- LPNMTVKEYDOWN pTVKeyDown = reinterpret_cast<LPNMTVKEYDOWN>(pNMHDR);
- // TODO: Add your control notification handler code here
- if(!m_treeRawCode.GetSelectedItem())
- return 0;
- if(pTVKeyDown->wVKey == VK_DELETE)
- {
- int nType = m_vTreeNode[GetTreeNodeIndex(m_treeRawCode.GetSelectedItem())].nType;
- if(nType == NODE_TYPE_FILENAME || nType == NODE_TYPE_GAMEINFO)
- {
- HTREEITEM hChildItem = m_treeRawCode.GetChildItem(m_hRoot);
- HTREEITEM hNextItem;
- while(hChildItem != NULL)
- {
- if(m_vTreeNode[GetTreeNodeIndex(hChildItem)].nType != NODE_TYPE_GAMEINFO)
- {
- hNextItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- DeleteItemAndChild(hChildItem);
- hChildItem = hNextItem;
- }
- else
- hChildItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- }
- }
- else if(nType == NODE_TYPE_CLASSNAME || nType == NODE_TYPE_RAWCODENUMBER)
- {
- DeleteItemAndChild(m_treeRawCode.GetSelectedItem());
- }
- }
- else if(pTVKeyDown->wVKey == VK_INSERT)
- {
- if(m_treeRawCode.GetCount() > 0)
- {
- if((m_nCodeCount >= 500) || (m_nClassCount >= 50))
- MessageBox(_T("One file only can contain 50 Classes and 500 Raw Codes!"));
- int nType = m_vTreeNode[GetTreeNodeIndex(m_treeRawCode.GetSelectedItem())].nType;
- if(nType == NODE_TYPE_FILENAME || nType == NODE_TYPE_GAMEINFO || nType == NODE_TYPE_CLASSNAME)
- {
- AddItem(m_treeRawCode.GetSelectedItem());
- }
- }
- }
- else if(pTVKeyDown->wVKey == VK_F2)
- {
- m_treeRawCode.EditLabel(m_treeRawCode.GetSelectedItem());
- }
- else if(pTVKeyDown->wVKey == VK_APPS)
- {
- POINT point;
- RECT rect;
- if(!m_treeRawCode.GetItemRect(m_treeRawCode.GetSelectedItem(), &rect, TRUE))
- return 0;
- point.x = rect.left + (rect.bottom - rect.top)/2;
- point.y = rect.top + (rect.bottom - rect.top)/2;
- ::ClientToScreen(m_treeRawCode.m_hWnd, &point);
- ShowContextMenu(point);
- }
- #if defined(_DEBUG)
- else if(pTVKeyDown->wVKey == VK_F5)
- {
- TCHAR szType[50] = {0};
- FILE *fp = _tfopen(_T("c:\tree1.txt"), _T("w"));
- for(int i = 0; i < m_vTreeNode.size(); i++)
- {
- switch(m_vTreeNode[i].nType)
- {
- case NODE_TYPE_FILENAME:
- _tcscpy(szType, _T("NODE_TYPE_FILENAMEt"));
- break;
- case NODE_TYPE_GAMEINFO:
- _tcscpy(szType, _T("NODE_TYPE_GAMEINFOt"));
- break;
- case NODE_TYPE_CLASSNAME:
- _tcscpy(szType, _T("NODE_TYPE_CLASSNAMEt"));
- break;
- case NODE_TYPE_RAWCODENUMBER:
- _tcscpy(szType, _T("NODE_TYPE_RAWCODENUMBERt"));
- break;
- case NODE_TYPE_RAWCODENAME:
- _tcscpy(szType, _T("NODE_TYPE_RAWCODENAMEt"));
- break;
- case NODE_TYPE_RAWCODESTAT:
- _tcscpy(szType, _T("NODE_TYPE_RAWCODESTATt"));
- break;
- case NODE_TYPE_RAWCODEMEMORY:
- _tcscpy(szType, _T("NODE_TYPE_RAWCODEMEMORYt"));
- break;
- case NODE_TYPE_RAWCODEMEMORYN:
- _tcscpy(szType, _T("NODE_TYPE_RAWCODEMEMORYN"));
- break;
- default:
- break;
- }
- _ftprintf(fp, _T("%dt%st0x%0.8xt%s%sn"), i, szType, m_vTreeNode[i].hItem, m_vTreeNode[i].szFront, m_vTreeNode[i].szValue);
- }
- fclose(fp);
- }
- #endif
- return 0;
- }
- void CMainDlg::DeleteItemAndChild(HTREEITEM hItem, BOOL bMoveItem)
- {
- HTREEITEM hLastItem;
- if(hItem != NULL && m_treeRawCode.ItemHasChildren(hItem))
- {
- HTREEITEM hNextItem;
- HTREEITEM hChildItem = m_treeRawCode.GetChildItem(hItem);
- while (hChildItem != NULL && hChildItem != hItem)
- {
- hLastItem = hChildItem;
- int n = GetTreeNodeIndex(hLastItem);
- if(!bMoveItem)
- if(m_vTreeNode[n].nType == NODE_TYPE_CLASSNAME)
- m_nClassCount --;
- else if(m_vTreeNode[n].nType == NODE_TYPE_RAWCODENUMBER)
- m_nCodeCount --;
- if(n != -1)
- m_vTreeNode.erase(m_vTreeNode.begin() + n);
- hNextItem = m_treeRawCode.GetChildItem(hChildItem);
- if(NULL != hNextItem)
- {
- hChildItem = hNextItem;
- }
- else
- {
- hNextItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- if(NULL == hNextItem)
- hNextItem = m_treeRawCode.GetParentItem(hChildItem);
- m_treeRawCode.DeleteItem(hChildItem);
- hChildItem = hNextItem;
- }
- }
- }
- if(hItem != m_hRoot)
- {
- int n = GetTreeNodeIndex(hItem);
- if(!bMoveItem)
- if(m_vTreeNode[n].nType == NODE_TYPE_CLASSNAME)
- m_nClassCount --;
- else if(m_vTreeNode[n].nType == NODE_TYPE_RAWCODENUMBER)
- m_nCodeCount --;
- if(n != -1)
- m_vTreeNode.erase(m_vTreeNode.begin() + n);
- m_treeRawCode.DeleteItem(hItem);
- }
- if(!bMoveItem)
- UpdateClassCodeCount();
- }
- void CMainDlg::AddItem(HTREEITEM hTreeItem)
- {
- if(hTreeItem == NULL)
- {
- HTREEITEM hTreeItem;
- if(m_hRoot == NULL)
- m_hRoot = InsertTreeItem(_T("FileName"), TVI_ROOT, TVI_ROOT);
- else
- m_treeRawCode.SetItemText(m_hRoot, _T("FileName"));
- AddTreeNode(m_hRoot, MAX_PATH, _T(""), _T(""), _T(""), _T("FileName"), NODE_TYPE_FILENAME);
- // ID
- hTreeItem = InsertTreeItem(_T("ID: GameID"), m_hRoot, m_hRoot);
- AddTreeNode(hTreeItem, 12, _T(""), _T(""), _T("ID: "), _T("ID: GameID"), NODE_TYPE_GAMEINFO);
- // Name
- hTreeItem = InsertTreeItem(_T("NAME: Game Name"), m_hRoot, hTreeItem);
- AddTreeNode(hTreeItem, 30, _T(""), _T(""), _T("NAME: "), _T("NAME: Game Name"), NODE_TYPE_GAMEINFO);
- GetDlgItem(IDC_SAVE).EnableWindow(0);
- m_treeRawCode.EditLabel(m_treeRawCode.GetPrevSiblingItem(hTreeItem));
- return;
- }
- HTREEITEM hLastItem;
- int nType = m_vTreeNode[GetTreeNodeIndex(m_treeRawCode.GetSelectedItem())].nType;
- if(nType == NODE_TYPE_FILENAME || nType == NODE_TYPE_GAMEINFO)
- {
- hLastItem = m_hRoot;
- if(m_hRoot != NULL && m_treeRawCode.ItemHasChildren(m_hRoot))
- {
- HTREEITEM hChildItem = m_treeRawCode.GetChildItem(m_hRoot);
- while (NULL != hChildItem)
- {
- hLastItem = hChildItem;
- hChildItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- }
- }
- hTreeItem = InsertTreeItem(_T("Class Name: "), m_hRoot, hLastItem);
- AddTreeNode(hTreeItem, 19, _T(""), _T(""), _T("Class Name: "), _T(""), NODE_TYPE_CLASSNAME, m_vTreeNode.size());
- m_treeRawCode.EditLabel(hTreeItem);
- }
- else if(nType == NODE_TYPE_CLASSNAME)
- {
- hLastItem = hTreeItem;
- int nCodeNumber = 1;
- TCHAR szCodeNumber[5] = {0};
- TCHAR szDisplayData[100] = {0};
- int nPos;
- if(hTreeItem != NULL && m_treeRawCode.ItemHasChildren(hTreeItem))
- {
- HTREEITEM hChildItem = m_treeRawCode.GetChildItem(hTreeItem);
- while (NULL != hChildItem)
- {
- hLastItem = hChildItem;
- hChildItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- nCodeNumber ++;
- }
- }
- HTREEITEM hItem = m_treeRawCode.GetNextSiblingItem(m_treeRawCode.GetParentItem(hLastItem));
- if(hItem == NULL)
- nPos = m_vTreeNode.size();
- else
- nPos = GetTreeNodeIndex(hItem);
- // CodeItem
- _itot(nCodeNumber++, szCodeNumber, 10);
- _tcscpy(szDisplayData, _T("Code "));
- _tcscat(szDisplayData, szCodeNumber);
- hTreeItem = InsertTreeItem(szDisplayData, hTreeItem, hLastItem);
- AddTreeNode(hTreeItem, MAX_PATH, _T(""), _T(""), _T("Code "), szCodeNumber, NODE_TYPE_RAWCODENUMBER, nPos++);
- // CodeName
- hLastItem = InsertTreeItem(_T("Code Name: !NoName"), hTreeItem, hLastItem);
- AddTreeNode(hLastItem, 9, _T(""), _T(" "), _T("Code Name: "), _T(RAWCODENAMEEMPTY), NODE_TYPE_RAWCODENAME, nPos++);
- // ItemStat
- hLastItem = InsertTreeItem(_T("Code Stat: Disable"), hTreeItem, hLastItem);
- AddTreeNode(hLastItem, 1, _T("012"), _T(""), _T("Code Stat: "), _T("0"), NODE_TYPE_RAWCODESTAT, nPos++);
- // MemTitle
- HTREEITEM hMemoryItem = InsertTreeItem(_T("Memory"), hTreeItem, hLastItem);
- AddTreeNode(hMemoryItem, MAX_PATH, _T(""), _T(""), _T(""), _T("Memory"), NODE_TYPE_RAWCODEMEMORY, nPos++);
- // Mem1
- hLastItem = InsertTreeItem(_T("Memory1: 0x00000000"), hMemoryItem, hMemoryItem);
- AddTreeNode(hLastItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory1: 0x"), _T("00000000"), NODE_TYPE_RAWCODEMEMORYN, nPos++);
- // Mem2
- hLastItem = InsertTreeItem(_T("Memory2: 0x00000000"), hMemoryItem, hLastItem);
- AddTreeNode(hLastItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory2: 0x"), _T("00000000"), NODE_TYPE_RAWCODEMEMORYN, nPos++);
- // Mem3
- hLastItem = InsertTreeItem(_T("Memory3: 0x00000000"), hMemoryItem, hLastItem);
- AddTreeNode(hLastItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory3: 0x"), _T("00000000"), NODE_TYPE_RAWCODEMEMORYN, nPos++);
- // Mem4
- hLastItem = InsertTreeItem(_T("Memory4: 0x00000000"), hMemoryItem, hLastItem);
- AddTreeNode(hLastItem, 8, _T("0123456789ABCDEFabcdef"), _T(""), _T("Memory4: 0x"), _T("00000000"), NODE_TYPE_RAWCODEMEMORYN, nPos++);
- // m_treeRawCode.Expand(hTreeItem, TVE_EXPAND);
- hTreeItem = m_treeRawCode.GetChildItem(hTreeItem);
- m_treeRawCode.EnsureVisible(hTreeItem);
- m_treeRawCode.EditLabel(hTreeItem);
- }
- UpdateClassCodeCount();
- }
- void CMainDlg::ShowContextMenu(POINT& point)
- {
- CMenuHandle menu;
- menu.LoadMenu(IDR_CONTEXTMENU);
- menu = menu.GetSubMenu(0);
- if(m_treeRawCode.GetCount() <= 0)
- {
- MENUITEMINFO mii;
- SCM_String strMenuItem;
- ZeroMemory(&mii, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask |= MIIM_STRING;
- mii.dwTypeData = _T("Create a New Raw Code File");
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_INSERT, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_INSERT, MF_ENABLED);
- menu.TrackPopupMenu(TPM_VERTICAL, point.x, point.y, m_hWnd);
- return;
- }
- int n = GetTreeNodeIndex(m_treeRawCode.GetSelectedItem());
- MENUITEMINFO mii;
- SCM_String strMenuItem;
- if(n != -1)
- {
- switch(m_vTreeNode[n].nType)
- {
- case NODE_TYPE_FILENAME:
- ZeroMemory(&mii, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask |= MIIM_STRING;
- mii.dwTypeData = _T("Insert New Raw Code Class");
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_INSERT, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_INSERT, MF_ENABLED);
- mii.fMask |= MIIM_STRING;
- strMenuItem = _T("Clean This Raw Code File?");
- mii.dwTypeData = (LPTSTR)(strMenuItem.c_str());
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_DELETE, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_DELETE, MF_ENABLED);
- break;
- case NODE_TYPE_GAMEINFO:
- ZeroMemory(&mii, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask |= MIIM_STRING;
- mii.dwTypeData = _T("Insert New Raw Code Class");
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_INSERT, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_INSERT, MF_ENABLED);
- mii.fMask |= MIIM_STRING;
- strMenuItem = _T("Clean This Raw Code File?");
- mii.dwTypeData = (LPTSTR)(strMenuItem.c_str());
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_DELETE, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_DELETE, MF_ENABLED);
- break;
- case NODE_TYPE_CLASSNAME:
- ZeroMemory(&mii, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask |= MIIM_STRING;
- strMenuItem = _T("Insert New Raw Code Under Class: "") + SCM_String(m_vTreeNode[n].szValue) + _T(""");
- mii.dwTypeData = (LPTSTR)(strMenuItem.c_str());
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_INSERT, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_INSERT, MF_ENABLED);
- mii.fMask |= MIIM_STRING;
- strMenuItem = _T("Delete Class: "") + SCM_String(m_vTreeNode[n].szValue) + _T(""?");
- mii.dwTypeData = (LPTSTR)(strMenuItem.c_str());
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_DELETE, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_DELETE, MF_ENABLED);
- // if(m_treeRawCode.GetNextSiblingItem(m_treeRawCode.GetSelectedItem()) != NULL)
- // menu.EnableMenuItem(ID_CONTEXT_MOVEDOWN, MF_ENABLED);
- // if((m_treeRawCode.GetPrevSiblingItem(m_treeRawCode.GetSelectedItem()) != NULL) &&
- // (m_treeRawCode.GetPrevSiblingItem(m_treeRawCode.GetSelectedItem())) != m_treeRawCode.GetNextSiblingItem(m_treeRawCode.GetChildItem(m_hRoot)))
- // menu.EnableMenuItem(ID_CONTEXT_MOVEUP, MF_ENABLED);
- break;
- case NODE_TYPE_RAWCODENUMBER:
- ZeroMemory(&mii, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask |= MIIM_STRING;
- strMenuItem = _T("Delete Raw Code: "") + SCM_String(m_vTreeNode[n].szValue) + _T(""?");
- mii.dwTypeData = (LPTSTR)(strMenuItem.c_str());
- mii.cch = _tcslen(mii.dwTypeData) + 1;
- menu.SetMenuItemInfo(ID_CONTEXT_DELETE, FALSE, &mii);
- menu.EnableMenuItem(ID_CONTEXT_DELETE, MF_ENABLED);
- if(m_treeRawCode.GetNextSiblingItem(m_treeRawCode.GetSelectedItem()) != NULL)
- menu.EnableMenuItem(ID_CONTEXT_MOVEDOWN, MF_ENABLED);
- if(m_treeRawCode.GetPrevSiblingItem(m_treeRawCode.GetSelectedItem()) != NULL)
- menu.EnableMenuItem(ID_CONTEXT_MOVEUP, MF_ENABLED);
- break;
- }
- }
- menu.TrackPopupMenu(TPM_VERTICAL, point.x, point.y, m_hWnd);
- }
- LRESULT CMainDlg::OnNMRclickRawcodeTree(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
- {
- // TODO: Add your control notification handler code here
- POINT point;
- if(m_treeRawCode.GetSelectedItem())
- {
- GetCursorPos(&point);
- ScreenToClient(&point);
- RECT rect;
- ::GetWindowRect(m_treeRawCode.m_hWnd, &rect);
- RECT rect2;
- ::GetWindowRect(m_hWnd, &rect2);
- point.x = point.x - (rect.left - rect2.left);
- point.y = point.y - (rect.top - rect2.top) + GetSystemMetrics(SM_CYCAPTION) + 1;
- UINT uFlag;
- HTREEITEM h1 = m_treeRawCode.HitTest(point, &uFlag);
- if(h1 == NULL)
- return 0;
- if(!m_treeRawCode.SelectItem(h1))
- return 0;
- }
- GetCursorPos(&point);
- ShowContextMenu(point);
- return 0;
- }
- LRESULT CMainDlg::OnContextInsert(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your command handler code here
- if(m_treeRawCode.GetCount() <= 0)
- {
- AddItem(NULL);
- m_treeRawCode.SetFocus();
- m_treeRawCode.Expand(m_hRoot);
- }
- else
- {
- if((m_nCodeCount >= 500) || (m_nClassCount >= 50))
- MessageBox(_T("One file only can contain 50 Classes and 500 Raw Codes!"));
- int nType = m_vTreeNode[GetTreeNodeIndex(m_treeRawCode.GetSelectedItem())].nType;
- if(nType == NODE_TYPE_FILENAME || nType == NODE_TYPE_GAMEINFO || nType == NODE_TYPE_CLASSNAME)
- {
- AddItem(m_treeRawCode.GetSelectedItem());
- }
- }
- return 0;
- }
- LRESULT CMainDlg::OnContextDelete(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your command handler code here
- int nType = m_vTreeNode[GetTreeNodeIndex(m_treeRawCode.GetSelectedItem())].nType;
- if(nType == NODE_TYPE_FILENAME || nType == NODE_TYPE_GAMEINFO)
- {
- HTREEITEM hChildItem = m_treeRawCode.GetChildItem(m_hRoot);
- HTREEITEM hNextItem;
- while(hChildItem != NULL)
- {
- if(m_vTreeNode[GetTreeNodeIndex(hChildItem)].nType != NODE_TYPE_GAMEINFO)
- {
- hNextItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- DeleteItemAndChild(hChildItem);
- hChildItem = hNextItem;
- }
- else
- hChildItem = m_treeRawCode.GetNextSiblingItem(hChildItem);
- }
- }
- else if(nType == NODE_TYPE_CLASSNAME || nType == NODE_TYPE_RAWCODENUMBER)
- {
- DeleteItemAndChild(m_treeRawCode.GetSelectedItem());
- }
- return 0;
- }
- LRESULT CMainDlg::OnContextMoveUp(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your command handler code here
- HTREEITEM hTreeItem = m_treeRawCode.GetSelectedItem();
- HTREEITEM hParent = m_treeRawCode.GetParentItem(hTreeItem);
- HTREEITEM hAfter = m_treeRawCode.GetPrevSiblingItem(m_treeRawCode.GetPrevSiblingItem(hTreeItem));
- if(hAfter == NULL)
- hAfter = TVI_FIRST;
- BOOL bExpanded = FALSE;
- if(m_treeRawCode.GetItemState(hTreeItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- hTreeItem = MoveNode(hTreeItem, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- return 0;
- }
- LRESULT CMainDlg::OnContextMoveDown(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your command handler code here
- HTREEITEM hTreeItem = m_treeRawCode.GetSelectedItem();
- HTREEITEM hParent = m_treeRawCode.GetParentItem(hTreeItem);
- HTREEITEM hAfter = m_treeRawCode.GetNextSiblingItem(hTreeItem);
- BOOL bExpanded = FALSE;
- if(m_treeRawCode.GetItemState(hTreeItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- hTreeItem = MoveNode(hTreeItem, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- return 0;
- }
- LRESULT CMainDlg::OnMoveUp(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- HTREEITEM hTreeItem;
- HTREEITEM hParent;
- HTREEITEM hAfter;
- BOOL bExpanded = FALSE;
- hTreeItem = m_treeRawCode.GetSelectedItem();
- if(hTreeItem == NULL)
- return FALSE;
- if(m_vTreeNode[GetTreeNodeIndex(hTreeItem)].nType != NODE_TYPE_RAWCODENUMBER)
- return FALSE;
- if(m_treeRawCode.GetPrevSiblingItem(hTreeItem) == NULL)
- return FALSE;
- hParent = m_treeRawCode.GetParentItem(hTreeItem);
- hAfter = m_treeRawCode.GetPrevSiblingItem(m_treeRawCode.GetPrevSiblingItem(hTreeItem));
- if(m_treeRawCode.GetItemState(hTreeItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- if(hAfter == NULL)
- hAfter = TVI_FIRST;
- hTreeItem = MoveNode(hTreeItem, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- return TRUE;
- }
- LRESULT CMainDlg::OnMoveDown(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- HTREEITEM hTreeItem;
- HTREEITEM hParent;
- HTREEITEM hAfter;
- BOOL bExpanded = FALSE;
- hTreeItem = m_treeRawCode.GetSelectedItem();
- if(hTreeItem == NULL)
- return FALSE;
- if(m_vTreeNode[GetTreeNodeIndex(hTreeItem)].nType != NODE_TYPE_RAWCODENUMBER)
- return FALSE;
- if(m_treeRawCode.GetNextSiblingItem(hTreeItem) == NULL)
- return FALSE;
- hParent = m_treeRawCode.GetParentItem(hTreeItem);
- hAfter = m_treeRawCode.GetNextSiblingItem(hTreeItem);
- if(m_treeRawCode.GetItemState(hTreeItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- hTreeItem = MoveNode(hTreeItem, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- return TRUE;
- }
- LRESULT CMainDlg::OnRebuildNumber(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- RebuildCodeNumber();
- return TRUE;
- }
- void CMainDlg::OnHotKey_Tree(int nHotKeyID, UINT uModifiers, UINT uVirtKey)
- {
- HTREEITEM hTreeItem;
- HTREEITEM hParent;
- HTREEITEM hAfter;
- BOOL bExpanded = FALSE;
- switch(nHotKeyID)
- {
- case ID_ACCELERATOR_MOVEUP:
- hTreeItem = m_treeRawCode.GetSelectedItem();
- if(m_vTreeNode[GetTreeNodeIndex(hTreeItem)].nType != NODE_TYPE_RAWCODENUMBER)
- return;
- if(m_treeRawCode.GetPrevSiblingItem(hTreeItem) == NULL)
- return;
- hParent = m_treeRawCode.GetParentItem(hTreeItem);
- hAfter = m_treeRawCode.GetPrevSiblingItem(m_treeRawCode.GetPrevSiblingItem(hTreeItem));
- if(m_treeRawCode.GetItemState(hTreeItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- if(hAfter == NULL)
- hAfter = TVI_FIRST;
- hTreeItem = MoveNode(hTreeItem, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- break;
- case ID_ACCELERATOR_MOVEDOWN:
- hTreeItem = m_treeRawCode.GetSelectedItem();
- if(m_vTreeNode[GetTreeNodeIndex(hTreeItem)].nType != NODE_TYPE_RAWCODENUMBER)
- return;
- if(m_treeRawCode.GetNextSiblingItem(hTreeItem) == NULL)
- return;
- hParent = m_treeRawCode.GetParentItem(hTreeItem);
- hAfter = m_treeRawCode.GetNextSiblingItem(hTreeItem);
- if(m_treeRawCode.GetItemState(hTreeItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- hTreeItem = MoveNode(hTreeItem, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- break;
- default:
- break;
- }
- }
- LRESULT CMainDlg::OnSave(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your control notification handler code here
- SaveFile(m_strSCMFile.c_str());
- return 0;
- }
- LRESULT CMainDlg::OnSaveas(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add your control notification handler code here
- OPENFILENAME ofn;
- TCHAR szFile[MAX_PATH] = {0};
- TCHAR szInitalDir[MAX_PATH] = {0};
- GetDlgItemText(IDC_FILENAME, szInitalDir, MAX_PATH);
- ZeroMemory(&ofn, sizeof(OPENFILENAME));
- ofn.lStructSize = sizeof(ofn);
- ofn.hwndOwner = m_hWnd;
- ofn.lpstrFile = szFile;
- ofn.lpstrFile[0] = _T('');
- ofn.nMaxFile = sizeof(szFile);
- ofn.lpstrFilter = _T("SCEP CheatMaster 0.7 Raw Code File*.scm");
- ofn.nFilterIndex = 1;
- ofn.lpstrTitle = _T("Please Open a SCEP CheatMaster 0.7 Raw Code File");
- ofn.lpstrInitialDir = szInitalDir;
- ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
- if(TRUE == GetOpenFileName(&ofn))
- {
- m_strSCMFile = SCM_String(ofn.lpstrFile);
- SetDlgItemText(IDC_FILENAME, m_strSCMFile.c_str());
- m_treeRawCode.SetItemText(m_hRoot, m_strSCMFile.c_str());
- _tcscpy(m_vTreeNode[GetTreeNodeIndex(m_hRoot)].szValue, m_strSCMFile.c_str());
- SaveFile(SCM_String(ofn.lpstrFile).c_str());
- GetDlgItem(IDC_SAVE).EnableWindow(1);
- }
- return 0;
- }
- void CMainDlg::SaveFile(LPCTSTR lpszFileName)
- {
- HANDLE hFile = CreateFile(lpszFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- DWORD dwWrite;
- char szLine[200] = {0};
- char szTemp[50] = {0};
- BOOL bWrite;
- int nLength;
- for(int i = 0; i < m_vTreeNode.size(); i++)
- {
- bWrite = FALSE;
- switch(m_vTreeNode[i].nType)
- {
- // case NODE_TYPE_FILENAME:
- // case NODE_TYPE_RAWCODENUMBER:
- // case NODE_TYPE_RAWCODEMEMORY:
- // bWrite = FALSE;
- // break;
- case NODE_TYPE_GAMEINFO:
- bWrite = TRUE;
- ZeroMemory(szLine, sizeof(szLine));
- strcpy(szLine, ws2s(m_vTreeNode[i++].szValue).c_str());
- strcat(szLine, "n");
- strcat(szLine, ws2s(m_vTreeNode[i].szValue).c_str());
- strcat(szLine, "n$STARTn");
- break;
- case NODE_TYPE_CLASSNAME:
- bWrite = TRUE;
- ZeroMemory(szLine, sizeof(szLine));
- strcpy(szLine, "$");
- strncpy(szTemp, ws2s(m_vTreeNode[i].szValue).c_str(), 19);
- strcat(szLine, szTemp);
- nLength = strlen(szTemp);
- if(nLength < 19)
- strncat(szLine, " ", 19-nLength);
- strcat(szLine, "{n");
- break;
- case NODE_TYPE_RAWCODENAME:
- ZeroMemory(szLine, sizeof(szLine));
- strcpy(szLine, "$");
- strncpy(szTemp, ws2s(m_vTreeNode[i].szValue).c_str(), 9);
- strcat(szLine, szTemp);
- nLength = strlen(szTemp);
- if(nLength < 9)
- strncat(szLine, " ", 9-nLength);
- strcat(szLine, " ");
- break;
- case NODE_TYPE_RAWCODESTAT:
- strcat(szLine, "$");
- strcat(szLine, ws2s(m_vTreeNode[i].szValue).c_str());
- nLength = strlen(szTemp);
- if(nLength < 1)
- strcat(szLine, "0");
- strcat(szLine, " $(");
- break;
- case NODE_TYPE_RAWCODEMEMORYN:
- strcat(szLine, ws2s(m_vTreeNode[i].szValue).c_str());
- if(i != m_vTreeNode.size()-1)
- {
- if(m_vTreeNode[i+1].nType == NODE_TYPE_RAWCODEMEMORYN)
- strcat(szLine, " ");
- else if(m_vTreeNode[i+1].nType == NODE_TYPE_RAWCODENUMBER)
- {
- strcat(szLine, ")n");
- bWrite = TRUE;
- }
- else
- {
- strcat(szLine, ")}nn");
- bWrite = TRUE;
- }
- }
- else
- {
- strcat(szLine, ")}nn");
- bWrite = TRUE;
- }
- break;
- default:
- break;
- }
- if(bWrite)
- {
- dwWrite = strlen(szLine);
- WriteFile(hFile, szLine, dwWrite, &dwWrite, NULL);
- }
- }
- CloseHandle(hFile);
- }
- LRESULT CMainDlg::OnBeginDrag(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& bHandled)
- {
- LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
- // TODO: Add your control notification handler code here
- bHandled = FALSE;
- //如果是无意拖曳,则放弃操作
- if((GetTickCount() - m_dwDragStart) < DRAG_DELAY)
- return FALSE;
- POINT point;
- point.x = pNMTreeView->ptDrag.x;
- point.y = pNMTreeView->ptDrag.y;
- UINT uFlag;
- HTREEITEM h1 = m_treeRawCode.HitTest(point, &uFlag);
- if(h1 == NULL)
- return FALSE;
- if(!m_treeRawCode.SelectItem(h1))
- return FALSE;
- if(m_vTreeNode[GetTreeNodeIndex(h1)].nType != NODE_TYPE_RAWCODENUMBER)
- return FALSE;
- m_hItemDragS = pNMTreeView->itemNew.hItem;
- m_hItemDragD = NULL;
- //得到用于拖动时显示的图象列表
- m_pDragImage = m_treeRawCode.CreateDragImage(m_hItemDragS);
- if(!m_pDragImage)
- return FALSE;
- m_bDragging = true;
- m_pDragImage.BeginDrag(0, CPoint(8,8));
- CPoint pt = pNMTreeView->ptDrag;
- ClientToScreen(&pt);
- m_pDragImage.DragEnter(m_treeRawCode.m_hWnd, pt); //"this"将拖曳动作限制在该窗口
- // SetCapture();
- m_nScrollTimerID = SetTimer(2, 40, NULL);
- return TRUE;
- }
- void CMainDlg::OnMouseMove_Tree(UINT nFlags, CPoint point)
- {
- HTREEITEM hItem;
- UINT flags;
- //检测鼠标敏感定时器是否存在,如果存在则删除,删除后再定时
- if(m_nHoverTimerID)
- {
- KillTimer(m_nHoverTimerID);
- m_nHoverTimerID = 0;
- }
- m_nHoverTimerID = SetTimer(1, 800, NULL); //定时为 0.8 秒则自动展开
- m_HoverPoint = point;
- if(m_bDragging)
- {
- CPoint pt = point;
- CImageList::DragMove(pt);
- //鼠标经过时高亮显示
- CImageList::DragShowNolock(false); //避免鼠标经过时留下难看的痕迹
- if((hItem = m_treeRawCode.HitTest(point, &flags)) != NULL)
- {
- // m_treeRawCode.SelectDropTarget(hItem);
- m_hItemDragD = hItem;
- RECT rect;
- switch(m_vTreeNode[GetTreeNodeIndex(hItem)].nType)
- {
- case NODE_TYPE_RAWCODENUMBER:
- if(m_treeRawCode.GetItemRect(hItem, &rect, FALSE))
- {
- if(pt.y >= (rect.top + (rect.bottom - rect.top)/2))
- {
- pt.y = rect.bottom;
- m_bInsertUp = FALSE;
- }
- else
- {
- m_bInsertUp = TRUE;
- pt.y = rect.top;
- }
- if(m_nOldY != pt.y)
- {
- m_treeRawCode.GetClientRect(&rect);
- m_treeRawCode.InvalidateRect(&rect, TRUE);
- m_treeRawCode.UpdateWindow();
- DrawSplitLine(rect.left, pt.y, rect.right, pt.y);
- }
- }
- break;
- case NODE_TYPE_CLASSNAME:
- if(m_treeRawCode.GetItemRect(hItem, &rect, TRUE))
- {
- pt.x = rect.right;
- pt.y = rect.top + (rect.bottom - rect.top)/2;
- if(m_nOldY != pt.y)
- {
- m_treeRawCode.GetClientRect(&rect);
- m_treeRawCode.InvalidateRect(&rect, TRUE);
- m_treeRawCode.UpdateWindow();
- DrawInsertPoint(pt.x, pt.y);
- }
- }
- break;
- default:
- break;
- }
- }
- CImageList::DragShowNolock(true);
- // //当条目被拖曳到左边缘时,将条目放在根下
- // CRect rect;
- // GetClientRect(&rect);
- // if( point.x < rect.left + 20 )
- // m_hItemDragD = NULL;
- }
- // else
- // {
- // if((hItem = m_treeRawCode.HitTest(point, &flags)) != NULL)
- // {
- // int n = GetTreeNodeIndex(hItem);
- // if(m_vTreeNode[n].nType == NODE_TYPE_RAWCODEMEMORY)
- // {
- // SCM_String strMemoryInfo = ParseMemoryInfo(m_vTreeNode[n+1].szValue, m_vTreeNode[n+2].szValue, m_vTreeNode[n+3].szValue, m_vTreeNode[n+4].szValue);
- //
- // RECT rect;
- // m_treeRawCode.GetItemRect(hItem, &rect, TRUE);
- //
- // POINT pt;
- // TRACKMOUSEEVENT tk;
- // tk.cbSize = sizeof(tk);
- // tk.dwFlags = TME_LEAVE;
- // tk.dwHoverTime = 0;
- // tk.hwndTrack = m_treeRawCode.m_hWnd;
- // _TrackMouseEvent(&tk);
- // pt.x = rect.left - 3;
- // pt.y = rect.top - 2;
- // ClientToScreen(&pt);
- // m_tooltip.TrackPosition(pt.x, pt.y);
- // m_tooltip.TrackActivate(&m_ti, TRUE);
- //
- // // m_tooltip.Up
- // // m_tooltip.UpdateTipText(strMemoryInfo.c_str(), m_treeRawCode.m_hWnd);
- // // m_tooltip.RelayEvent(pMsg);
- // // m_tooltip = m_treeRawCode.GetToolTips();
- // // TOOLINFO toolInfo;
- // // toolInfo.cbSize = sizeof(TOOLINFO);
- // // RECT rect;
- // // rect.left = point.x;
- // // rect.top = point.y;
- // // rect.right = point.x + 100;
- // // rect.bottom = point.y + 50;
- // // toolInfo.rect = rect;
- // // toolInfo.hwnd = m_treeRawCode.m_hWnd;
- // // toolInfo.lpszText = (LPTSTR)strMemoryInfo.c_str();
- // // m_tooltip.SetToolInfo(&toolInfo);
- // // m_treeRawCode.SetToolTips(m_tooltip.m_hWnd);
- // }
- // }
- // }
- SetMsgHandled(FALSE);
- }
- void CMainDlg::OnLButtonUp_Tree(UINT nFlags, CPoint point)
- {
- SetMsgHandled(FALSE);
- if(m_bDragging)
- {
- m_bDragging = FALSE;
- CImageList::DragLeave(m_treeRawCode.m_hWnd);
- CImageList::EndDrag();
- RECT rect;
- m_treeRawCode.GetClientRect(&rect);
- m_treeRawCode.InvalidateRect(&rect, TRUE);
- m_treeRawCode.UpdateWindow();
- m_treeRawCode.SelectDropTarget(NULL);
- if(m_hItemDragS == m_hItemDragD)
- {
- KillTimer(m_nScrollTimerID);
- return;
- }
- int nType = m_vTreeNode[GetTreeNodeIndex(m_hItemDragD)].nType;
- if((nType != NODE_TYPE_RAWCODENUMBER) && (nType != NODE_TYPE_CLASSNAME))
- {
- KillTimer(m_nScrollTimerID);
- return;
- }
- HTREEITEM hParent;
- HTREEITEM hAfter;
- if(nType == NODE_TYPE_CLASSNAME)
- {
- m_treeRawCode.Expand(m_hItemDragD, TVE_EXPAND);
- hParent = m_hItemDragD;
- hAfter = m_hItemDragD;
- if(m_treeRawCode.ItemHasChildren(m_hItemDragD))
- {
- hAfter = TVI_LAST;
- }
- }
- else
- {
- hParent = m_treeRawCode.GetParentItem(m_hItemDragD);
- if(m_bInsertUp) //Up
- {
- if(m_hItemDragD == m_treeRawCode.GetChildItem(hParent)) // First Child
- hAfter = TVI_FIRST;
- else
- hAfter = m_treeRawCode.GetPrevSiblingItem(m_hItemDragD);
- }
- else
- hAfter = m_hItemDragD;
- }
- BOOL bExpanded = FALSE;
- if(m_treeRawCode.GetItemState(m_hItemDragS, TVIS_EXPANDED) == TVIS_EXPANDED)
- bExpanded = TRUE;
- HTREEITEM hTreeItem = MoveNode(m_hItemDragS, hParent, hAfter);
- m_treeRawCode.SelectItem(hTreeItem);
- if(bExpanded)
- m_treeRawCode.Expand(hTreeItem);
- KillTimer(m_nScrollTimerID);
- }
- }
- void CMainDlg::OnLButtonDown_Tree(UINT nFlags, CPoint point)
- {
- if(nFlags & 0x8000)
- m_dwDragStart = GetTickCount();
- else
- {
- m_bShouldTrigger = TRUE;
- SetTimer(MOUSE_DOUBLE_CLICK_TIMER, GetDoubleClickTime(), 0);
- }
- UINT flags;
- HTREEITEM hItem = m_treeRawCode.HitTest(point, &flags);
- if(hItem != NULL)
- {
- if((flags&TVHT_ONITEMBUTTON) == TVHT_ONITEMBUTTON)
- {
- if(m_treeRawCode.GetItemState(hItem, TVIS_EXPANDED) == TVIS_EXPANDED)
- m_treeRawCode.Expand(hItem, TVE_EXPAND);
- else
- m_treeRawCode.Expand(hItem, TVE_COLLAPSE);
- }
- else
- {
- int n = GetTreeNodeIndex(hItem);
- if(n != -1)
- {
- if( (m_vTreeNode[n].nType == NODE_TYPE_FILENAME) ||
- (m_vTreeNode[n].nType == NODE_TYPE_RAWCODENUMBER) ||
- (m_vTreeNode[n].nType == NODE_TYPE_RAWCODEMEMORY))
- {
- m_treeRawCode.SelectItem(hItem);
- return;
- }
- }
- }
- }
- SetMsgHandled(FALSE);
- }
- LRESULT CMainDlg::OnTimer_Tree(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
- {
- //鼠标敏感节点
- UINT nIDEvent = (UINT)wParam;
- if(nIDEvent == MOUSE_DOUBLE_CLICK_TIMER)
- {
- KillTimer(MOUSE_DOUBLE_CLICK_TIMER);
- if(m_bShouldTrigger)
- PostMessage(WM_LBUTTONDOWN, MK_LBUTTON | 0x8000 , 0);
- }
- else if(nIDEvent == m_nHoverTimerID)
- {
- KillTimer(m_nHoverTimerID);
- m_nHoverTimerID = 0;
- HTREEITEM trItem = 0;
- UINT uFlag = 0;
- trItem = m_treeRawCode.HitTest(m_HoverPoint, &uFlag);
- if(trItem && m_bDragging && (m_vTreeNode[GetTreeNodeIndex(trItem)].nType == NODE_TYPE_CLASSNAME))
- {
- // m_treeRawCode.SelectItem(trItem);
- m_treeRawCode.Expand(trItem, TVE_EXPAND);
- }
- }
- //处理拖曳过程中的滚动问题
- else if(nIDEvent == m_nScrollTimerID)
- {
- m_TimerTicks++;
- CPoint pt;
- GetCursorPos(&pt);
- CRect rect;
- GetClientRect(&rect);
- ClientToScreen(&rect);
- HTREEITEM hItem = m_treeRawCode.GetFirstVisibleItem();
- if(pt.y < rect.top +10)
- {
- //向上滚动
- int slowscroll = 6 - (rect.top + 10 - pt.y)/20;
- if( 0 == (m_TimerTicks % ((slowscroll > 0) ? slowscroll : 1)))
- {
- CImageList::DragShowNolock (false);
- SendMessage(m_treeRawCode.m_hWnd, WM_VSCROLL, SB_LINEUP, NULL);
- m_treeRawCode.SelectDropTarget(hItem);
- m_hItemDragD = hItem;
- CImageList::DragShowNolock (true);
- }
- }
- else if(pt.y > rect.bottom - 10)
- {
- //向下滚动
- int slowscroll = 6 - (pt.y - rect.bottom + 10)/20;
- if( 0 == (m_TimerTicks % ((slowscroll > 0) ? slowscroll : 1)))
- {
- CImageList::DragShowNolock (false);
- SendMessage(m_treeRawCode.m_hWnd, WM_VSCROLL, SB_LINEDOWN, NULL);
- int nCount = m_treeRawCode.GetVisibleCount();
- for(int i = 0; i < nCount - 1; i ++)
- hItem = m_treeRawCode.GetNextVisibleItem(hItem);
- if(hItem)
- m_treeRawCode.SelectDropTarget(hItem);
- m_hItemDragD = hItem;
- CImageList::DragShowNolock (true);
- }
- }
- }
- else
- SetMsgHandled(FALSE);
- return TRUE;
- }
- void CMainDlg::DrawSplitLine(int nStart_x, int nStart_y, int nEnd_x, int nEnd_y)
- {
- HDC hTreeDC = ::GetDC(m_treeRawCode.m_hWnd);
- Graphics g(hTreeDC);
- SolidBrush BlackBrush(Color(255, 0, 0, 0));
- Pen blackPen(&BlackBrush, 2);
- nEnd_x -= 5;
- nStart_x += 1;
- Point LPoints[4] = {Point(nStart_x, nStart_y-5), Point(nStart_x+4, nStart_y), Point(nStart_x+4, nStart_y-1), Point(nStart_x, nStart_y+4)};
- Point RPoints[4] = {Point(nEnd_x, nEnd_y-6), Point(nEnd_x-5, nEnd_y), Point(nEnd_x-5, nEnd_y-1), Point(nEnd_x, nEnd_y+5)};
- g.FillPolygon(&BlackBrush, LPoints, 4);
- g.FillPolygon(&BlackBrush, RPoints, 4);
- g.DrawLine(&blackPen, Point(nStart_x+2, nStart_y), Point(nEnd_x-2, nEnd_y));
- m_nOldY = nEnd_y;
- }
- void CMainDlg::DrawInsertPoint(int nPoint_x, int nPoint_y)
- {
- HDC hTreeDC = ::GetDC(m_treeRawCode.m_hWnd);
- Graphics g(hTreeDC);
- SolidBrush BlackBrush(Color(255, 0, 0, 0));
- nPoint_x += 2;
- Point Points[3] = {Point(nPoint_x, nPoint_y), Point(nPoint_x+5, nPoint_y+5), Point(nPoint_x+5, nPoint_y-5)};
- g.FillPolygon(&BlackBrush, Points, 3);
- m_nOldY = nPoint_y;
- }
- HTREEITEM CMainDlg::MoveNode(HTREEITEM hNodeS, HTREEITEM hNodeDParent, HTREEITEM hNodeDAfter)
- {
- int n = GetTreeNodeIndex(hNodeS);
- std::vector <TreeNode> vTreeNode;
- vTreeNode.assign(m_vTreeNode.begin() + n, m_vTreeNode.begin() + n + 8);
- DeleteItemAndChild(hNodeS, TRUE);
- HTREEITEM hMoveTo;
- HTREEITEM hTreeItem;
- if(hNodeDAfter == TVI_FIRST)
- n = GetTreeNodeIndex(hNodeDParent) + 1;
- else if(hNodeDAfter == TVI_LAST)
- {
- hTreeItem = m_treeRawCode.GetNextSiblingItem(hNodeDParent);
- if(hTreeItem == NULL)
- n = m_vTreeNode.size();
- else
- n = GetTreeNodeIndex(hTreeItem);
- }
- else
- n = GetTreeNodeIndex(hNodeDAfter) + 8;
- m_vTreeNode.insert(m_vTreeNode.begin() + n, vTreeNode.begin(), vTreeNode.end());
- HTREEITEM hParent;
- SCM_String string;
- // CodeItem
- string = SCM_String(vTreeNode[0].szFront) + SCM_String(vTreeNode[0].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hNodeDParent, hNodeDAfter);
- hParent = hTreeItem;
- hMoveTo = hTreeItem;
- m_vTreeNode[n++].hItem = hTreeItem;
- // CodeName
- string = SCM_String(vTreeNode[1].szFront) + SCM_String(vTreeNode[1].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- m_vTreeNode[n++].hItem = hTreeItem;
- // ItemStat
- string = SCM_String(vTreeNode[2].szFront);
- switch(_ttoi(vTreeNode[2].szValue))
- {
- case 0:
- string += SCM_String(_T("Disable"));
- break;
- case 1:
- string += SCM_String(_T("Enable"));
- break;
- case 2:
- string += SCM_String(_T("Lock"));
- break;
- default:
- string += SCM_String(_T("Unknown"));
- break;
- }
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- m_vTreeNode[n++].hItem = hTreeItem;
- // MemTitle
- string = SCM_String(vTreeNode[3].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- hParent = hTreeItem;
- m_vTreeNode[n++].hItem = hTreeItem;
- // Mem1
- string = SCM_String(vTreeNode[4].szFront) + SCM_String(vTreeNode[4].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- m_vTreeNode[n++].hItem = hTreeItem;
- // Mem2
- string = SCM_String(vTreeNode[5].szFront) + SCM_String(vTreeNode[5].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- m_vTreeNode[n++].hItem = hTreeItem;
- // Mem3
- string = SCM_String(vTreeNode[6].szFront) + SCM_String(vTreeNode[6].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- m_vTreeNode[n++].hItem = hTreeItem;
- // Mem4
- string = SCM_String(vTreeNode[7].szFront) + SCM_String(vTreeNode[7].szValue);
- hTreeItem = InsertTreeItem(string.c_str(), hParent, hTreeItem);
- m_vTreeNode[n++].hItem = hTreeItem;
- // RebuildCodeNumber();
- return hMoveTo;
- }
- void CMainDlg::RebuildCodeNumber()
- {
- // Get First Class
- HTREEITEM hClassName = m_treeRawCode.GetNextSiblingItem(m_treeRawCode.GetNextSiblingItem(m_treeRawCode.GetChildItem(m_hRoot)));
- HTREEITEM hCodeNumber;
- int i;
- int n;
- TCHAR szNumber[5] = {0};
- TCHAR szString[50] = {0};
- while(hClassName != NULL)
- {
- if(m_treeRawCode.ItemHasChildren(hClassName))
- {
- i = 1;
- hCodeNumber = m_treeRawCode.GetChildItem(hClassName);
- while (hCodeNumber != NULL)
- {
- _itot(i++, szNumber, 10);
- n = GetTreeNodeIndex(hCodeNumber);
- _tcscpy(m_vTreeNode[n].szValue, szNumber);
- _tcscpy(szString, m_vTreeNode[n].szFront);
- _tcscat(szString, szNumber);
- m_treeRawCode.SetItemText(hCodeNumber, szString);
- hCodeNumber = m_treeRawCode.GetNextSiblingItem(hCodeNumber);
- }
- }
- hClassName = m_treeRawCode.GetNextSiblingItem(hClassName);
- }
- }
- void CMainDlg::UpdateClassCodeCount()
- {
- TCHAR szTemp[100] = {0};
- TCHAR szNumber[5] = {0};
- _tcscpy(szTemp, _T("Class Number: "));
- _itot(m_nClassCount, szNumber, 10);
- _tcscat(szTemp, szNumber);
- _tcscat(szTemp, _T("/50"));
- SetDlgItemText(IDC_CLASS_COUNT, szTemp);
- _tcscpy(szTemp, _T("Code Number: "));
- _itot(m_nCodeCount, szNumber, 10);
- _tcscat(szTemp, szNumber);
- _tcscat(szTemp, _T("/500"));
- SetDlgItemText(IDC_CODE_COUNT, szTemp);
- }