第一天:Win消息机制、SDK编程基础
一、基本概念
SDK:软件开发工具包 software development kit
JDK:Java开发工具包
IDE:集成开发环境 Integrated Development Environment VS QT
API:应用程序接口 Application Programming Interface
WINAPI:Windows平台下的系统调用 windows.h,调用系统提供的特殊接口,得到系统的资源
窗口:父窗口和子窗口,客户区和非客户区
句柄:结构体类型,窗口句柄HWND,图标句柄HICO
消息队列:
消息:
窗口过程函数:
消息映射:
main()
WinMain()//WINAPI 入口地址
命令行参数:命令行中给定的参数,又称位置参数
多行注释的快捷键:先ctrl+k,再ctrl+c
取消注释的快捷键:先ctrl+k,再ctrl+u
二、winAPI窗口程序
1、定义入口函数WinMain()
2、创建一个窗口
a)设计窗口类WNDCLASS(给成员变量赋值)
b)注册窗口类(为了告诉操作系统调用哪个函数处理,告诉入口地址)
c)创建窗口类
d)显示和更新窗口
3、消息循环(通过鼠标、键盘对窗口操作,用到消息队列的处理)
4、窗口过程函数(对消息队列的处理)
MSDN(Microsoft Developer Network):winAPI,MFC(Microsoft Foundation Classes微软基础类库)
MFC参考文档(中文)
三、一个MFC程序(纯代码)
1)应用程序类 CWinApp
2)框架类 CFrameWnd
class MyApp:public CWinApp
{
public:
virtual BOOL InitInstance();
private:
};
class MyFrame:public CFrameWnd
{
public:
MyFrame();
private:
};
1)有且只有一个应用程序类对象
2)在程序入口函数实现功能 InitInstance()
A)给框架类MyFrame对象动态分配空间(自动调用它的构造函数)
a)框架类MyFrame对象构造函数里创建窗口 CWnd::Create
B)框架类对象显示窗口 CWnd::ShowWindow
C)框架类对象更新窗口 CWnd::UpdateWindow
D)保存框架类对象指针 CWinThread::m_pMainWnd
事件处理:
消息映射:
1、所操作类中,声明消息映射宏
DECLARE_MESSAGE_MAP()
2、对应的.cpp定义宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
ON_WM_LBUTTONDOWN()//如果点击鼠标左键,做处理
END_MESSAGE_MAP()
3、对应类中,消息处理函数的声明
afx_msg void OnLButtonDown(UINT, CPoint);
4、对应.cpp 消息处理函数的定义
void MyFrame::OnLButtonDown(UINT, CPoint)
四、根据向导创建工程
1、文档视图结构
文档Doc:它是一个类,专门存储数据
视图View:它是一个类,专门显示和修改数据,直接表面能看到的在这里写,比如画图
框架类Frame:一个容器,装了视图,一般菜单栏在这里写
应用程序类 App:控制流程的
2、几个作比较重要的函数
应用程序类CWinApp: InitInstance() 应用程序入口地址
框架类CFrameWnd:PreCreateWindow(CREATESTRUCT& cs) //创建窗口前调用
OnCreate(LPCREATESTRUCT lpCreateStruct) //创建窗口后,触发WM_CREATE,它是WM_CREATE消息的处理函数
视图类CView:OnDraw(CDC* pDC)//绘图
WM_PAINT 消息处理函数 OnPaint(),内部调用OnDraw(),两个函数都存在时,只有OnPaint()起作用
3、事件的添加和删除
a)框架和视图的区别
选择所需类——>右击——>属性——>消息 ——>WM_LBUTTONDOWN ——>ADD
框架相当于容器,容器装了 视图,视图相当于壁纸
五、字符集
ANSI标准的 多字节,单字节
char p[]="asddddfa";//一个字符一个字节
unicode宽字节,一个字符2个字节
TCHAR *p=L"abc"//一个字符2字节
wcslen(p)
MFC:
TCHAR:自动适应字节(条件编译),通过改变程序属性里面的“字符集”就能自适应是宽字节还是多字节
TEXT()
_T()
六、拓展
afx_xxxx:全局函数,不属于某个类特有,比如MessageBox()直接使用就可
xxxEX 、xxxW,拓展函数,比如TextOut和TextOutW用法是一样的
MFC命名规则:
类名和函数名:单词首字母大写
形参:类似 isFlag、isPressTest
成员变量:m_xxxx