/*
* 说明:演示利用windowsAPI创建窗口的过程
* 开发环境:Visual C++ 6.0
* 时间:2008-9-19
*/
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // 窗口函数声明
char szClassName[] = "windowclass"; // 窗口结构体的名称
char szAppTitle[] = "API 创建窗口实例";
INT PASCAL WinMain( // WinMain函数定义
HINSTANCE hInstance, // 应用程序当前实例句柄
HINSTANCE hPrevInstance, // 应用程序其他实例句柄
LPSTR lpszCmdParam, // 指向程序命令行参数的指针
INT nCmdShow) // 应用程序开始执行时窗口显示方式的整数值标识
{
HWND hMainWnd; // 窗口句柄
MSG msg; // 消息结构体
WNDCLASS winclass; // 窗口结构体
if(!hPrevInstance) // 判断是否已有应用程序的实例在运行,给窗口结构体的数据成员赋值来规定所要创建的窗口的特征
{
winclass.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格
winclass.lpfnWndProc = WndProc; // 窗口的处理函数
winclass.cbClsExtra = 0; // 窗口类无扩展
winclass.cbWndExtra = 0; // 窗口实例无扩展
winclass.hInstance = hInstance; // 当前应用程序的实例句柄
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 窗口的最小化图标为缺省图标
winclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口采用箭头光标
winclass.hbrBackground = GetStockObject(LTGRAY_BRUSH); // 窗口背景为浅灰
winclass.lpszClassName = szClassName; // 窗口结构体名称
winclass.lpszMenuName = NULL; // 无窗口菜单
RegisterClass(&winclass); // 注册窗口
}
// 建立窗口,并返回所创建窗口的句柄
hMainWnd = CreateWindow(
szClassName, // 窗口结构体名称
szAppTitle, // 窗口的标题
WS_OVERLAPPEDWINDOW, // 可重叠窗口
// 使用缺省值设置窗口左上角x,y坐标和窗口的宽度和高度
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
// 显示窗口
ShowWindow(hMainWnd, SW_SHOWNORMAL);
// 更新窗口
UpdateWindow(hMainWnd);
while(GetMessage(&msg, NULL, 0 , 0)) // 获取消息,填充MSG结构体
{
TranslateMessage(&msg); // 翻译键盘消息
DispatchMessage(&msg); // 向窗口程序发送消息,让窗口程序处理
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(
HWND hMainWnd,
UINT message,
WPARAM wParam,
LPARAM lParam) // 窗口函数定义
{
HDC hdc; // 设备描述表
PAINTSTRUCT ps; // 刷新区域
RECT rect; // 矩形结构
char messageLeft[] = "press mouse left button.";
char messageRight[] = "press mouse right button.";
switch(message) // 判断消息标志符
{
case WM_PAINT: // 窗口重绘
{
hdc = BeginPaint(hMainWnd, &ps);
GetClientRect(hMainWnd, &rect);
DrawText(hdc, TEXT("Using windowsAPI to creating windows application."), -1, &rect,
DT_SINGLELINE| DT_CENTER);
EndPaint(hMainWnd, &ps);
break;
}
case WM_RBUTTONDOWN: // 鼠标右键按下
{
MessageBox(GetFocus(), messageRight, API instance.", MB_OK|MB_ICONASTERISK);
break;
}
case WM_LBUTTONDOWN: // 鼠标左键按下
{
MessageBox(GetFocus(), messageLeft, API instance.", MB_OK|MB_ICONASTERISK);
break;
}
case WM_DESTROY: // 销毁窗口
{
PostQuitMessage(0);
return 0;
}
default:
break;
}
return DefWindowProc(hMainWnd, message, wParam, lParam); // 其他消息交给DefWindowProc处理
}