⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 san9editdlg.cpp

📁 三国志IX武将编辑器
💻 CPP
字号:
// San9EditDlg.cpp : implementation file
//

#include "stdafx.h"
#include "San9Edit.h"
#include "San9EditDlg.h"
#include "folder.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSan9EditDlg dialog

CSan9EditDlg::CSan9EditDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSan9EditDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSan9EditDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSan9EditDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSan9EditDlg)
	DDX_Control(pDX, IDC_LIST, m_list);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSan9EditDlg, CDialog)
	//{{AFX_MSG_MAP(CSan9EditDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(IDC_OPEN, OnOpen)
	ON_COMMAND(IDC_EXIT, OnExit)
	ON_COMMAND(IDC_ABOUT, OnAbout)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	ON_WM_DESTROY()
	ON_COMMAND(IDC_UPDATE, OnUpdate)
	ON_COMMAND(IDC_HTTP, OnHttp)
	ON_COMMAND(IDC_EMAIL, OnEmail)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSan9EditDlg message handlers

BOOL CSan9EditDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
    m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_list.InsertColumn(0,"姓名",LVCFMT_LEFT,65);
	m_list.InsertColumn(1,"性别",LVCFMT_LEFT,40);
	m_list.InsertColumn(2,"出生",LVCFMT_LEFT,50);
	m_list.InsertColumn(3,"统率",LVCFMT_LEFT,50);
    m_list.InsertColumn(4,"武力",LVCFMT_LEFT,50);
	m_list.InsertColumn(5,"智力",LVCFMT_LEFT,50);
	m_list.InsertColumn(6,"政治",LVCFMT_LEFT,50);
	m_list.InsertColumn(7,"性格",LVCFMT_LEFT,50);
    m_list.InsertColumn(8,"信念",LVCFMT_LEFT,50);
	m_list.InsertColumn(9,"文件名",LVCFMT_LEFT,0);
    m_list.InsertColumn(10,"武将号",LVCFMT_LEFT,0);

	CGen dlg;
	dlg.m_name=GetInitPath();
	dlg.m_name+="\\D_TPrsn.S9";
 
	if(::GetFileAttributes(dlg.m_name)==-1) return TRUE;
    
	BOOL result=TRUE;
	dlg.m_index=-1;
	while(1)
	{
	    dlg.m_index++;
		if(dlg.ReadBuffer())
		{
		dlg.ReadData();
		InsertItem(dlg.m_data,dlg.m_name,dlg.m_index);
		}
		else break;
	}


	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSan9EditDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSan9EditDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CSan9EditDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

CString CSan9EditDlg::GetInitPath()
{
    char dir[256];
    LPITEMIDLIST pidl;
	::SHGetSpecialFolderLocation(NULL,CSIDL_PERSONAL,&pidl);
    ::SHGetPathFromIDList(pidl,dir);

    CString path=dir;
	if(path[path.GetLength()-1]!='\\') path+="\\";
    path+="Koei\\San9 TC\\TPrsn";

	return path;
}

void CSan9EditDlg::OnOK() 
{
	// TODO: Add extra validation here
	POSITION pos=m_list.GetFirstSelectedItemPosition();
	int index=m_list.GetNextSelectedItem(pos);
	if(index!=-1)
	{
    GetGenCode();
	CGen dlg;
	dlg.m_name=	m_list.GetItemText(index,9);
	dlg.m_index=atoi(m_list.GetItemText(index,10));

	if(dlg.DoModal()==IDOK)//更新列表
	{
	   InsertItem(dlg.m_data,dlg.m_name,dlg.m_index,dlg.m_index);
	}
	}
	else
	{
		MessageBox("您还没选中修改项!");
	}
	//CDialog::OnOK();
}

void CSan9EditDlg::OnOpen() 
{
	// TODO: Add your command handler code here
	    CFileDialog MyFile(TRUE,//Open对话框
		"", //缺省扩展名
		"*.s9;*.s9p",
		OFN_HIDEREADONLY|OFN_FILEMUSTEXIST, //文件必须存在
        "s9 files(*.s9)|*.s9|"
		"s9p files(*.s9p)|*.s9p|",
		this);

		MyFile.m_ofn.lpstrInitialDir=GetInitPath();
   
		if(MyFile.DoModal()==IDOK)
		{
            GetGenCode();
			CGen dlg;
			dlg.m_name=MyFile.GetPathName();

            if(MyFile.GetFileExt().CompareNoCase("s9p")==0)
			{
			    dlg.m_index=0;
				if(dlg.ReadBuffer())
				{
				 dlg.ReadData();
				 InsertItem(dlg.m_data,dlg.m_name);
				}
			}
			else
			{
				dlg.m_index=-1;
				while(1)
				{
					 dlg.m_index++;
					 if(dlg.ReadBuffer())
					 {
						dlg.ReadData();
						InsertItem(dlg.m_data,dlg.m_name,dlg.m_index);
					 }
					 else break;
				}
			}
		}
}

