数据类型
API 第一个接触到的函数就是:
int WINAPI WinMain(
HINSTANCE hInstance, // 句柄
HINSTANCE hPrevInstance, // 总是置空
LPSTR lpCmdLine, //命令行
int nCmdShow
);
这是个入门的函数,就像C++中的main函数,没有main函数就没法运行
第二个接触到的函数:
这是一个弹出的消息窗口
UINT uType :按钮的样式类型
MB_OK :确定按钮
MB_OKCANCEL:确定和取消的按钮
MB_YESNO:是和否的按钮
MB_INFORMATION:信息提示的图标
MB_WARNING:警告图标
MB_ERROR:错误标示
每个按钮也可以进行同时使用
第三个接触到的函数(重要的部分-注册窗口类):
ATOM RegisterClass( CONST WNDCLASS *lpWndClass // class data );
这里的是检查你注册的窗口,如果注册失败,则返回0,注册成功,返回非0值。
ATOM 是16进制整数,且是唯一性(整个系统中是唯一的)。
这里面所使用的参数类型 是 WNDCLASS
typedef struct _WNDCLASS { UINT style; //窗体的风格
WNDPROC lpfnWndProc; //窗口过程函数,定义了在用户在窗体中实现的功能,比如说点击,移动等 int cbClsExtra;//调用RegisterClass,注册窗口时系统就会按照此尺寸开辟一块内存 int cbWndExtra;// 调用CreateClass.创建窗口时系统会找次尺寸开辟空间 HINSTANCE hInstance; //实例句柄-WinMain参数中的句柄 HICON hIcon; //图标句柄 HCURSOR hCursor;//鼠标句柄 HBRUSH hbrBackground; //背景句柄 LPCTSTR lpszMenuName;/*
一个以null结尾的字符串指针,指定了资源类名菜单,正如它的名字出现在资源文件。如果你用一个整数来识别菜单,使用MAKEINTRESOURCE宏。如果这个成员是NULL,windows属于这个类没有默认的菜单。
*/ LPCTSTR lpszClassName;//窗体的名字 } WNDCLASS, *PWNDCLASS;
第四个接触到的函数(重要的部分-创建窗口类):
HWND CreateWindow( LPCTSTR lpClassName, // 窗口类名,与wndclass中的lpszClassName必须一致<-这是重点
LPCTSTR lpWindowName, // 第二个参数:窗体标题
DWORD dwStyle, // 第三个参数:窗体样式
int x, //窗体的位置 X
int y, //窗体的位置 y
int nWidth, //窗体的大小 宽
int nHeight, //窗体的大小 高
HWND hWndParent, // 处理到父窗口或所有者的窗口被创建。创建子窗口或一个附属窗口,提供一个有效的窗口句柄。该参数是可选的弹出窗口。
HMENU hMenu, /*菜单句柄,或指定子窗口标识符根据窗口样式。 对于一个重叠或弹出窗口,菜单句柄标识用于与窗口;它可以是NULL如果类菜单使用。
为子窗口,指定子窗口句柄标识符,一个整数值使用对话框控制通知其父母谈论事件。
应用程序决定了子窗口标识符,它必须是唯一的所有子窗口的父窗口一样。*/
HINSTANCE hInstance, // 句柄->WinMain的参数
LPVOID lpParam
);
第五/六个接触到的函数(显示窗体,更新窗体): //显示窗口 ShowWindow(hwnd,SW_FORCEMINIMIZE); //更新窗体->发送一个WM_PAINT UpdateWindow(hwnd);
第七个接触到的函数(消息队列的循环):
MSG msg; /*
GetMessage
此函数从调用线程的消息队列中取出一个消息。
此函数发送消息队列的消息直到这个消息适合检索。然后把检索到的消息赋值给MSG结构体。
第一个参数:带入一个msg
第二个参数:需要检索消息的窗体句柄。这个窗体必须属于调用线程,下面是指定的值
NULL:GetMessage检索任何属于调用线程窗体的消息,并且通过PostThreadMessage函数发送消息到调用线程
第三个参数:指定被检索的最小消息值的整数
第四个参数:指定被检索的最大消息值的整数
/
*/ TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
第八个接触到的函数(回调函数):
LRESULT CALLBACK WndProc( HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(uMsg)
{ //当有外设信息被传到窗体时
case WM_CREATE:
<-#pragma comment(lib,"WinMM.Lib") 需要使用到这个库 return 0;
}
// 绘制窗口.
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,"HELLO,这是我的第一个windows程序,真不容易啊!",-1,&rect,DT_BOTTOM);
EndPaint(hwnd,&ps);
return 0;
/*
被创建之后的消息发送到一个窗口大小后改变了。 一个窗口接收这个消息通过其WindowProc函数。
*/
case WM_SIZE:
MessageBox(NULL,"窗体被改变","窗体改变",MB_OK);
return 0;
// 关闭窗口.
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_RBUTTONDOWN:
{ //左键
int a = MessageBox(NULL,"左键","魂淡,你按了左键",MB_YESNO);
CHAR c[256] = {0};
sprintf_s(c,"%d",a); <- #include <stdio.h>
虽然这里看上去只是用了8个函数,但实际上动用了18个函数:
关于参数类别:
变量的一些命名规则:
结构 和 标示符 :