#include
//windows.h头文件包含了大多数windows API函数与数据结构的定义
//声明窗口处理函数
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//WinMain函数负责创建窗体与建立消息循环:
int WINAPI WinMain(HINSTANCE hInstance, //应用程序当前实例句柄
HINSTANCE hPrevInstance, //应用程序其它实例句柄,常为NULL
LPSTR ipLmdLine, //指向程序命令行参数的指针
int nShowCmd) //标识应用程序开始执行时窗口显示方式
{HWND hwnd; //窗口句柄
MSG Message; //消息名
WNDCLASS Wndclass; //定义窗口类结构
char* lpszClassName="Wnd"; // 窗口类名
char* lpszTitle="WndFrame"; // 窗口标题
//以下是对Wndclass各成员付值
Wndclass.style =0;
Wndclass.lpfnWndProc =WndProc; //指定窗口消息处理函数
Wndclass.cbClsExtra =0;
Wndclass.cbWndExtra =0;
Wndclass.hInstance =hInstance;
Wndclass.hIcon =LoadIcon(NULL,IDI_ASTERISK);
Wndclass.hCursor =LoadCursor(NULL,IDC_IBEAM);
Wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
Wndclass.lpszMenuName =NULL;
Wndclass.lpszClassName =lpszClassName;
if(!RegisterClass(&Wndclass)) //试着注册窗口类
{MessageBeep(0); //失败则响铃
return FALSE;
}
//调用CreateWindow()函数创建一个窗口
hwnd=CreateWindow(lpszClassName,
lpszTitle,
WS_VSCROLL|WS_SYSMENU,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);
ShowWindow(hwnd,SW_SHOWMAXIMIZED); //显示窗口
UpdateWindow(hwnd); //刷新窗口
while(GetMessage(&Message,NULL,0,0)) //建立消息循环
{TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam ;
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
char* szMsg="Hello";
switch(message)
{case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"You click left button?",szMsg,MB_OK)
break;
case WM_RBUTTONDOWN:
MessageBox(hwnd,"你击了右键!",szMsg,MB_OK);
break;
default:return DefWindowProc(hwnd,message,wParam,lParam);
}
return (0);
}
附录:
句柄是窗口或其它资源在系统中唯一的表识符,常用句柄有:
HWND 窗口句柄
HDC 设备环境句柄
HINSTANCE 当前实例句柄
HBITMAP 位图句柄
HCURSOR 光标句柄
HICON 图标句柄
HFONT 字体句柄
HMENU 菜单句柄
HBRUSH 画刷句柄
MSG结构的定义:
typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
MSG结构中包含了线程的消息队列中的消息信息。
成员:
hwnd:
标识了接收的消息的窗口过程所属的窗口的句柄。
Message:
指定了消息号。
WParam:
指定了消息的附加信息。具体的含义与message成员的值有关。
LParam:
指定了消息的附加信息。具体的含义与message成员的值有关。
Time:
指定了发出消息的时间。
Pt:
指定了发出消息时光标位置的屏幕坐标。
WNDCLASS数据结构的定义:
typedef tagWNDCLASS
{
UINT style; //窗口类的风格,一般为0
WNDPROC lpfnWndProc; //指向窗口函数的指针
int cbClsExtra; //分配在窗口类结构后的字节数
int cdWndExtra; //分配在窗口类实例后的字节数
INSTANCE hInstance; //应用程序的实例句柄
HICON hIcon; //窗口类的图标
HCURSOR hCursor; //窗口类的光标
HBRUSH hbrBackground; //窗口类的背景刷
LPCTSTR lpszMenuName; //窗口类的菜单资源名
LPCTSTR lpszClassName; //窗口类名
}WNDCLASS;
CreateWindow()函数原型:
HWND CreateWindow(LPCTSTR lpszClassName, //窗口类名
LPCTSTR lpszTitle, //标题
DWORD dwStyle, //窗口风格
int X, //坐标X
int Y, //坐标Y
int nWidth, //宽
int nWeight, //高
HWND hwndParent, //父窗口句柄
HMENU hMenu, //主菜单句柄
HINSTANCE hInstance, //应用程序句柄
LPVOID lpParam) //createstrect结构传给该窗口的值