/*基本窗口模型根据小甲鱼教程编写(注释自己加的)*/
/*窗口的诞生:窗口类结构-注册窗口类-创建窗口实例-显示窗口-更新窗口(不可以忽略)-消息循环*/
#include<Windows.h>//Windows编程
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//回调函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("my windows");//定义窗口类名字
HWND hwnd;//窗口的句柄(句柄是一个特殊的指针)
MSG msg;//消息机制
WNDCLASS wndclass;//窗口类结构
/*Windows的窗口都是基于窗口类创建的*/
wndclass.style=CS_HREDRAW|CS_VREDRAW;//调整高度、宽度重绘窗口(注:无法重绘也可调整窗口,但是调整后文字位置不改变)
wndclass.lpfnWndProc=WndProc;//指定窗口过程
wndclass.cbClsExtra=0;//额外空间一般为0
wndclass.cbWndExtra=0;//额外空间一般为0
wndclass.hInstance=hInstance;//句柄,与winmain第一个参数对应
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//为基于该窗口类的窗口设定一个图标,此为普通图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//为基于该窗口类的窗口设定一个鼠标指针
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//whitebrush为背景颜色,可以更改
wndclass.lpszMenuName=NULL;//菜单名字(本程序没有菜单,所以为空)
wndclass.lpszClassName=szAppName;//窗口类的名字,对应第7行
/*下边为注册*/
if(!RegisterClass(&wndclass))//判断是否是非Windows系统,如果是则提示无法运行并退出
{
MessageBox(NULL,TEXT("这个程序在Windows才能执行!"),szAppName,MB_ICONERROR);
return 0;
}
/*丰富更多个性化特征,下段结束后实例已经诞生*/
hwnd=CreateWindow(szAppName,//窗口类名称(基于哪一个窗口类)
TEXT("鱼c工作室"),//窗口标题
WS_OVERLAPPEDWINDOW,//窗口风格(也称窗口格式)
CW_USEDEFAULT,//初始x坐标(这里使用的都是默认,下边的三个也一样)
CW_USEDEFAULT,//初始y坐标
CW_USEDEFAULT,//初始x方向尺寸
CW_USEDEFAULT,//初始y方向尺寸
NULL,//父窗口句柄
NULL,//窗口菜单句柄
hInstance,//程序实例句柄
NULL);//创建参数
/*扩展:CS类风格选项,CW创建窗口选项,DT文本绘制选项,IDI图标的ID号,
IDC光标的ID号,MB消息框选项,SND声音选项,WM窗口消息,WS窗口风格*/
ShowWindow(hwnd,iCmdShow);//展示此窗口(将窗口显示出来)
UpdateWindow(hwnd);//更新窗口
/*消息队列的三点补充:1.消息队列是FIFO的形式(先进先出)2.特例:WM_PAINT,WM_TIMER,WM_QUIT,在消息队列最后
3.消息分为队列化消息和非队列化消息*/
/*下为消息循环*/
while(GetMessage(&msg,NULL,0,0))//通过此循环获得消息,若返回值为0则退出(WM_QUIT),&msg为指针,
{
TranslateMessage(&msg);//将消息进行翻译
DispatchMessage(&msg);//分派消息对应第九行
}
return msg.wParam;
}
/*回调函数*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_PAINT://绘制窗口
hdc=BeginPaint(hwnd,&ps);//绘画初始化
GetClientRect(hwnd,&rect);//获得客户区位置坐标信息
DrawText(hdc,TEXT("大家好,这是我的第一个窗口程序!"),-1,&rect,
DT_SINGLELINE|DT_CENTER|DT_VCENTER);//一行,居中,垂直居中
EndPaint(hwnd,&ps);
return 0;
//此段后加
case WM_LBUTTONDOWN://左键按下
MessageBox(NULL,TEXT("哎呀,我被按了一下"),TEXT("啊,舒服"),MB_OK);
return 0;
case WM_DESTROY://关闭的消息,下文可以部署代码(例如:保存、退出)注:不可挽回窗口(详见小甲鱼视频)
PostQuitMessage(0);//发送退出消息
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);//操作系统以默认方式处理消息
}
/*程序结束*/
就是这些了