BOOL CSan9EditDlg::GetGenCode()
{
	CGen dlg;
	dlg.m_name=GetInitPath();
	dlg.m_name+="\\D_TPrsn.S9";
 
	if(::GetFileAttributes(dlg.m_name)==-1) return FALSE;
    
	BOOL result=TRUE;
	dlg.m_index=-1;
	GENCODE gencode;
    ((CSan9EditApp*)AfxGetApp())->m_GenCode.DeleteAll();

	int code=700;
	while(1)
	{
	    dlg.m_index++;
		if(dlg.ReadBuffer())
		{
		dlg.ReadData();
		//InsertItem(dlg.m_data,dlg.m_name,dlg.m_index);
        strcpy(gencode.FirstName,dlg.m_data.FirstName);
		strcpy(gencode.SecondName,dlg.m_data.SecondName);
		gencode.Birthday=dlg.m_data.Birthday;
		gencode.photocode=code;
		code++;

		((CSan9EditApp*)AfxGetApp())->m_GenCode.Add(gencode);
		}
		else break;
	}

	return TRUE;
}


void CSan9EditDlg::OnExit() 
{
	// TODO: Add your command handler code here
	EndDialog(0);
}

void CSan9EditDlg::OnAbout() 
{
	// TODO: Add your command handler code here
	CAboutDlg dlg;
	dlg.DoModal();
}

void CSan9EditDlg::InsertItem(GEN gen,CString name,int code,int index)
{
	CString str=gen.FirstName;
	str+=gen.SecondName;
    str.Replace(13,'#');
	str.Replace(10,'#');
	str.Replace("#","");

	if(index==-1)
    index=m_list.InsertItem(m_list.GetItemCount(),str);
	else m_list.SetItemText(index,0,str);

	if(gen.Sex)
	m_list.SetItemText(index,1,"男");
	else
    m_list.SetItemText(index,1,"女");

    str.Format("%d",gen.Birthday);
    m_list.SetItemText(index,2,str);

    str.Format("%d",gen.Basic_Command);
    m_list.SetItemText(index,3,str);

    str.Format("%d",gen.Basic_Force);
    m_list.SetItemText(index,4,str);

    str.Format("%d",gen.Basic_Brains);
    m_list.SetItemText(index,5,str);

    str.Format("%d",gen.Basic_Polity);
    m_list.SetItemText(index,6,str);

	if(gen.Persuasion==1) str="大志";
	else
	if(gen.Persuasion==2) str="忠义";
	else
	if(gen.Persuasion==3) str="临机";
	else
	if(gen.Persuasion==4) str="功名";
	else str="唯我";

    m_list.SetItemText(index,7,str);

	if(gen.Kidney==1) str="莽撞";
	else
	if(gen.Kidney==2) str="刚猛";
	else
	if(gen.Kidney==3) str="冷静";
	else str="慎重";

    m_list.SetItemText(index,8,str);

    m_list.SetItemText(index,9,name);

    str.Format("%d",code);
    m_list.SetItemText(index,10,str);
}

void CSan9EditDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	this->OnOK();

	*pResult = 0;
}


BOOL CSan9EditDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(pMsg->message==WM_KEYDOWN)
	{
		if(pMsg->wParam==VK_ESCAPE || pMsg->wParam==VK_RETURN) return TRUE;
	}

	return CDialog::PreTranslateMessage(pMsg);
}

void CSan9EditDlg::OnAdd() 
{
	// TODO: Add your control notification handler code here
	CString name;
	
	name=GetInitPath();
	name+="\\D_TPrsn.S9";
 
	if(::GetFileAttributes(name)==-1)
	{
		MessageBox("武将资料文件不存在!",NULL,MB_OK);
		return;
	}
    
    GetGenCode();
	CGen dlg;
	dlg.m_name=name;
	dlg.m_index=-1;


	if(dlg.DoModal()==IDOK)
	{
	   InsertItem(dlg.m_data,dlg.m_name,dlg.m_index);
	}
}

