📄 untitled-06.txt
字号:
lll-- rNrrtchrr=EX;
::ZeroMemory(。nGameGrid, 9。 sizeof(nit》;
Invalidate();
Z
图3.2 TICTac应用程序
处理鼠标输人的第一步就是在消息映射表中为想要处理的消息添加输人项。在
TicTac.cpp中,CMainwindow的消息映射包含下列消息映射表输入项:
ON.Mi.LBUTTONDOWN()
ONWM_LBUTTONDBLCLK()
ON.WM-RBUTTONDOWN()
这3个语句把WM.LBUTTONDOWN、WM.LBUTh0NDBLCLK以及WM.RBUTTONDOWN消息
与CMainwindow的成员函数onLButtonDown、onLButtonDblClk以及onRButtonDown联系在一
起。消息一到达,游戏就开始了。
onLButtonDown处理程序处理CMainwindow客户区中的鼠标左键单击事件。在核实
m—nNextChar是 X而不是 O之后(如果不是 X,则什么也不执行就返回),onLButtonDown将调
用保护成员函数GetRectID来判断是否单击发生在与井字游戏网格相对应的9个矩形中。
矩形坐标保存在叫做 CMainwindow:: m.rcsquares的 CRect对象的静态数组中。 GetRectID使
用一个for循环来判断由消息处理程序传递来的光标位置是否处于任何一个网格之内:
for( nit i= o; i、 9; i++)
。r(。rcsquares。」.PtlnRect(po。nt))
return n;
S
returnl;
如果传递来的点位于 CRect对象代表的矩形内,则 CRect:: PtlnRect将返回一个非零值,
否则返回0。如果对于任一个m.rcsquares数组中的矩形PtlnRect返回非零值,则GetRectID
将返回矩形的ID。ID是一个从0到8的整数,0代表棋盘的左上角网格,l代表它右边的网
格,2代表右上角的网格,3代表下一行最左端的网格,等等。每个网格在m.nGameGrid数组
中都有一个相应的元素,初始值为零代表空格。如果所有对PtlnRect的调用都没返回
TRUE,则GetRectID将返回一l说明单击发生在网格之外,onLButtonDown将忽略鼠标单击事
件。但是,如果GetRectID返回一个有效的ID并且相应的网格是空的,则OnLButtonDown就
会在 m_nGa。Grid数组中记录 X并调用 CMainwindow:: D。wX函数在网格中绘一个 X。
Dnllvx创建一个红色的16像素宽的笔并在45度方向绘制两条相互垂直的线。
onRButtonDown与onLButtonDown的功能基本相同,只不过它绘制一个O而不是X。执
行绘图的例程是 CMainwindow:: Drawo函数。在它调用 CDC:: Ellope函数之前, Drawo将一
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -