www.pudn.com > 2007071212243513681.rar > ResDialog1.cpp
// ResDialog1.cpp : 实现文件
//
#include "stdafx.h"
#include "fun.h"
#include "ResDialog1.h"
//#define BEIBAOSIZE 96 // 背包总格数
// CResDialog1 对话框
IMPLEMENT_DYNAMIC(CResDialog1, CDialog)
CResDialog1::CResDialog1(CWnd* pParent /*=NULL*/)
: CDialog(CResDialog1::IDD, pParent)
{
m_pMyRes = NULL;
::InitializeCriticalSection(&m_cs);
}
CResDialog1::~CResDialog1()
{
KillTimer(41);
KillTimer(42);
::DeleteCriticalSection(&m_cs);
}
void CResDialog1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BEIBAO_LIST, m_beibao_list);
DDX_Control(pDX, IDC_SHOWBEIBAO_CHK, m_showbeibao_chk);
DDX_Control(pDX, IDC_AUTOPICKUP_CHK, m_autopickup_chk);
}
BEGIN_MESSAGE_MAP(CResDialog1, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
// CResDialog1 消息处理程序
BOOL CResDialog1::OnInitDialog()
{
CDialog::OnInitDialog();
LVCOLUMN lvcol;
lvcol.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvcol.fmt = LVCFMT_CENTER;
lvcol.iSubItem = 1;
lvcol.cx = 45;
lvcol.pszText = _T("序号");
m_beibao_list.InsertColumn(0, &lvcol);
lvcol.cx = 110;
lvcol.pszText = _T("物品名称");
m_beibao_list.InsertColumn(1, &lvcol);
lvcol.cx = 45;
lvcol.pszText = _T("类别");
m_beibao_list.InsertColumn(2, &lvcol);
lvcol.cx = 45;
lvcol.pszText = _T("数量");
m_beibao_list.InsertColumn(3, &lvcol);
lvcol.cx = 45;
lvcol.pszText = _T("最大");
m_beibao_list.InsertColumn(4, &lvcol);
lvcol.cx = 45;
lvcol.pszText = _T("单价");
m_beibao_list.InsertColumn(5, &lvcol);
lvcol.cx = 45;
lvcol.pszText = _T("总价");
m_beibao_list.InsertColumn(6, &lvcol);
UpdateData(FALSE);
SetTimer(41, 2000, NULL);
SetTimer(42, 3000, NULL);
return TRUE;
}
VOID CResDialog1::GetBeibaoResName(DWORD dwCode, wchar_t *pwstr)
{
int nSize = sizeof(game_res) / sizeof(RES);
if ( nSize > 0 )
{
for (int i = 0; i < nSize; i++)
{
if ( game_res[i].dwResId == dwCode )
{
::lstrcpyW(pwstr, game_res[i].pwstrName);
break;
}
}
}
}
VOID CResDialog1::GetBeibaoRes()
{
DWORD dwBaseAddr = 0;
DWORD dwAddr = 0;
int nBeibaoSize = 0;
DWORD dwBeibaoResPoint = 0;
DWORD dwCurResBaseAddr = 0;
dwBaseAddr = GetPoint();
if ( dwBaseAddr )
{
dwAddr = *(PDWORD)ULongToPtr(dwBaseAddr + 0x83C);
nBeibaoSize = *(PDWORD)ULongToPtr(dwAddr + 0x10);
dwBeibaoResPoint = *(PDWORD)ULongToPtr(dwAddr + 0xC);
if ( nBeibaoSize > 0 )
{
LVITEM lvi;
CString strItem;
m_pMyRes = (PMYRES)new MYRES[nBeibaoSize];
for (int i = 0; i < nBeibaoSize; i++)
{
::RtlZeroMemory(&m_pMyRes[i], sizeof(MYRES));
if ( (dwCurResBaseAddr = ((PDWORD)ULongToPtr(dwBeibaoResPoint))[i]) != 0 )
{
m_pMyRes[i].dwClass = *(PDWORD)ULongToPtr(dwCurResBaseAddr + 4);
m_pMyRes[i].dwCode = *(PDWORD)ULongToPtr(dwCurResBaseAddr + 8);
m_pMyRes[i].dwCurNum = *(PDWORD)ULongToPtr(dwCurResBaseAddr + 0x14);
m_pMyRes[i].dwMaxNum = *(PDWORD)ULongToPtr(dwCurResBaseAddr + 0x18);
m_pMyRes[i].dwGold = *(PDWORD)ULongToPtr(dwCurResBaseAddr + 0x1C);
m_pMyRes[i].dwTotal = m_pMyRes[i].dwGold * m_pMyRes[i].dwCurNum;
GetBeibaoResName(m_pMyRes[i].dwCode, m_pMyRes[i].wstrName);
}
m_pMyRes[i].dwPos = i + 1;
// 第一列,物品的位置,第几格
lvi.mask = LVIF_TEXT;
strItem.Format(_T("%d"), m_pMyRes[i].dwPos);
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.InsertItem(&lvi);
// 第二列,物品名称
strItem.Format(_T("%s"), m_pMyRes[i].wstrName);
lvi.iSubItem = 1;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.SetItem(&lvi);
// 第三列,物品类别
strItem.Format(_T("%d"), m_pMyRes[i].dwClass);
lvi.iSubItem = 2;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.SetItem(&lvi);
// 第四列,物品数量
strItem.Format(_T("%d"), m_pMyRes[i].dwCurNum);
lvi.iSubItem = 3;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.SetItem(&lvi);
// 第五列,物品在该格最大存放量
strItem.Format(_T("%d"), m_pMyRes[i].dwMaxNum);
lvi.iSubItem = 4;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.SetItem(&lvi);
// 第六列,物品单价
strItem.Format(_T("%d"), m_pMyRes[i].dwGold);
lvi.iSubItem = 5;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.SetItem(&lvi);
// 第七列,物品总价
strItem.Format(_T("%d"), m_pMyRes[i].dwTotal);
lvi.iSubItem = 6;
lvi.pszText = (LPWSTR)(LPCWSTR)(strItem);
m_beibao_list.SetItem(&lvi);
}
delete []m_pMyRes;
}
}
}
void CResDialog1::OnTimer(UINT nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch ( nIDEvent )
{
case 41:
if ( m_showbeibao_chk.GetCheck() )
{
::EnterCriticalSection(&m_cs);
m_beibao_list.SetRedraw(FALSE);
m_beibao_list.DeleteAllItems();
GetBeibaoRes();
m_beibao_list.SetRedraw(TRUE);
// m_beibao_list.Invalidate();
::LeaveCriticalSection(&m_cs);
}
break;
case 42:
if ( m_autopickup_chk.GetCheck() )
GetRes();
break;
}
CDialog::OnTimer(nIDEvent);
}