标签:
应用程序的每个窗口都有一个窗口过程函数与之关联,Windows通过调用窗口过程向窗口传递消息。窗口过程依据消息做相应处理,然后将控制权返还给Windows。
窗口类标识了用于处理传递给窗口的消息的窗口过程,允许多个窗口共享同一窗口类。
消息队列中存放着应用程序可能创建的所有窗口的消息,消息循环从消息队列中检索消息,并将其分发给相应的窗口过程。
#include <Windows.h> #include <mmsystem.h> #pragma comment(lib, "WINMM.LIB") LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HWND hwnd; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("HelloWin"); MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //加载图标,以供程序使用 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //加载鼠标光标,以供程序使用 wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); //获取一个图形对象,本例中用来对窗口的背景进行重绘的画刷。 wndclass.lpszClassName = szAppName; wndclass.lpszMenuName = NULL; if(!RegisterClass(&wndclass)) //为应用程序的窗口注册一个窗口类 { MessageBox(NULL, TEXT("This program requires Windows NT!"),szAppName, MB_ICONERROR);//显示消息框 return 0; } hwnd = CreateWindow(szAppName, TEXT("The Hello Program"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); //基于窗口类创建一个窗口 ShowWindow(hwnd, iCmdShow); //在屏幕中显示窗口 UpdateWindow(hwnd); //指示窗口对其自身进行重绘 while(GetMessage(&msg,NULL,0,0)) //从消息队列获取消息 { 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_CREATE: PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME | SND_ASYNC);//播放声音文件 return 0; case WM_PAINT: hdc = BeginPaint(hwnd,&ps); //标明窗口绘制开始 GetClientRect(hwnd,&rect); //获取窗口客户区的尺寸 DrawText(hdc, TEXT("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);//显示一个文本字符串 EndPaint(hwnd,&ps); //结束窗口绘制 return 0; case WM_DESTROY: PostQuitMessage(0); //将“退出”消息插入消息队列 return 0; } return DefWindowProc(hwnd,message,wParam,lParam); //执行默认的消息处理 }
前缀 | 常量 |
CS | 类风格选项 |
CW | 创建窗口选项 |
DT | 文本绘制选项 |
IDI | 图标的ID号 |
IDC | 光标的ID号 |
MB | 消息框选项 |
SND | 声音选项 |
WM | 窗口消息 |
WS | 窗口风格 |
UINT:unsigned int; WPARAM: unsigned ing; LPARAM:long。
WINAPI和CALLBACK定义为__stdcall,制定了Windows和应用程序之间函数调用的次序。
四种结构:
结构 | 含义 |
MSG | 消息结构 |
WNDCLASS | 窗口类结构 |
PAINTSTRUCT | 绘制结构 |
RECT | 矩形结构 |
句柄本质上是引用某个对象的数值,应用程序通过在其他Windows函数中使用句柄来引用相应对象。
标识符 | 含义 |
HINSTANCE | 实例句柄--程序本身 |
HWND | 窗口句柄 |
HDC | 设备环境句柄 |
匈牙利标记法:变量名以表明该变量数据类型的小写字母开始。
前缀 | 数据类型 |
c | char或WCHAR或TCHAR |
by | BYTE(无符号字符) |
n | short(短整型) |
i | int(整型) |
x,y | int,表示x坐标和y坐标 |
cx,cy | int,表示x或y的长度,c表示count(计数) |
B或f | BOOL(int);f表示flag |
w | WORD(无符号短整型) |
l | LONG(长整型) |
dw | DWORD(无符号长整型) |
fn | 函数 |
s | 字符串 |
sz | 以零结束的字符串 |
h | 句柄 |
p | 指针 |
标签:
原文地址:http://www.cnblogs.com/gongyan/p/4342527.html