#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //窗口函数声明 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) //WinMain函数说明 { static TCHAR szAppName[] = TEXT ("HelloWin") ; HWND hwnd ; //这是信息框连续窗口的句柄 MSG msg ; //消息结构 WNDCLASS wndclass ; //窗口类结构 //下面是窗口类的定义 wndclass.style = CS_HREDRAW | CS_VREDRAW ; /* 表2.6 Windows在的类型标志 ──────┬────────────────────────── 标志 │ 说明 ──────┼────────────────────────── CS_HREDRAW │若移动或改变了窗口宽度,则刷新整个窗口 CS_VREDRAW │若移动或改变了窗口高度,则刷新整个窗口 CS_OWNDC │为该类中每个窗口分配一个单值的设备描述表(在本章后 │面详细描述) CS_DBLCLKS │当用户双击鼠标时向窗口程序发送一个双击的信息,同时, │光标位于属于该类的窗口中 CS_PARENTDC │在母窗口中设定一个子窗口的剪切区,以便于子窗口能够 │画在母窗口中 CS_SAVEBITS │在一个窗口中保存用户图像,以便于在该窗口被遮住、移 │动时不必每次刷新屏幕。但是,这样会占用更多的内存, │并且比人工同样操作要慢得多 CS_NOCLOSE │禁止系统菜单上的关闭命令 ──────┴──────────────────────────*/ wndclass.lpfnWndProc = WndProc ;//指向事件句柄的函数指针 wndclass.cbClsExtra = 0 ; //死记 wndclass.cbWndExtra = 0 ; //死记 wndclass.hInstance = hInstance ;//在启动时传递给WinMain()函数的句柄实例 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;/*加载图标供程序使用 LoadIcon()的图标标识符 ─────────┬─────────────────────── 值 │ 说明 ─────────┼─────────────────────── IDI_APPLICATION │默认应用程序图标 IDI_ASTERISK │星号 IDI_EXCLAMATION │惊叹号 IDI_HAND │手形图标 IDI_QUESTION │问号 IDI_WINLOGO │Windows徽标 ─────────┴───────────────────────*/ wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; /*加载鼠标指针供程序使用 表2.8 LoadCursor()的值 ────────┬──────────────────────── 值 │ 说明 ────────┼──────────────────────── IDC_ARROW │标准箭头 IDC_APPSTARTING │标准箭头和小沙漏标 IDC_CROSS │横标线 IDC_IBEAM │文本I型标 IDC_NO │带正斜线的圆圈 IDC_SIZEALL │四向箭头 IDC_SIZENESW │指向东北-西南方向的双向箭头 IDC_SIZENS │指向南北方向的双向箭头 IDC_SIZENWSE │指向东西方向的双向箭头 IDC_UPARROW │垂直方向的箭头 IDC_WAIT │沙漏 ────────┴────────────────────────*/ wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//获取一个图形对象,在这个例子中,是获取绘制窗口背景的刷子 窗口刷新的画笔句柄 /* 表2.9 GetStockObject()的库存对象标识符 ────────┬──────────────────────── 值 │ 说明 ────────┼──────────────────────── BLACK_BRUSH │黑色画笔 WHITE_BRUSH │白色画笔 GRAY_BRUSH │灰色画笔 LTGRAY_BRUSH │淡灰色画笔 DKGRAY_BRUSH │深灰色画笔 HOLLOW_BRUSH │空心画笔 NULL_BRUSH │无效(NULL)画笔 BLACK_PEN │黑色笔 WHITE_PEN │白色笔 NULL_PEN │无效(NULL)笔 ────────┴────────────────────────*/ wndclass.lpszMenuName = NULL ;//菜单资源名称的空终止ASCII字符串,用于加载和选用窗口 现在我们只需要将值设为NULL wndclass.lpszClassName = szAppName ;//包含相关类的文本标示符的空终止字符串 这样赋值以后,你可以使用它的名字来引用这个新的Windows类 //================================================================================================== //下面是窗口类的注册 到这步Windows类已经定义并且存放在winclass中,必须将新的类通知Windows 该功能通过RegisterClass()函数,使用一个指向新类定义的指针来完成 if (!RegisterClass (&wndclass))//为程序窗口注册窗口类 { return 0 ; } //=============================================================================================== //根据窗口类创建窗口 hwnd = CreateWindow (szAppName, //szAppName 所创建窗口的基础类名( lpClassName ) TEXT ("一个简单的Win32程序"), //窗口标题( lpWindowsName ) WS_OVERLAPPEDWINDOW, //说明窗口外观和行为的通用窗口标志( dwStyle ) /* 表2.10 dwStyle的通用类型值 ──────────┬────────────────────── 类型 │ 所创建的内容 ──────────┼────────────────────── WS_POPUP │弹出式窗口 WS_OVERLAPPED │带有标题栏和边界的重叠式窗口,类似WS_TILED类 │型 WS_OVERLAPPEDWINDOW │具有WS_OVERLAPPED、WS_CAPTION、WS_SYSMENU、 │WS_THICKFRAME、WS_MAXIMIZEBOX和 │WS_MINIMIZEBOX样式的重叠式窗口 WS_VISIBLE │开始就可见的窗口 WS_SYSMENU │标题栏上有窗口菜单的窗口 WS_BORDER │有细线边界的窗口 WS_CAPTION │有标题栏的窗口(包括WS_BORDER样式) WS_ICONIC │开始就最小化的窗口,类似WS_MINIMIZE样式 WS_MAXIMIZE │开始就最大化的窗口 WS_MAXIMIZEBOX │具有最大化按钮的窗口。不能和WS_EX_CONGTEXTHELP │样式合并。WS_SYSMENU也必须指定 MS_MINIMIZE │开始就最小化的窗口,类似WS_ICONIC样式 WS_MINIMIZEOBX │具有最小化按钮的窗口。不能和WS_EX_CONGTEXITHELP │样式合并。WS_SYSMENU也必须指定 WS_POPUPWINDOW │带有WS_BORDER、WS_POPUP和WS_SYSMENU类型的 │弹出式窗口 WS_SIZEBOX │一个窗口边界可以变化,和WS_THICKFRAME类型相同 WS_HSCROLL │带有水平滚动条的窗口 WS_VSCROLL │带有垂直滚动条的窗口 ──────────┴──────────────────────*/ CW_USEDEFAULT, //这是该窗口左上角位置的像素坐标。如果你无所谓,可使用CW_USEDEFALT,这将由Windows来决定。( x,y ) CW_USEDEFAULT, //这是以像素表示的窗口宽度和高度。如果你无所谓,可使用CW_USEDEFAULT,这将由Window来决定。( nWidth,nHeight ) CW_USEDEFAULT, //假如父窗口存在,这是指向父窗口的句柄。如果没有父窗口,桌面就是父窗口。( hWndParent ) CW_USEDEFAULT, //这是指向附属于该窗口菜单的句柄( hMenu ) NULL, NULL, hInstance, //这是应用程序实例,这里从WinMain()中使用实例。 NULL //高级特征,设置为NULL。 ( lpParam ) ) ; //========================================================================================================= //显示窗口 ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; //指示窗口刷新自身 //消息循环 while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; //转换某些键盘消息 DispatchMessage (&msg) ; //将消息发送给窗口过程 } return msg.wParam ; } //窗口函数 LRESULT CALLBACK WndProc (HWND hwnd, //这是一个Windows句柄,只有当你使用同一个Windows打开多个窗口时它才用到。这种情况下,hwnd是表明消息来自哪个窗口唯一途径。 UINT message, //这是一个实际的WinProc处理的消息标识符。这个标识符可以是众多主要消息中的一个。 WPARAM wParam, //进一步限定或细发送到msg参数中的信息。 LPARAM lParam) //进一步限定或细发送到msg参数中的信息。 { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; //开始窗口绘制 GetClientRect (hwnd, &rect) ; //获取窗口客户区的尺寸 DrawText (hdc, TEXT ("Hello World!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; //显示Hello World,可以修改程序你要显示的内容 EndPaint (hwnd, &ps) ; //结束窗口绘制 return 0 ; case WM_DESTROY: PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息 return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理 } /* 消息说明符 ────────┬──────────────────────── 类型 │ 所创建的内容 ────────┼──────────────────────── WN_ACTIVATE │当窗口被激活或者成为一个焦点时传递 WM_CLOSE │当窗口关闭时传递 WM_CREATE │当窗口第一次创建时传递该消息,以便你进行启动、初始化或资源配置工作 WM_DESTROY │当窗口可能要被破坏时该消息传递到你的窗口。通常 这是由于用户单击该窗口的关闭按钮,或者是从该窗口的系统菜单中关闭该窗口造成的。无论上述哪一种方式,都应用释放所有的资源,并且通过发送一个WM_QUIT消息来通知Windows完全终止应用程序 WM_MOVE │当窗口移动时传递 WM_MOUSEMOVE │当移动鼠标时传递 WM_KEYUP │当松开一个键时传递 WM_KEYDOWN │当按钮一下键时传递 WM_TIMER │当发生定时程序事件时传递 WM_USER │允许传递消息 WM_PAINT │当一个窗口内容需要重画时传递该消息。这可能有许多原因:用户移动窗口或改变其尺寸、弹出其他应用程序而遮挡了你的窗口等 WM_QUIT │当Windows应用程序最后结束时传递 WM_SIZE │当一个窗口改变大小时传递 ────────┴───────────────────────── */
上一篇:Message 消息机制代码..
下一篇:C++ set用法实战