Part One
First Class
1、windows编程的基础知识
2、MDI、多线程、数据库和互联网程序的开发
3、绘图、打印机、调色板等
win32 application 是普通的窗口程序,也就是所谓的gui 图形接口函数 通过鼠标控制窗口
win32 console application 类型与dos窗口的命令行 创建一个普通工程
C++头文件的作用和写法
因为c++同一个项目可能有很多的源文件,比如很多文件都要使用一个类,那么我们在每个源文件都要添加该类的声明;如果很多的话,这种维护就会很累 所以定义一个头文件 在需要用的源文件里包含这个头文件即可。
和typedef int interge typedef long interge类似
c++语言提出了头文件的概念,你只需要在头文件中声明一次,在实现文件中定义一次,在所有需要用的文件中,就只需要引用这个头文件,相当于每个文件都包含了一个声明。
关于头文件重复包含:#ifndef #define #endef 在每个.c文件中的.h内容会被该头文件中的内容替换 如果有多个.c 文件包含该头文件的话,一般不允许在头文件中定义变量和函数,目的是防止链接的时候重复定义 头文件的主要作用是当main.c中包含a.h和b.h,而b.h中又包含了a.h,这样就防止了重复定义。
#include< file >编译程序会先到标准函数库中找文件
#include”file” 编译程序会先从当前目录中找文件
在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
this指针
关于this指针的一个精典回答:
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身。
个人理解:
(ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了)
this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。
为什么需要this?因为this作用域是在类的内部,自己声明一个类的时候,还不知道实例化对象的名字,所以用this来使用对象变量的自身。在非静态成员函数中,编译器在编译的时候加上this作为隐含形参,通过this来访问各个成员(即使你没有写上this指针)。例如a.fun(1)<==等价于==>fun(&a,1)
this的使用:1)在类的非静态成员函数中返回对象的本身时候,直接用return *this(常用于操作符重载和赋值、拷贝等函数)。2)传入函数的形参与成员变量名相同时,例如:this->n = n (不能写成n=n)
compile 编译成.obj文件
build链接成可执行文件.exe .dll
Unicode和ASCII的区别
Unicode 多于一个字节 通常使用两个字节表示一个字符
ascii通常是一个字符1-127 低于128 通常是英文数字标点符号
为了全世界人民所有的文字符号进行同一编码,于是指定了UNICODE标准。
UTF-8某篇文章绝大数是英文单字节就能表示 就比较适合UTF-8
而如果大部分是中文(需要两个字节) 可能就utf-16比较合适
Part Two
参考:
http://www.cnblogs.com/mr-wid/archive/2012/10/06/2713249.html
针对下面的程序进行学习
#include<windows.h>
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpcmdLine,int nShowCmd)
{
MessageBox(NULL,TEXT("Hello"),TEXT("MessageBox"),0);
return 0;
}
关于windows.h头文件
在这个头文件中实际上已经包含了若干其他相关的头文件 其中包含的其他比较重要的头文件有:
WINDEF.H 基本数据类型定义
WINNT.H 支持Unicode的类型定义
WINBASE.H 内核函数
WINUSER.H 用户界面函数
WINGDI.H 图形设备接口函数
程序的入口
在Win32控制台程序(Win32 Console Application)中,应用程序的入口为main()函数 ,Windows程序的程序入口为WinMain()函数.
程序的入口函数在WINBASE.H作出了声明,声明如下;
int
WINAPI
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
);
WinMain的返回值类型为int WINAPI为函数的调用规则
WINDEF.H对WINAPI做了如下宏定义
#define WINAPI _stdcall
说明WinMain函数的调用规则为 _stdcall方式
WinMain函数的参数
1>WinMain的第一个参数是HINSTANCE hInstance,
句柄就是用一个四个字的唯一整数来表示一个应用程序中的不同对象或同类对象中的不同实例,诸如一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
可以这么理解, 一个应用程序中通常创建了很多的窗口、按钮、标签,或者使用了一个文件等,在程序的任何地方,只要能够获得这个被称为句柄的东西,就能找到该控件或窗口在文件中的位置,从而对其进行操作。
向主函数传递参数是操作系统的值
shutdown -s -t 60
2>MessageBox 显示一个对话框的函数
其声明如下:
int MessageBox(
HWND hWnd,//handle of owner window,窗口的一个句柄
LPCTSTR lpText,// address of text in message box,一个文本(字符串)的指针
LPCTSTR lpCaption,//address of title of message box,标题字符串的指针
UINT uType,//style of message box,对话框的风格
);
//调用形式
MessageBox(NULL,TEXT("Hello"),TEXT("MessageBox"),0);
1、HWND 是一个基本类型,和char int等同级别的,可以把它当做long型去看待。它就像是身份证号一样,人生下来政府给发个身份证号,窗口创建系统就分配一个句柄。通过身份号,可以知道人的 姓名、住址、年龄。通过句柄也就能知道窗口类,窗口指针。
2、HWND:h 是类型描述,表示句柄(handle), Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄
hWnd 属性:
返回窗体或控件的句柄(注意 OLE 容器控件不支持该属性。句柄:是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。)。
C# Csharp
Part Three
ASCII和Unicode
1、ASCII一共包含128个字符,33个控制符号,1个空格,32个符号,10个数字,26个小写字母和26个大写字母
大小规则:数字<大写字母<小写字母
不能满足其他国家的要求
2、Unicode 使用16位(2字节)的二进制编码方式来表示字符,我们知道,16位最多能表示65536个字符
创建属于自己的窗口
1、窗口 一个应用程序窗口上一般会在标题栏上显示程序的名称
2、控件(程序界面上的按钮Push Botton、文本框Text Box 列表框List Box、滚动条Scroll Bar)这些对象通常被称为控件
3、窗口类(Windows Class) 与面向对象中的类不同
在这里我们可以把窗口类理解成一个结构体,结构体的成员就是窗口的一些属性,例如窗口的标题是什么,窗口使用什么样的小图标以及窗口的风格之类的属性,一个窗口就是一个结构体的对象,结构体成员的属性。
4、消息循环
windows操作系统是以消息驱动的。消息循环是指一个应用程序在运行时,windows操作系统会主动创建一个消息队列,这个队列用来存放该程序可能创建的各种窗口的消息,当用户对应用程序进行操作时,例如点击一个按钮,调整下窗口的大小等,此时windows会立即把这一消息告诉应用程序,使应用程序能作出相应的动作。 简单来说如何获取一个按钮是否被单击,或者如何获取用户此时是否在调整窗口大小之类的代码 windows已经帮我们完成了,我们只需要等待着windows给我们发消息就可以了。
如何判断 消息类型以及处理这些消息,在代码上通常我们用while配合一个巨大的switch来完成。
5、窗口的过程函数
当一个窗口建立完成后,窗口不断接收到windows发来的消息,对于这些消息我们如何处理,也就是有了窗口过程函数或叫回调函数