一、API应用程序接口
Windows API是Windows提供给开发者的函数集,提供了应用程序访问底层代码的捷径,方便开发
二、SDK,软件开发包
像win32 SDK,主要包括了API函数,帮助文档,辅助工具等。
三、数据类型
UINT unsigned int
INT32 signed int
DWORD unsigned long
WORD unsigned short
UINT_PTR WPARAM(UINT)
LONG_PTR LPARAM(LONG)
一般用于参数,并且一般是回调函数的参数
Unicode和ASCII编码:
Unicode用两个字节存储一个字符,这个字符可以用来表示任何文字(包括英文,汉字,其他国家文字)。
ASCII 一个字符用一个字节来表示(一个字节8位) 但是非字母和英文符号就需要两个字节表示a =
一个汉字是一个字符 包括任何国家的字,一个就一个字符
现在编程主流对unicode比较推荐
所以微软目前SDK中保留了2套API,用来适应不同的编码。
单字节字符和双字节字符:
char c=”a”; //单字节字符变量
wchar_t wc=L’a’; //双字节字符变量(宽字符 unicode)
windows编程中的字符和字符串类型:
CHAR(char) WCHAR(wchar_t) TCHAR
LPSTR(char*) LPWSTR(wcahr_t*) LPTSTR(根据字符集不同而意义不一样)
LPCSTR(const char*) LPCWSTR(const wchar_t*) LPCTSTR
MessageBoxA() MessageBoxW() MessageBox() 相当于-->MessageBoxT
_T() 自适应编码
_In_
_Out_
_In_opt_
_Out_opt_
只是起一个提示的作用
四、windows窗口介绍:
窗口是windows操作系统应用程序的重要元素
是系统和用户交互的接口
每个windows应用程序至少拥有一个窗口,成为主窗口
串口一般包括:标题栏、最小化框、客户区等
windows编程中 句柄可以认为是一个资源ID,标识了某个资源,包括窗口、图标、菜单等。
六、windows消息机制
windows程序是基于事件驱动的程序设计。
windows程序和操作系统的通信都是通过消息来完成。
消息机制:
每个应用程序都有一个消息队列
线程中的时间都是以一个消息的形式存在被放在消息队列中,程序要通过循环不停地从消息队列中取得消息进行相应的响应操作。
操作系统和应用程序消息交互:
用户有某个动作,操作系统捕获了这个动作,构造要给消息(MSG结构体)加入到应用程序中,其实就是加入到应用程序的消息队列中,应用程序不停地(死循环)从这个消息队列中拿出消息来处理。
七、windows窗口创建
a>> 设计窗口类、注册窗口类
b>> 创建窗口、显示窗口、更新窗口
c>> 消息循环
d>> 消息处理
回调函数:(WndProc)
说的比较抽象,不用用户自己调用,系统自动调用。
系统:不是用户自己实现的代码
系统会根据特定的情况调用我们传入的函数;
八、游戏类型的消息循环
while(msg.message != WM_QUTI)
{
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//想干嘛就干嘛,一般是更新渲染
}
}
九、消息类型
windows程序中分为很多消息,不同消息可能属于不同的类型
a>> 窗口消息:与窗口相关的消息
b>> 命令消息:用于处理用户请求,以WM_COMMAND表示的消息
c>> 控件通知消息:统一由WM_NOTIFI表示。
d>> 用户自定义消息,可以传递更复杂的消息。WM_USER
十、SendMessage()和PostMessage()
两个都是把消息放到消息队列。
SendMessage是阻塞的,它会等发送的这个消息处理完成才返回。
PostMessage是非阻塞的,只管把消息发送出去,处不处理都立即返回。
十一、DestroyWindow(hWnd); //关闭窗口
十二、PostQuitMessage(0);
十三、MoveWindow(hWnd, 0, 0, 400, 800,TRUE); //改变窗口大小
十四、手动创建菜单
HMENU hMenu = CreateMenu(); //菜单句柄
HMENU hPopMenu = CreatePopupMenu(); //创建一个弹出菜单
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hPopMenu, L”test”); //菜单项
AppendMenu(hPopMenu, MF_STRING, 2525, L”弹出个对话框”); //子菜单项
十五、控件
windows程序中,一个控件就相当于是一个window, 所以可以通过创建窗口的形式创建控件
常用控件:
按钮(button)、文本框(Edit)、下拉列表(ComboBox)、列表框(ListBox)等。
windows标准控件其实也是一个窗口。
//创建按钮
HWND hBtn = CreateWindow(_T(“Button”),
_T(“text”),
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
100, 100, 50,
hWnd, /*id*/1024,
hInstance, NULL);
//创建文本框
HWND hEdit = CreateWindow(_T(“Edit”),
_T(“This is a edit text”),
WS_CHILD | WS_VISIBLE | ES_MULTILINE,
100, 200, 300,
hWnd, (HMENU)111,
hInstance, NULL);
十六、SetWindowText(); //设置文本框文字
十七、GetWindowText(); //获取文本框内容;
十八、LoadAccelerators(hInstance, MAKEINTRSOURCE(IDC_RESID); //调入加速键表。该函数调入指定的加速键表