以下代码是DEV C++自动生成的
#include <windows.h> /* 引用WINDOWS的头文件 */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* 这个是声明窗口的消息处理函数 */
char szClassName[ ] = "WindowsApp"; //窗口的名字.我们的程序只有一个窗口
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil) /*程序的主函数,在DOS下是MAIN,但是在WIN32下我门叫WinMain*/
{
HWND hwnd; /* 这个是我们窗口的句柄 */
MSG messages; /* 这个用来存放我们窗口的消息 是个MSG结构 */
WNDCLASSEX wincl; /* 这个是我们窗口的结构 */
/* 接下来我们对刚才声明的窗口结构赋值 */
wincl.hInstance = hThisInstance; //这个参数是程序的句柄由winmain函数返回
wincl.lpszClassName = szClassName; //窗口的名字,不用多解释
wincl.lpfnWndProc = WindowProcedure; /* 窗口消息处理函数 */
wincl.style = CS_DBLCLKS; /* 窗口样式能在 WINUSER.H找到CS_DBLCLKS相应的值 */
wincl.cbSize = sizeof (WNDCLASSEX); /*这个是窗口结构的大小,这个一般是固定的,除非需要特别的要求*/
/* 以下是定义窗口的图标和鼠标的样式,我们使用默认 */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); //默认图标
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW); //默认鼠标样式
wincl.lpszMenuName = NULL; /* 这个是菜单的句柄我们没有就选NULL */
wincl.cbClsExtra = 0; /* 这个是附加数据我们选NULL */
wincl.cbWndExtra = 0; /* 也是附加数据 也选NULL */
/* 以下是程序使用的画唰.为了方便也选默认 */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* 注册刚才的窗口结构,如果失败返回0退出RegisterClassEx是用来注册窗口结构的参数只有一个就是窗口结构 */
if (!RegisterClassEx (&wincl))
return 0;
/* 注册完成后就是画窗口了但是这时候还没有显示在屏幕里只是在内部画出来了,CreateWindowEx函数返回的是窗口句柄他是HWND类型的,他的值我们不用考虑 */
hwnd = CreateWindowEx (
0,
szClassName, /* 窗口名字,要和上面写的wincl.lpszClassName = szClassName 一样.编译器是用这个名字来找到窗口类的 */
"Windows App", /* 窗口标题上显示的名字,可以和窗口名字不一样 */
WS_OVERLAPPEDWINDOW, /* 窗口的风格.我们用默认,所以用0 在WINUSER.H 以WS_开头的是窗口风格,大家可以参考下 */
CW_USEDEFAULT, /* 窗口的显示坐标X值 选用CW_USEDEFAULT已WINDOWS的默认坐标 */
CW_USEDEFAULT, /* 窗口的显示坐标Y值 选用CW_USEDEFAULT已WINDOWS的默认坐标 */
544, /* 窗口的宽 */
375, /* 窗口的高 */
HWND_DESKTOP, /* 桌面的句柄,一般是固定的. */
NULL, /* 菜单的句柄,没有所以是NULL */
hThisInstance, /* 程序的句柄 */
NULL /* 父窗口句柄,没有父窗口所以是NULL */
);
/* 显示窗口,第一个是窗口句柄第二个是显示方式,这里采用WINMAIN传回的方式,当然也可以指定比如SW_MAXIMIZE */
ShowWindow (hwnd, nFunsterStil);
/* 进入消息循环,直到接收到了退出的消息,第一个参数是MSG类型的结构,后面的参数表示接收所有消息,后面的参数一般用来做消息过滤 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* 翻译消息, */
TranslateMessage(&messages);
/* 把消息投到消息队列并且调用窗口处理程序 */
DispatchMessage(&messages);
}
/* 如果接收到退出消息就退出 */
return messages.wParam;
}
/* 这个函数是DispatchMessage(&messages);调用的.第一个参数是窗口句柄,第二个是消息结构,第三四个是附加参数,如果是键盘消息这里就包含键盘的ASCII码值 */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* 用switch函数选择相应的过程 */
{
case WM_DESTROY:
PostQuitMessage (0); /* 接收到退出命令,把退出消息放到消息队列中 */
break;
default: /* 没有找到相应的消息采用默认处理*/
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}