新建一一个项目名为AdvWin的Win32应用程序空项目,然后为其添加一个名为AdvWin的C++源文件
#include<windows.h>
char Name[]="AdvWin";
LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam);
BOOL Register(HINSTANCE hInst);
HWND Create(HINSTANCE hInst,int nCmdShow);
//程序的入口WinMain()函数
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{
MSG Msg;
if(!Register(hInst))
return FALSE;
if(!Create(hInst,nCmdShow))
return FALSE;
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
/*MSG结构体定义
typedef struct tagMSG{//msg
HWND hwnd;//所属窗口句柄
UINT message;//消息标识符
WPARAM wParam;//消息附加信息
LPARAM lParam;//消息附加信息
DWORD time;//投递到消息队列时间
POINT pt;//鼠标当前位置
}*/
//注册窗口函数
BOOL Register(HINSTANCE hInst)
{
WNDCLASS WndClass;
WndClass.style=CS_HREDRAW|CS_VREDRAW;//窗口样式
WndClass.lpfnWndProc=WndProc;//窗口过程函数名
WndClass.cbClsExtra=0;//窗口类相关的额外参数
WndClass.cbWndExtra=0;//窗口实例相关的额外参数
WndClass.hInstance=hInst;//应用程序句柄
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.lpszMenuName=NULL;//窗口菜单名
WndClass.lpszClassName=Name;//窗口类名
return (RegisterClass(&WndClass)!=0);//如果该函数返回为0则代表注册失败,非0代表注册成功
}
/*WNDCLASS结构定义
typedef struce_WNDCLASS{
UINT style;//窗口样式
WNDPROC lpfnWndProc;//窗口过程函数名
int cbClsExtra;//窗口类相关的额外参数
int cbWndExtra;//窗口实例相关的额外参数
HANDLE hInstance;//应用程序句柄
HICON hIcon;//窗口图标
HCURSOR hCursor;//窗口光标
HBRUSH hbrBackground;//窗口颜色
LPCTSTR lpszMenuName;//窗口菜单名
LPCTSTR lpszClassName;//窗口类名
}WNDCLASS;*/
/*RegisterClass函数声明
ATOM RegisterClass(
CONST WNDCLASS *lpWndClass;//窗口类地址
)*/
//创建并显示窗口函数
HWND Create(HINSTANCE hInst,int nCmdShow)
{
HWND hwnd=CreateWindow(Name,Name,WS_OVERLAPPEDWINDOW,
10,10,600,400,NULL,NULL,hInst,NULL);
if(hwnd==NULL)
return FALSE;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
return hwnd;
}
/*CreateWindow函数声明
HWND CreateWindow(
LPCTSTR lpClassName,//注册窗口类名地址
LPCTSTR lpWindowName,//窗口标题正文字符串地址
DWORD dwStyle,//窗口样式
int x,//窗口的水平位置
int y,//窗口的垂直位置
int nWidth,//窗口的宽度
int nHeight,//窗口的高度
HWND hWndParent,//父窗口的句柄
WMENU hMenu,//菜单或子窗口ID的句柄
HANDLE hInstance,//应用程序实例的句柄
LPVOID lpParam//窗口创建数据地址
);*/
void my_OnDestroy(HWND hwnd);//消息响应函数声明
//窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
switch(Message)
{
case WM_DESTROY:
my_OnDestroy(hwnd);
break;
default:
return DefWindowProc(hwnd,Message,wParam,lParam);
}
return 0;
}
//销毁窗口消息响应函数实现
void my_OnDestroy(HWND hwnd)
{
PostQuitMessage(0);
}