模板
程序执行顺序 :View类(先是ondraw函数)->MainFrm类->APP类->Doc类(数据的操作)
MainFrm类是整个模板框架
View类是客户区里面的东西,如果定义在别的类里面,就在这里需要定义一个实例(这样就是通过类来访问)点击按钮,事件发生,在面向对象里面叫做消息发送:WM_XXX.响应函数在这里就是 事件发生->接受消息->传递消息->自动调用响应函数。
类向导在写的时候会将函数的框架自动搭好,将声明加入到不同的类里面
如果写的函数是OnPaint,可以通过调用OnDraw来执行,否则只会执行这两个函数中的一个,并且都是执行OnPaint,OnDraw被屏蔽。OnPaint是调用OnDraw函数的。OnDraw里面的画图是循环画图的。
尽量都是用一个函数里面自身所有的变量或者实例。
如果库里面没有该类,再自己定义。
.h文件里面是用来声明的,.cpp文件是用来写写函数的。
选择共享DLL就会出现自己的程序在别人的机子上跑不出来,因为用到了动态的库。
AboutDlg就是那个跳出关于信息的类
添加类在项目处右击
这种方法添加的类都是将框架搭好,内容是没有的(与资源视图的MainFrm右击里面的部件添加类是不一样的,这种类的初始代码是由内容的,并且可以通过关联部件来添加类变量)在这里可以自己通过窗口的方式来添加函数和变量
添加函数或变量在类处右击
注:内联相当于是在define处定义
这种用法的目的是为了防止重复定义,而不是所谓的重复声明。
其实这一点也是很容易理解的,头文件的定义本身就是为了引入“声明”的,如果不允许重复声明,那多个文件引用同一个头文件就非法了,这显然是错误的,在C编译中,恰恰是允许也需要重复声明的,只要引用声明了,就可以远程使用该声明对应的对象(变量或函数)。
#ifndef xxx
#define xxx
unsigned char a[]={..........};
............
#endif
这里,在头文件中出现了变量定义,这种情况下,这个#ifndef才有了作用,第一次被引用时,该定义能够同时被包含,但是第二次,由于已经define xxx了,所以这个定义就不能被重复包含了,这样就能有效的避免重复定义而报错了,因为编译过程中,声明可以,但是重复定义是不可以的。
pixel
SetPixel(x,y,color)
P_1(x_1,y_1,color_1)
P_2(x_2,y_2,color_2)
画出P_1到P_2的连接直线上面的点颜色渐变,其上面的点是P,则P为(1-t)P_1+tP_2.
Invalidate()函数是代表当前窗口内容无效,然后按照消息顺序继续运行直到下一次OnDraw()
UpDate()函数不仅可以使窗口无效,还会使OnPait函数插队到前面执行(如果OnPaint函数没有内容,会执行OnDraw函数。