/***************关于windows的窗口与消息窗口与消息.cpp : 定义应用程序的入口点。理解---窗口窗口依据窗口类来创建,窗口类表示用来处理传递给窗口的消息的窗口过程windows程序步骤固定:定义窗口--->注册窗口--->创造窗口---->显示更新窗口--->消息循环关于定义窗口: window封装好了一种数据结构来定义窗口,这就是WNDCLASS,在MSDN里面可以看到这种数据结构 typedef struct _WNDCLASS { UINT style; 窗口风格 WNDPROC lpfnWndProc; 窗口过程函数 int cbClsExtra; 额外class int cbWndExtra; 额外窗口 HINSTANCE hInstance; 实例句柄 HICON hIcon; 图标 HCURSOR hCursor; 光标 HBRUSH hbrBackground; 背景 LPCTSTR lpszMenuName; 菜单名 LPCTSTR lpszClassName; 窗口类名} WNDCLASS, *PWNDCLASS; 在定义窗口时,可以根据自己的喜好或者默认值进行设定注册窗口: 调用Window的API函数RegisterClass,在这儿,如果注册不成功就弹出一个消息 关于MessageBox---弹出消息 int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);创建窗口: 调用window的API CreateWindow()显示和更新窗口: ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd);消息循环:while (GetMessage(&msg, NULL, 0, 0))//获取消息{TranslateMessage(&msg);//翻译键盘消息DispatchMessage(&msg);//将消息发送给窗口过程}关于几个句柄hinstance 实例句柄hdc 设备环境句柄hwnd 窗口句柄关于头文件的说明PlaySound(),需要头文件和动态链接库#include <mmsystem.h>#pragma comment(lib, "WINMM.LIB")****************/#include "stdafx.h"#include "窗口与消息.h"#include<windows.h>#include <mmsystem.h>#pragma comment(lib, "WINMM.LIB")static TCHAR szAppName[]=TEXT("HelloWindows");LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WndProc;wndclass.lpszClassName=szAppName;wndclass.lpszMenuName=NULL;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("注册失败"),szAppName,MB_OKCANCEL);return 0;}hwnd = CreateWindow(szAppName, TEXT("Hello Window"), WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);// 执行应用程序初始化:ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);// 主消息循环:while (GetMessage(&msg, NULL, 0, 0))//在这儿有一个消息队列{TranslateMessage(&msg);DispatchMessage(&msg);}return (int) msg.wParam;}//// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)//// 目的: 处理主窗口的消息。//// WM_COMMAND- 处理应用程序菜单// WM_PAINT- 绘制主窗口// WM_DESTROY- 发送退出消息并返回////LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){HDC hdc;PAINTSTRUCT ps;RECT rect;switch (message){case WM_CREATE:PlaySound(TEXT("tianzhang.wav"),NULL,SND_FILENAME|SND_ASYNC);//播放声音文件MessageBox(NULL,TEXT("创建了一个窗口"),szAppName,MB_OK);break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);//窗口绘制的开始// TODO: 在此添加任意绘图代码...GetClientRect(hwnd,&rect);//获取窗口客户区的尺寸DrawText(hdc,TEXT("hello windows"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);//显示一个文本字符串EndPaint(hwnd, &ps);//窗口绘制的结束break;case WM_DESTROY:PostQuitMessage(0);//将退出消息加入消息队列break;default:return DefWindowProc(hwnd, message, wParam, lParam);//默认消息处理}return 0;}