VC中绘图问题
正在做一个五子棋程序,想要每次放一个棋上去,但是不用每次都重绘整个棋盘和所有棋子,应该怎么实现。
[解决办法]
把棋盘分成225个矩形,OnPaint中判断要画那些矩形。
放上棋子后调用InvalidateRect。
[解决办法]
用异或模式画图.异或时,重画该区域就可以将原图象恢复.
[解决办法]
重画一遍也用不了多少时间的,一般的计算机根本就看不出来的
如果你觉得重画的时候会闪的话,建议你在内存建议一个临时绘图设备(HDC),在临时绘图设备上把所有的东西都画好以后,再一次性贴图到窗口上,这样就不会闪了,如果每次都计算的重画区域的话会更麻烦的,而且效果也不是很好
[解决办法]
“把棋盘分成225个矩形”是因为五子棋的棋盘是15*15的,每个矩形为一个可以放子的区域。这225个矩形分为9种位置(4个角、4个边、1个中间),每种位置有三种状态(无子、黑子、白子)。在程序中定义一个长度为225的数组表示棋盘中各个位置的状态(例如:0表示无,1表示黑,2表示白)。
在OnPaint中,用GetUpdateRect取得要刷新的区域,判断这225个矩形中哪些需要刷新则重画。
下子时,调用InvalidateRect指定刷新放子的区域。