esay x
其他
地图打印(利用二维数组)
双缓冲
当我们绘制一张图 然后另一张图盖住前一张图的某个部分的时候 由于while的存在 会导致 两张图不停的闪烁 所以加入双缓冲可以解决这个问题
开启双缓冲 之后等待Flush或者End 才会进行图片的绘制 不然不会进行图片的绘制,这样就可以保证每次while的执行 都是以一整套为单位进行的 执行到双缓冲状态结束或者flush 才将之前的内容同时绘制 也就是蓝色和白色同时绘制(这样虽然每次都在循环绘制 但是每一次绘制的效果一样 就不会出现闪烁) 而不是蓝色先绘制 之后白色再绘制
有以下两种方式
注意::
如果开启双缓冲状态之后 中途进行了函数的跳转 那么函数里要将双缓冲状态结束 不然一直没有结束双缓冲状态的话 函数里的绘图也不会进行绘制 而是等待双缓冲状态的结束
颜色和格式的设置
设置颜色和格式都是设置了一种状态 在这之后的填充都会采用这种状态 所以设置状态要在真正填充之前 所以每次填充之前最好都设置一次状态
键盘的输入
_kbhit() 以及_getch()都是控制台函数 会导致操作与界面割裂开 所以建议使用Get这个函数 该函数直接传入一个大写w即可包含小写w,因为他的参数是虚拟键
补充:VC虚拟值表 可放入GetAsyncKeyState的参数
https://blog.csdn.net/qq_42372031/article/details/105178789
界面的设计
按钮和鼠标
按钮
设置文本所占矩形的位置坐标 对于横轴 先将文本矩形的左边像素坐标移动到按钮的中间 之后 减去文本矩形像素的一半 就可以实现左边一半右边一半 就可以对齐了
纵轴同理
鼠标
先对鼠标的状态进行设置,采用枚举类型
同时定义全局变量 Message msg; 或者 ExMessage msg;
定义鼠标状态函数 获取在某一时刻 各个按钮内的鼠标状态
之后 获取到鼠标的位置 是否在按钮中间 并对鼠标是否点击进行判断 并返回枚举变量
鼠标状态判断函数的参数是按钮的结构体变量,也就是对每个按钮分别判断 以按钮为视角 看鼠标是否在该按钮内 一个按钮一个按钮的方式进行判断
参数分别是三个按钮 返回值分别是在目前的时刻 鼠标在三个按钮的状态
在绘图函数里调用判断鼠标状态
if(peekmessage(&msg,EX_MOUSE))用来判断鼠标是否点击在当前程序 有可能鼠标在该程序以外的地方操作
鼠标经过时变色
首先对按钮的绘制函数进行颜色的参数设置,方便后续更改 注意 颜色宏定义的类型是int类型
注意画按钮的函数 参数先添加一个颜色变量
之后 函数体里填充按钮颜色的参数也要改为buttoncolor 不可以再使用自己规定死的颜色了
之后 将状态整数放在while外面 使其作用域包含整个while
注意点:只要画面要进行动态变化的 都要放入循环里 所以 按钮绘图也要放入循环
然后用三目运算符进行传参数
查阅帮助文档
(以textwidth为例)
注意 要严格按照文档参数类型的规定 去写代码
如上图 规定参数是LPCTSTR类型的字符串 那么在程序中就要这样定义
将某段文字放在某个位置
用到outtextxy函数 其中参数分别为 第一个字母的x坐标 第一个字母的y坐标 文本
如下图 注意 必须是LPCTSTR类型的字符串