第一课(基础知识)
1,API
Windows操作系统提供的函数:应用程序编程接口(API)API函数;
2,SDK
SDK编程: 软件开发包
SDK包含:API函数库,帮助文档,使用手册,辅助工具等等;
SDK是一个资源的集合;
3,窗口
窗口包含:
标题栏,菜单栏,系统菜单,最小化框,最大化框,边框,滚动条;
窗口分为客户区和非客户区;
4,句柄
Windows开发中,句柄用来标识一种资源,一个对象;
分类:
窗口句柄,图标句柄,光标句柄,线程句柄;
相当于是一个ID,用来唯一的标记一个对象;
5,开发版本
Debug:调试版,开发期间使用,方便调试,体积大,包含了调试信息;
Release:发布版,体积小;
6,WIN32主函数
//WinMain:窗口应用程序(GUI应用程序)的入口函数,不能少,不能改名;
//main:控制台黑窗口应用程序(CUI应用程序)入口函数;
//函数调用约定:
//WINAPI:是__stdcall的宏定义;
//Windows API函数遵守__stdcall的调用约定,必须加上;
//C语言函数默认调用约定是 :__cdecl;
//1,定义了函数参数的入栈顺序;
//2,由调用函数还是被调用函数来弹出栈(清理栈);
//__cdecl和__stdcall的入栈方式都是从右到左;
//形式:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,LPSTR lpCmdLine,
int nCmdShow)
{
return 0;
}
第一个参数:
HINSTANCE:应用程序实例句柄类型(实质为结构体指针);
hInstance:当前应用程序实例句柄,(可以理解为:代表着当前这个应用程序,本质:程序的基地址;)
第二个参数:
hInstance:当前应用程序的前一个实例句柄,16位机器使用,32位及以上无法使用,
为NULL值;
第三个参数:
LPSTR:字符串类型
lpCmdLine:命令行参数,传递一个字符串过来;
第四个参数:
nCmdShow:窗口的显示方式;
7,MessageBox
功能:弹出一个消息提示框
例子:MessageBox(NULL, L"This is my first Window", L"First", MB_OK);
第一个参数:
HWND:窗口句柄类型(唯一的标记一个窗口,相当于窗口为ID;(本质为结构体指针)
这里表示的含义是父窗口句柄;
第二个参数:
LPCTSTR:const wchar*;//宽字符:一个字符占两个字节
char:窄字符,一个字符占一个字节;
L:告诉编译器字符串是采用宽字符串编码,Unicode编码;
第三个参数:
LPCTSTR;
消息框的标题;
第四个参数:
按钮与图标的组合;
MB:MessageBox的缩写;
8,窗口处理函数基本框架
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam);
//说明:
LRESULT:LONG_PTR 即long;
CALLBACK:__stdcall;
第一个参数:
HWND:窗口句柄
第二个参数:
UINT:即unsigned int;
第三个参数:
附加信息;
WPARAM:unsigned int;
第四个参数:
附加信息;
LPARAM:long;
例子:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE://窗口关闭消息
//销毁窗口
DestroyWindow(hwnd);//会马上调用WM_DESTROY
//MessageBox(NULL, L"点了关闭", L"提示", MB_OK);
break;
case WM_DESTROY: //窗口销毁消息
PostQuitMessage(0);//发送一个WM_QUIT消息
break;
}
//默认窗口处理函数
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
9,创建一个窗口
例子:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR
lpCmdLine, int nCmdShow)
{
//流程
//1,设计窗口类
wchar_t szAppClassName[] = L"MM";
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;//窗口类风格
wc.lpfnWndProc = WindowProc;//窗口处理函数;
wc.hbrBackground = CreateSolidBrush(RGB(88, 22, 66));
wc.cbClsExtra = 0;//窗口类额外扩展空间大小
wc.cbWndExtra = 0;//窗口额外扩展空间大小
wc.hCursor = LoadCursor(NULL,MAKEINTRESOURCE(IDC_HAND));//光标句柄
wc.hIcon = NULL;//图标句柄
wc.hInstance = hInstance;//当前应用程序实例句柄
wc.lpszClassName = szAppClassName;//窗口类型名
wc.lpszMenuName = NULL;//菜单名
//2,注册窗口类
/*
ATOM <=> WORD;//字
WORD:unsigned short;
DWORD :unsigned long;//双字
*/
if (FALSE == RegisterClass(&wc))
{
MessageBox(NULL, L"注册失败", L"提示", MB_OK);
return 0;
}
//3,创建窗口
wchar_t szWindowTitle[] = L"MyFirstWindow";
HWND hWnd = CreateWindow(
szAppClassName,//窗口类型名
szWindowTitle,//窗口标题
WS_CAPTION | WS_BORDER | WS_MINIMIZEBOX |//窗口风格
WS_MAXIMIZEBOX | WS_SYSMENU,
200,//窗口左上角横坐标
100,//窗口左上角纵坐标
640,//窗口宽度
480,//窗口高度
NULL,//父窗口句柄
NULL,//菜单句柄
hInstance,//当前应用程序实例句柄类型
NULL//要传递的参数信息
);
//4,显示窗口
ShowWindow(hWnd, SW_SHOW);
//5,更新窗口
UpdateWindow(hWnd);
//6,消息循环
//Windows消息机制
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
//将虚拟键消息转换为字符消息
TranslateMessage(&msg);
//将消息分发给窗口处理函数
DispatchMessage(&msg);
}
return 0;
}