Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
318 lines
8.2 KiB
C++
318 lines
8.2 KiB
C++
// This is a part of the Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992-1998 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// This source code is only intended as a supplement to the
|
|
// Microsoft Foundation Classes Reference and related
|
|
// electronic documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Microsoft Foundation Classes product.
|
|
|
|
#include "stdafx.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CIPAddressCtrl
|
|
|
|
#ifdef AFX_INET_SEG
|
|
#pragma code_seg(AFX_INET_SEG)
|
|
#endif
|
|
|
|
CIPAddressCtrl::~CIPAddressCtrl()
|
|
{
|
|
DestroyWindow();
|
|
}
|
|
|
|
BOOL CIPAddressCtrl::Create(DWORD dwStyle, const RECT& rect,
|
|
CWnd* pParentWnd, UINT nID)
|
|
{
|
|
// initialize common controls
|
|
VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_INTERNET_REG));
|
|
|
|
// the IP Address Control must be a child
|
|
ASSERT(dwStyle & WS_CHILD);
|
|
|
|
CWnd* pWnd = this;
|
|
return pWnd->Create(WC_IPADDRESS, NULL, dwStyle, rect, pParentWnd, nID);
|
|
}
|
|
|
|
int CIPAddressCtrl::GetAddress(BYTE& nField0, BYTE& nField1, BYTE& nField2, BYTE& nField3)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
DWORD dwAddress;
|
|
LRESULT nRetVal = ::SendMessage(m_hWnd, IPM_GETADDRESS, 0, (LPARAM) &dwAddress);
|
|
|
|
nField0 = (BYTE) FIRST_IPADDRESS(dwAddress);
|
|
nField1 = (BYTE) SECOND_IPADDRESS(dwAddress);
|
|
nField2 = (BYTE) THIRD_IPADDRESS(dwAddress);
|
|
nField3 = (BYTE) FOURTH_IPADDRESS(dwAddress);
|
|
|
|
return nRetVal;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CComboBoxEx
|
|
|
|
#ifdef AFX_CMNCTL_SEG
|
|
#pragma code_seg(AFX_CMNCTL_SEG)
|
|
#endif
|
|
|
|
BOOL CComboBoxEx::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
|
|
UINT nID)
|
|
{
|
|
// initialize common controls
|
|
VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_USEREX_REG));
|
|
|
|
CWnd* pWnd = this;
|
|
return pWnd->Create(WC_COMBOBOXEX, NULL, dwStyle, rect, pParentWnd, nID);
|
|
}
|
|
|
|
int CComboBoxEx::DeleteItem(int iIndex)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
return (int) ::SendMessage(m_hWnd, CBEM_DELETEITEM, (WPARAM) iIndex, 0);
|
|
}
|
|
|
|
BOOL CComboBoxEx::GetItem(COMBOBOXEXITEM* pCBItem)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
ASSERT(pCBItem != NULL);
|
|
ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM)));
|
|
|
|
return (int) ::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM) pCBItem);
|
|
}
|
|
|
|
int CComboBoxEx::InsertItem(const COMBOBOXEXITEM* pCBItem)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
ASSERT(pCBItem != NULL);
|
|
ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM), FALSE));
|
|
|
|
return (int) ::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM) pCBItem);
|
|
}
|
|
|
|
BOOL CComboBoxEx::SetItem(const COMBOBOXEXITEM* pCBItem)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
ASSERT(pCBItem != NULL);
|
|
ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM), FALSE));
|
|
|
|
return (int) ::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM) pCBItem);
|
|
}
|
|
|
|
CComboBoxEx::~CComboBoxEx()
|
|
{
|
|
DestroyWindow();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CReBarCtrl
|
|
|
|
BOOL CReBarCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
|
|
UINT nID)
|
|
{
|
|
// initialize common controls
|
|
VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_COOL_REG));
|
|
|
|
CWnd* pWnd = this;
|
|
return pWnd->Create(REBARCLASSNAME, NULL, dwStyle, rect, pParentWnd, nID);
|
|
}
|
|
|
|
CImageList* CReBarCtrl::GetImageList() const
|
|
{
|
|
REBARINFO rbi;
|
|
rbi.cbSize = sizeof(rbi);
|
|
rbi.fMask = RBIM_IMAGELIST;
|
|
return GetBarInfo(&rbi) ? CImageList::FromHandle(rbi.himl) : NULL;
|
|
}
|
|
|
|
BOOL CReBarCtrl::SetImageList(CImageList* pImageList)
|
|
{
|
|
REBARINFO rbi;
|
|
rbi.cbSize = sizeof(rbi);
|
|
rbi.fMask = RBIM_IMAGELIST;
|
|
rbi.himl = (HIMAGELIST)pImageList->GetSafeHandle();
|
|
return SetBarInfo(&rbi);
|
|
}
|
|
|
|
BOOL CReBarCtrl::GetColorScheme(COLORSCHEME* lpcs)
|
|
{
|
|
lpcs->dwSize = sizeof(COLORSCHEME);
|
|
return SendMessage(RB_GETCOLORSCHEME, 0, (LPARAM)lpcs);
|
|
}
|
|
|
|
void CReBarCtrl::SetColorScheme(const COLORSCHEME* lpcs)
|
|
{
|
|
((COLORSCHEME*)lpcs)->dwSize = sizeof(COLORSCHEME);
|
|
SendMessage(RB_SETCOLORSCHEME, 0, (LPARAM)lpcs);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CListCtrl
|
|
|
|
BOOL CListCtrl::SetColumnOrderArray(int iCount, LPINT piArray)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
ASSERT(AfxIsValidAddress(piArray, iCount * sizeof(int), FALSE));
|
|
|
|
return (BOOL) ::SendMessage(m_hWnd, LVM_SETCOLUMNORDERARRAY,
|
|
(WPARAM) iCount, (LPARAM) piArray);
|
|
}
|
|
|
|
BOOL CListCtrl::GetColumnOrderArray(LPINT piArray, int iCount /* = -1 */)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
|
|
// if -1 was passed, find the count ourselves
|
|
|
|
int nCount = iCount;
|
|
if (nCount == -1)
|
|
{
|
|
CHeaderCtrl* pCtrl = GetHeaderCtrl();
|
|
ASSERT(pCtrl != NULL);
|
|
if (pCtrl != NULL)
|
|
nCount = pCtrl->GetItemCount();
|
|
}
|
|
if (nCount == -1)
|
|
return FALSE;
|
|
|
|
ASSERT(AfxIsValidAddress(piArray, nCount * sizeof(int)));
|
|
return (BOOL) ::SendMessage(m_hWnd, LVM_GETCOLUMNORDERARRAY,
|
|
(WPARAM) nCount, (LPARAM) piArray);
|
|
}
|
|
|
|
BOOL CListCtrl::SetBkImage(HBITMAP hbm, BOOL fTile /*= TRUE*/, int xOffsetPercent /*= 0*/, int yOffsetPercent /*= 0*/)
|
|
{
|
|
LVBKIMAGE lv;
|
|
|
|
lv.ulFlags = LVBKIF_SOURCE_HBITMAP;
|
|
if( fTile )
|
|
lv.ulFlags |= LVBKIF_STYLE_TILE;
|
|
else
|
|
lv.ulFlags |= LVBKIF_STYLE_NORMAL;
|
|
lv.hbm = hbm;
|
|
lv.xOffsetPercent = xOffsetPercent;
|
|
lv.yOffsetPercent = yOffsetPercent;
|
|
return SetBkImage(&lv);
|
|
}
|
|
|
|
BOOL CListCtrl::SetBkImage(LPTSTR pszUrl, BOOL fTile /*= TRUE*/, int xOffsetPercent /*= 0*/, int yOffsetPercent /*= 0*/)
|
|
{
|
|
LVBKIMAGE lv;
|
|
|
|
lv.ulFlags = LVBKIF_SOURCE_URL;
|
|
if( fTile )
|
|
lv.ulFlags |= LVBKIF_STYLE_TILE;
|
|
else
|
|
lv.ulFlags |= LVBKIF_STYLE_NORMAL;
|
|
lv.pszImage = pszUrl;
|
|
lv.xOffsetPercent = xOffsetPercent;
|
|
lv.yOffsetPercent = yOffsetPercent;
|
|
return SetBkImage(&lv);
|
|
}
|
|
|
|
BOOL CListCtrl::GetCheck(int nItem) const
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
int nState = (int)::SendMessage(m_hWnd, LVM_GETITEMSTATE, (WPARAM)nItem,
|
|
(LPARAM)LVIS_STATEIMAGEMASK);
|
|
// Return zero if it's not checked, or nonzero otherwise.
|
|
return ((BOOL)(nState >> 12) -1);
|
|
}
|
|
|
|
BOOL CListCtrl::SetCheck(int nItem, BOOL fCheck)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
LVITEM lvi;
|
|
lvi.stateMask = LVIS_STATEIMAGEMASK;
|
|
|
|
/*
|
|
Since state images are one-based, 1 in this macro turns the check off, and
|
|
2 turns it on.
|
|
*/
|
|
lvi.state = INDEXTOSTATEIMAGEMASK((fCheck ? 2 : 1));
|
|
return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHeaderCtrl
|
|
|
|
CHeaderCtrl* CListCtrl::GetHeaderCtrl()
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
|
|
HWND hWnd = (HWND) ::SendMessage(m_hWnd, LVM_GETHEADER, 0, 0);
|
|
if (hWnd == NULL)
|
|
return NULL;
|
|
else
|
|
return (CHeaderCtrl*) CHeaderCtrl::FromHandle(hWnd);
|
|
}
|
|
|
|
|
|
BOOL CHeaderCtrl::SetOrderArray(int iCount, LPINT piArray)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
ASSERT(AfxIsValidAddress(piArray, iCount * sizeof(int), FALSE));
|
|
|
|
return (BOOL) ::SendMessage(m_hWnd, HDM_SETORDERARRAY,
|
|
(WPARAM) iCount, (LPARAM) piArray);
|
|
}
|
|
|
|
BOOL CHeaderCtrl::GetOrderArray(LPINT piArray, int iCount /* = -1 */)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
|
|
// if -1 was passed, find the count ourselves
|
|
|
|
int nCount = iCount;
|
|
if (nCount == -1)
|
|
{
|
|
nCount = GetItemCount();
|
|
|
|
if (nCount == -1)
|
|
return FALSE;
|
|
}
|
|
|
|
ASSERT(AfxIsValidAddress(piArray, iCount * sizeof(int)));
|
|
|
|
return (BOOL) ::SendMessage(m_hWnd, HDM_GETORDERARRAY,
|
|
(WPARAM) iCount, (LPARAM) piArray);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CProgressCtrl
|
|
|
|
void CProgressCtrl::GetRange(int& nLower, int& nUpper)
|
|
{
|
|
ASSERT(::IsWindow(m_hWnd));
|
|
PBRANGE range;
|
|
::SendMessage(m_hWnd, PBM_GETRANGE, (WPARAM) FALSE, (LPARAM) &range);
|
|
nLower = range.iLow;
|
|
nUpper = range.iHigh;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _AFX_ENABLE_INLINES
|
|
|
|
static const char _szAfxWinInl[] = "afxcmn2.inl";
|
|
#undef THIS_FILE
|
|
#define THIS_FILE _szAfxWinInl
|
|
#define _AFXCMN_INLINE
|
|
#include "afxcmn2.inl"
|
|
|
|
#endif //_AFX_ENABLE_INLINES
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef AFX_INIT_SEG
|
|
#pragma code_seg(AFX_INIT_SEG)
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC(CIPAddressCtrl, CWnd)
|
|
IMPLEMENT_DYNAMIC(CReBarCtrl, CWnd)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|