📄 san9editdlg.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 + -