4#include "ChineseChessActiveX.h"
6#include "ChineseChessActiveXPropPage.h"
7#include "afxdialogex.h"
20 ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
31 DISP_PROPERTY_EX_ID(
CChineseChessActiveXCtrl, "QiPangColor", dispidQiPangColor, GetQiPangColor, SetQiPangColor, VT_COLOR)
32 DISP_PROPERTY_EX_ID(
CChineseChessActiveXCtrl, "TiShiBoxColor", dispidTiShiBoxColor, GetTiShiBoxColor, SetTiShiBoxColor, VT_COLOR)
33 DISP_PROPERTY_EX_ID(
CChineseChessActiveXCtrl, "BoardLayout", dispidBoardLayout, GetBoardLayout, SetBoardLayout, VT_I2)
40 DISP_PROPERTY_NOTIFY_ID(
CChineseChessActiveXCtrl, "EnablePromptSound", dispidEnablePromptSound, m_EnablePromptSound, OnEnablePromptSoundChanged, VT_BOOL)
41 DISP_PROPERTY_NOTIFY_ID(
CChineseChessActiveXCtrl, "EnablePromptMessage", dispidEnablePromptMessage, m_EnablePromptMessage, OnEnablePromptMessageChanged, VT_BOOL)
55 EVENT_CUSTOM_ID("EventGoChess", eventidEventGoChess, EventGoChess, VTS_I2 VTS_I2 VTS_I4)
68 0xe4e060cb,0xa3aa,0x4278,0xb1,0xed,0xce,0x50,0x20,0xc4,0x2e,0xc7)
76const IID IID_DChineseChessActiveX = {0x7192fb6d,0x7455,0x4da8,{0xb3,0xac,0x64,0x5d,0xd6,0x05,0x57,0xf3}};
77const IID IID_DChineseChessActiveXEvents = {0x0850de98,0xfc76,0x4b94,{0x9b,0xbe,0xe2,0xe5,0x9e,0x0f,0xe0,0xea}};
81static const DWORD _dwChineseChessActiveXOleMisc =
82 OLEMISC_ACTIVATEWHENVISIBLE |
83 OLEMISC_SETCLIENTSITEFIRST |
85 OLEMISC_CANTLINKINSIDE |
86 OLEMISC_RECOMPOSEONRESIZE;
93BOOL CChineseChessActiveXCtrl::CChineseChessActiveXCtrlFactory::UpdateRegistry(BOOL bRegister)
102 return AfxOleRegisterControlClass(
103 AfxGetInstanceHandle(),
106 IDS_CHINESECHESSACTIVEX,
107 IDB_CHINESECHESSACTIVEX,
108 afxRegApartmentThreading,
109 _dwChineseChessActiveXOleMisc,
114 return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
118CChineseChessActiveXCtrl::CChineseChessActiveXCtrl()
120 InitializeIIDs(&IID_DChineseChessActiveX, &IID_DChineseChessActiveXEvents);
128CChineseChessActiveXCtrl::~CChineseChessActiveXCtrl()
137void CChineseChessActiveXCtrl::DoPropExchange(CPropExchange* pPX)
139 ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
140 COleControl::DoPropExchange(pPX);
148void CChineseChessActiveXCtrl::OnResetState()
150 COleControl::OnResetState();
159void CChineseChessActiveXCtrl::SetQiPangColor(OLE_COLOR val)
161 AFX_MANAGE_STATE(AfxGetStaticModuleState());
162 if (m_pChess && m_pChess->GetSafeHwnd())
164 m_pChess->SetQiPangColor(val);
169OLE_COLOR CChineseChessActiveXCtrl::GetQiPangColor()
171 AFX_MANAGE_STATE(AfxGetStaticModuleState());
172 if (m_pChess && m_pChess->GetSafeHwnd())
173 return m_pChess->GetQiPangColor();
177void CChineseChessActiveXCtrl::SetTiShiBoxColor(OLE_COLOR val)
179 AFX_MANAGE_STATE(AfxGetStaticModuleState());
180 if (m_pChess && m_pChess->GetSafeHwnd())
181 m_pChess->SetTiShiBoxColor(val);
185OLE_COLOR CChineseChessActiveXCtrl::GetTiShiBoxColor()
187 AFX_MANAGE_STATE(AfxGetStaticModuleState());
188 if (m_pChess && m_pChess->GetSafeHwnd())
189 return m_pChess->GetTiShiBoxColor();
193SHORT CChineseChessActiveXCtrl::GetBoardLayout()
195 AFX_MANAGE_STATE(AfxGetStaticModuleState());
196 if (m_pChess && m_pChess->GetSafeHwnd())
197 return m_pChess->GetBoardLayout();
200void CChineseChessActiveXCtrl::SetBoardLayout(SHORT val)
202 AFX_MANAGE_STATE(AfxGetStaticModuleState());
203 if (m_pChess && m_pChess->GetSafeHwnd())
206 m_pChess->Invalidate();
212void CChineseChessActiveXCtrl::OnEnablePromptSoundChanged()
214 AFX_MANAGE_STATE(AfxGetStaticModuleState());
216 if (m_pChess && m_pChess->GetSafeHwnd())
217 m_pChess->EnablePromptSound(m_EnablePromptSound);
221void CChineseChessActiveXCtrl::OnEnablePromptMessageChanged()
223 AFX_MANAGE_STATE(AfxGetStaticModuleState());
226 m_pChess->EnablePromptMessage(m_EnablePromptMessage);
231BSTR CChineseChessActiveXCtrl::GetRedName()
234 AFX_MANAGE_STATE(AfxGetStaticModuleState());
238 if (m_pChess && m_pChess->GetSafeHwnd())
239 strResult = A2CT(m_pChess->GetRedName().c_str());
241 return strResult.AllocSysString();
244void CChineseChessActiveXCtrl::SetRedName(LPCTSTR newVal)
246 AFX_MANAGE_STATE(AfxGetStaticModuleState());
247 if (m_pChess && m_pChess->GetSafeHwnd())
248 m_pChess->SetRedName(newVal);
252BSTR CChineseChessActiveXCtrl::GetBlackName()
255 AFX_MANAGE_STATE(AfxGetStaticModuleState());
259 if (m_pChess && m_pChess->GetSafeHwnd())
260 strResult = A2CT(m_pChess->GetBlackName().c_str());
262 return strResult.AllocSysString();
265void CChineseChessActiveXCtrl::SetBlackName(LPCTSTR val)
267 AFX_MANAGE_STATE(AfxGetStaticModuleState());
268 if (m_pChess && m_pChess->GetSafeHwnd())
269 m_pChess->SetBlackName(val);
273LONG CChineseChessActiveXCtrl::GetStartTime()
275 AFX_MANAGE_STATE(AfxGetStaticModuleState());
277 if (m_pChess && m_pChess->GetSafeHwnd())
278 return m_pChess->GetStartTime();
283void CChineseChessActiveXCtrl::SetStartTime(LONG val)
285 AFX_MANAGE_STATE(AfxGetStaticModuleState());
287 if (m_pChess && m_pChess->GetSafeHwnd())
288 m_pChess->SetStartTime(val);
293LONG CChineseChessActiveXCtrl::GetEndTime()
295 AFX_MANAGE_STATE(AfxGetStaticModuleState());
297 if (m_pChess && m_pChess->GetSafeHwnd())
298 return m_pChess->GetEndTime();
303void CChineseChessActiveXCtrl::SetEndTime(LONG val)
305 AFX_MANAGE_STATE(AfxGetStaticModuleState());
307 if (m_pChess && m_pChess->GetSafeHwnd())
308 m_pChess->SetEndTime(val);
315void CChineseChessActiveXCtrl::AboutBox()
317 AFX_MANAGE_STATE(AfxGetStaticModuleState());
318 if (m_pChess && m_pChess->GetSafeHwnd())
319 m_pChess->AboutBox();
322VARIANT_BOOL CChineseChessActiveXCtrl::NextStep()
324 AFX_MANAGE_STATE(AfxGetStaticModuleState());
327 if (m_pChess && m_pChess->GetSafeHwnd())
330 return VARIANT_FALSE;
334VARIANT_BOOL CChineseChessActiveXCtrl::PreviouStep()
336 AFX_MANAGE_STATE(AfxGetStaticModuleState());
339 if (m_pChess && m_pChess->GetSafeHwnd())
342 return VARIANT_FALSE;
346VARIANT_BOOL CChineseChessActiveXCtrl::GoChess(SHORT i, SHORT j)
348 AFX_MANAGE_STATE(AfxGetStaticModuleState());
351 if (m_pChess && m_pChess->GetSafeHwnd())
352 nRet = m_pChess->
GoChess(i, j);
355 return VARIANT_FALSE;
358VARIANT_BOOL CChineseChessActiveXCtrl::SaveChessGame(LPCTSTR szFile)
360 AFX_MANAGE_STATE(AfxGetStaticModuleState());
363 if (m_pChess && m_pChess->GetSafeHwnd())
364 m_pChess->SaveChessGame(szFile);
366 return VARIANT_FALSE;
370VARIANT_BOOL CChineseChessActiveXCtrl::LoadChessGame(LPCTSTR szFile)
372 AFX_MANAGE_STATE(AfxGetStaticModuleState());
375 if (m_pChess && m_pChess->GetSafeHwnd())
377 nRet = m_pChess->LoadChessGame(szFile);
380 return VARIANT_FALSE;
385VARIANT_BOOL CChineseChessActiveXCtrl::AddGameTag(LPCTSTR szTag, LPCTSTR szVal)
387 AFX_MANAGE_STATE(AfxGetStaticModuleState());
390 if (m_pChess && m_pChess->GetSafeHwnd())
392 nRet = m_pChess->AddGameTag(szTag, szVal);
395 return VARIANT_FALSE;
400BSTR CChineseChessActiveXCtrl::GetgameTag(LPCTSTR szTag)
403 AFX_MANAGE_STATE(AfxGetStaticModuleState());
407 if (m_pChess && m_pChess->GetSafeHwnd())
408 strResult = m_pChess->GetGameTag(szTag);
410 return strResult.AllocSysString();
421int CChineseChessActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
423 if (COleControl::OnCreate(lpCreateStruct) == -1)
430 m_pChess->Create(NULL, _T(
"Chinese chess"), WS_CHILD, rect,
this, IDV_CHINESE_CHESS);
431 m_pChess->ShowWindow(SW_SHOW);
433 m_pChess->SetChineseChessHandler(m_pHandler);
437void CChineseChessActiveXCtrl::OnSize(UINT nType,
int cx,
int cy)
439 __super::OnSize(nType, cx, cy);
441 if (m_pChess && m_pChess->GetSafeHwnd())
442 m_pChess->MoveWindow(0, 0, cx, cy);
454 m_pActiveX->EventGoChess(i, j, chess);
virtual int OnGoChess(int i, int j, CPiece::ENUM_QiZi chess)
Executes the go chess action
enum CChineseChess::_ENUM_BoardLayout ENUM_BoardLayout
标准棋盘布局:详见《象棋竞赛规则(2011)》第一章 第1条。红棋在下,黑棋在上。 界面可以支持非标准棋盘布局(红在上,黑在下)
int PreviouStep()
函数名:PreviouStep 功 能:上步棋 参 数:无 返回值:走棋步数 作 者:康 林 版 本:1.0.0.1 日 期:2004-10-5 时 间:10:19:51
int NextStep()
函数名:NextStep 功 能:下步棋 参 数:无 返回值:走棋步数 作 者:康 林 版 本:1.0.0.1 日 期:2004-10-5 时 间:10:19:33
bool GoChess(int i, int j, bool bNext=false)
走棋