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); 
}