代码语言:javascript复制
#include <windows.h>
LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型
int APIENTRY WinMain( //APIENTRY是__stdcall的宏定义
HINSTANCE hInstance, //本模块的实例句柄
HINSTANCE hPrevInstance, //Win16留下的废物
LPSTR lpCmdLine, //命令行参数
int nCmdShow //主窗口初始化时的现实形式
)
{
char szClassName[] = "MainClass";
WNDCLASSEX wndclass; //用来描述主窗口的结构
wndclass.cbSize = sizeof(wndclass); //结构的大小
wndclass.style = CS_HREDRAW|CS_VREDRAW; //如果窗口大小,横向改变和竖向改变都会重画窗口
wndclass.lpfnWndProc = MainWndProc;//窗口函数指针
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.lpszMenuName = NULL;//不指定菜单
wndclass.lpszClassName = szClassName;//窗口类的名称
wndclass.hIconSm = NULL;//没有类的小图标
::RegisterClassEx(&wndclass);//注册这个窗口类
HWND hwnd = ::CreateWindowEx(
0,//扩展样式
szClassName,//类名
"My First Window",//窗口名。标题
WS_OVERLAPPEDWINDOW,//窗口风格
CW_USEDEFAULT,//初始X坐标
CW_USEDEFAULT,//初始Y坐标
CW_USEDEFAULT,//宽度
CW_USEDEFAULT,//高度
NULL,//父窗口句柄
NULL,//菜单句柄
hInstance,//实例句柄
NULL//用户数据
);
if(hwnd == NULL)
{
::MessageBox(NULL,"创建窗口出错","系统提示",MB_OK);
}
::ShowWindow(hwnd,nCmdShow);//显示窗口
::UpdateWindow(hwnd);//刷新窗口
MSG msg;
while(::GetMessage(&msg,NULL,0,0))
{
::TranslateMessage(&msg);//转换为键盘消息
::DispatchMessage(&msg);//将消息发送到相应的窗口函数
}
return msg.wParam;//当GetMessage返回FALSE时程序结束
}
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
char szText[] = "最简单的窗口程序";
switch(message)
{
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = ::BeginPaint(hwnd,&ps);//使无效的客户区变的有效,并取得设备环境句柄
::TextOut(hdc,10,10,szText,strlen(szText));//输出文本
::EndPaint(hwnd,&ps);
return 0;
}
case WM_DESTROY:
{
::PostQuitMessage(0);//向消息队列投递一个WM_QUIT消息,促使GET MESSAGE函数返回0,结束消息循环
return 0;
}
}
return ::DefWindowProc(hwnd,message,wParam,lParam);
}