您的位置:首页 > 其它

第一个 Windows 应用程序

2009-02-16 08:40 225 查看
#include <windows.h>

//窗口过程声明

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdline, int nCmdShow)

{

const char* szWindowName = "第一个 Windows 应用程序"; //窗口标题

const char* szClassName = "WindowClass"; //窗口类名

//创建一个 WNDCLASSEX 结构体变量, 为其设置成员的值

WNDCLASSEX wndclass;

wndclass.cbSize = sizeof(WNDCLASSEX); //结构大小

wndclass.style = CS_HREDRAW | CS_VREDRAW; //水平重画,竖直重画

wndclass.lpfnWndProc = (WNDPROC)WndProc; //窗口过程

wndclass.cbClsExtra = 0; //没有额外的类内存

wndclass.cbWndExtra = 0; //没有额外的窗口内存

wndclass.hInstance = hInstance; //实例句柄

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //程序图标

wndclass.hCursor = LoadCursor(NULL, IDC_CROSS); //鼠标样式

wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH); //背景白色

wndclass.lpszMenuName = NULL; //没有菜单名

wndclass.lpszClassName = szClassName; //窗口类名

wndclass.hIconSm = NULL; //没有类的小图标

//注册 WNDCLASSEX 结构体

::RegisterClassEx(&wndclass);

//创建主窗口

HWND hWnd = ::CreateWindowEx(

0, //dwExstyle, 扩展样式

szClassName, //lpClassName, 类名

szWindowName, //lpWindowName, 标题

WS_OVERLAPPEDWINDOW, //dwStyle, 窗口风格

CW_USEDEFAULT, //X, 初始 X 坐标

CW_USEDEFAULT, //Y, 初始 Y 坐标

CW_USEDEFAULT, //nWidth, 宽度

CW_USEDEFAULT, //nHeight, 高度

NULL, //hWndParent, 父窗口句柄

NULL, //hMenu, 菜单句柄

hInstance, //hInstance, 程序实例句柄

NULL); //lpparam, 用户数据

if(hWnd == NULL)

{

::MessageBox(NULL, "创建窗口出错!", "error", MB_OK);

return FALSE;

}

//显示窗口

::ShowWindow(hWnd, nCmdShow);

//刷新窗口

::UpdateWindow(hWnd);

//消息循环

MSG msg;

while(::GetMessage(&msg, NULL, 0, 0))

{

::TranslateMessage(&msg);

::DispatchMessage(&msg);

}

return msg.wParam;

}

//窗口过程函数

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

const char* szHello = "Hello World";

switch(message)

{

//重绘窗口

case WM_PAINT:

HDC hdc;

PAINTSTRUCT ps;

hdc = ::BeginPaint(hWnd, &ps);

::TextOut(hdc, 10, 10, szHello, strlen(szHello));

::EndPaint(hWnd, &ps);

break;

//销毁窗口

case WM_DESTROY:

::PostQuitMessage(0);

break;

}

//交给系统做默认处理

return ::DefWindowProc(hWnd, message, wParam, lParam);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: