Windows 基本窗口的生成过程
共五步
第一步:注册窗口类
第二步:创建窗口
第三步:显示窗口
第四步:消息循环
#include<windows.h>
LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[] = TEXT("HelloWin");
HWND hwnd;
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); // LoadIcon 加载图标供程序使用
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); // LoadCursor 加载鼠标指针供程序使用
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); //获取一个图形对象
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
//RegisterClass 为程序窗口注册窗口类
if ( !RegisterClass(&wndclass) )
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
//CreateWindow 根据窗口类创建一个窗口
hwnd = CreateWindow( szAppName, //windows class name
TEXT("the Hello Program"), //windows caption
WS_OVERLAPPEDWINDOW, //windows style
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 显示窗口
ShowWindow(hwnd,iCmdShow);
//UpdateWindow 指示窗口刷新自身
UpdateWindow(hwnd);
// GetMessage 从消息队列获取消息
while (GetMessage (&msg,NULL,0,0))
{
//TranslateMesage 转换某些键盘消息
TranslateMessage(&msg);
//DispatchMessage 将消息发送给窗口过程
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 播放声音文件
// PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME |SND_ASYNC);
// return 0;
case WM_PAINT:
//BeginPaint 开始窗口绘制
hdc= BeginPaint(hwnd,&ps);
//GetClientRect 获取窗口客户区的尺寸;
GetClientRect (hwnd,&rect);
//DrawText 显示文本
DrawText (hdc,TEXT("Hell,Windows98!"),-1,&rect,DT_SINGLELINE | DT_VCENTER);
//EndPaint 结束窗口绘制
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
// PostQuitMessage 在消息队列中插入一条“退出“消息
PostQuitMessage(0);
return 0;
}
//DefWindowProc 执行默认的消息处理
return DefWindowProc (hwnd,message,wParam,lParam);
}
标识符定义:
前缀: 类别:
CS 类风格
CW 创建窗口选项
DT 绘制文本选项
IDI 图标ID
IDC 光标ID
MB 消息框选项
SND 声音选项
WM 窗口消息
WS 窗口风格