void CSan9EditDlg::OnDel() 
{
	// TODO: Add your control notification handler code here
	POSITION pos=m_list.GetFirstSelectedItemPosition();
	int index=m_list.GetNextSelectedItem(pos);
	if(index!=-1)
	{
		CGen dlg;
		dlg.m_name=	m_list.GetItemText(index,9);
		dlg.m_index=atoi(m_list.GetItemText(index,10));
		dlg.NewData(FALSE);
		dlg.SaveData();
		m_list.DeleteItem(index);
	}
	else
	{
		MessageBox("您还没选中修改项!");
	}
}

void CSan9EditDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	CBGI_GB::Release();//释放bgi资源
    ((CSan9EditApp*)AfxGetApp())->m_GenCode.DeleteAll();
}

#include <afxinet.h>

BOOL DownLoad(CString url)
{
	BOOL result=TRUE;

	CInternetSession session(NULL,INTERNET_OPEN_TYPE_PRECONFIG);
	CHttpConnection* pServer = NULL;
	CHttpFile* pFile = NULL;

	if(url.Find("http://"))
		url="http://"+url;

	try
	{
		// 检查URL是否有效
		CString strServerName;
		CString strObject;
		INTERNET_PORT nPort;
		DWORD dwServiceType;

	    //得到服务器名及其端口
		if (!AfxParseURL(url, dwServiceType, strServerName, strObject, nPort) ||
			dwServiceType != INTERNET_SERVICE_HTTP)
		{
			MessageBox(NULL,_T("不是HTTP站点"),_T("错误"),MB_OK);
		}
       
		pServer = session.GetHttpConnection(strServerName, nPort);

		pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,
			strObject, NULL, 1, NULL, NULL, 
			INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT);

		pFile->AddRequestHeaders("");
		pFile->SendRequest();

		DWORD dwRet;
		pFile->QueryInfoStatusCode(dwRet);
      
	    if (dwRet != HTTP_STATUS_OK)
		{
			MessageBox(NULL,_T("HTTP状态错误"),_T("错误"),MB_OK);
		}

        CString directory;
		CFolder dlg;
		dlg.SetWindowTitle("San9Edit 1.1 更新");
		dlg.SetTitle("请选择保存路径");
		if(dlg.DoModal(AfxGetMainWnd())!=IDOK) 
		{
			pServer->Close();
			session.Close();
			return FALSE;
		}

		directory=dlg.GetPathname();

		//开始读取文件
        CFile file;
		CString filename=directory;
		if(filename[filename.GetLength()-1]!='\\') filename.Insert(filename.GetLength(),'\\');
		filename.Insert(filename.GetLength(),pFile->GetFileName());

		if(file.Open(filename,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))
		{
           int size=1024*1024;
           int recive;
           char *buf=new char[size+1];

		   for(;;)
		   {
              recive=pFile->Read(buf,size);
			  file.Write(buf,recive);
			  if(recive<size) break;
		   }

		   file.Close();
		   delete buf;
		}
		else result=FALSE;
		
		pFile->Close();
		pServer->Close();

        MessageBox(NULL,"下载成功!","San9Edit1.1",MB_OK);
	}
	catch (CInternetException* pEx)
	{
		TCHAR szErr[1024];
		pEx->GetErrorMessage(szErr, 1024);
		MessageBox(NULL,szErr,_T("错误"),MB_OK);
		pEx->Delete();
		result=FALSE;
	}

	if (pFile != NULL)
		delete pFile;
	if (pServer != NULL)
		delete pServer;

	session.Close();

	return FALSE;
}


void CSan9EditDlg::OnUpdate() 
{
	// TODO: Add your command handler code here
	DownLoad("http://fxstudio.xiloo.com//owner//san9edit.zip");
}

void CSan9EditDlg::OnHttp() 
{
	// TODO: Add your command handler code here
	::ShellExecute(NULL,NULL,"http://fxstudio.xiloo.com",NULL,NULL,SW_RESTORE);
}

void CSan9EditDlg::OnEmail() 
{
	// TODO: Add your command handler code here
	CString Mail=_T("mailto:gamemake_boy@163.net?subject=关于 San9Edit 1.1&body=您的意见!");
    ::ShellExecute(NULL,NULL,Mail,NULL,NULL,NULL);   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -