第一个窗口程序
2014-07-08 16:06
169 查看
今天是学习的第二天,这是windows程序设计一书中的第一个窗口程序,照着写了一下,加了一些注释
#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, //WINAPI 相当于_stdcall HINSTANCE 为程序实例句柄; PSTR szCmdLine, int iCmdShow) //PSTR相当于 char* { static TCHAR szAppName[] = TEXT("HelloWin"); HWND hwnd; //窗口句柄; MSG msg; //消息结构体; WNDCLASS wndclass; //窗口类结构体; wndclass.style = CS_HREDRAW | CS_VREDRAW |CS_DROPSHADOW; //窗口类风格; wndclass.lpfnWndProc = WndProc;//指向基于该窗口类的所有窗口过程的地址; wndclass.cbClsExtra = 0; //预留的额外空间; wndclass.cbWndExtra = 0; //预留的额外空间; wndclass.hInstance = hInstance;//该程序的实例句柄,用来标识该程序; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);/*LoadIcon()函数用来获取预定义的图标的句柄,第一个参数用于标识自身程序,此次为预定义的故可用NULL,当使用自定义的时候必须用hInstance, 第二个参数用于标识该图标;*/ wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //与LoadIcon()相似; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //GetStockObject()返回一个画刷的句柄 HBRUSH是画刷句柄类型; wndclass.lpszMenuName = NULL; //指定窗口类的菜单; wndclass.lpszClassName = szAppName; //窗口类名,允许任意定义; RegisterClass(&wndclass); //注册窗口类,参数为指向窗口类的指针; //创建窗口; hwnd = CreateWindow(szAppName, // window class name TEXT("HelloWin"), // window caption WS_OVERLAPPEDWINDOW, //窗口风格,overlapped为层叠窗口,即标准经典样式; CW_USEDEFAULT, // initial x position 指窗口左上角相对于屏幕左上角的位置; CW_USEDEFAULT, // initial y position 指窗口左上角相对于屏幕左上角的位置; CW_USEDEFAULT, // initial x size 初始大小; CW_USEDEFAULT, // initial y size 初始大小; NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL); // creation parameters 可以将该参数指向某些数据,以便后面使用; ShowWindow(hwnd, iCmdShow); //窗口显示,第一个参数为窗口句柄,第二个参数为WinMain()接收的iCmdShow值,决定窗口的初始显示状态,值由操作系统调用WinMain()时填入; UpdateWindow(hwnd); //重绘窗口客户区,即绘制窗口区域; //消息循环,用于从消息队列中获取从键盘或鼠标得到的消息 ; while (GetMessage(&msg, NULL, 0, 0)) //将指向msg结构的指针传给windows,然后windows用从消息队列中得到的下一条消息来填充该结构体; { TranslateMessage(&msg); //将msg结构返回windows以进行一些键盘消息转换; DispatchMessage(&msg); //将该消息发送给合适的窗口过程处理函数; } return msg.wParam; //用于返回调用曾; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /*CALLBACK 相当于_stdcall 返回值为LRESULT相当于LONG,四个参数与msg结构的前四个字段对应; UINT 相当于unsigned int; WPARAM在16位系统中为word型,但32位以后定义为UINT型 LPARAM为long型 */ { HDC hdc; //设备环境句柄; PAINTSTRUCT ps; //绘制结构体; RECT rect; //矩形结构体; switch (message) { case WM_CREATE: PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC); /*第一个参数为音频文件名,第二个只有在; 使用另外资源文件时才使用,第三个参数为一组选项,学到后面再看;*/ return 0; case WM_PAINT: //绘制窗口消息; hdc = BeginPaint(hwnd, &ps); /*以此函数开始绘制 , 调用此函数使整个客户区有效,以便接下来开始绘制,返回的设备环境句柄用来指定区域; ps结构体中包含一些用来对客户区绘制的信息*/; GetClientRect(hwnd, &rect); //rect结构有四个值,其中left,top被赋为0,则right,bottom就表示客户区的高度和宽度; DrawText(hdc, TEXT("Hello, Windows8!"), -1, &rect, //绘制窗口,第三个参数为-1意思是文本字符串以0结尾; DT_SINGLELINE | DT_CENTER | DT_VCENTER); //限定文本的各项参数,单行,水平居中,垂直居中; EndPaint(hwnd, &ps); //以此函数结束绘制; return 0; case WM_DESTROY: //销毁窗口; PostQuitMessage(0); /*将WM_QUIT消息插入到程序的消息队列中,使Getmessage()函数返回一个0值,从而退出消息循环; 返回的msg.wparam传给PostQuitMessaage()*/ return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }
相关文章推荐
- *完成第一个Java的程序(Jogl的一个窗口框架)
- 第一个窗口程序
- WIN32汇编-第一个窗口程序
- VC菜菜鸟:建立第一个基于Visual C++的Windows窗口程序
- 窗口函数你的第一个Windows程序——窗口消息
- 创建你的第一个带有窗口的Windows程序
- 你的第一个Windows程序——关闭窗口
- 窗口程序你的第一个Windows程序窗口程序
- windows下32位汇编语言学习笔记 第四章 第一个窗口程序 1 (消息的使用和入口代码)
- 你的第一个Windows程序——绘制窗口
- 第一个Gtk+窗口程序编译手记(Linux平台)
- 【windows程序设计】第一个小窗口程序
- 第一个有窗口的程序,写于大一的暑假
- 窗口程序你的第一个Windows程序
- 第二篇 第一个窗口程序
- [DirectX开发学习日记]第一个DirectX窗口程序细节-(03)
- 俺的第一个C语言窗口程序!
- Win32汇编——第一个窗口程序
- 你的第一个Windows程序——窗口消息
- 你的第一个Windows程序——绘制窗口