CALLBACK 在应用程序的回调例程中取代FAR PASCAL HANDLE 一个32位的无符号整数,用作句柄 HDC 设备描述句柄 HWND 一个32位的无符号整数用作窗口句柄 LONG 一个32位的带符号整数 LPARAM 用于声明lParam的类型 LPCSTR 与LPSTR类似,但用于只读字符串指针 LPSTR 一个32位的指针 LPVIOD 一个普通指针类型等价于(viod *) LRESULT 子窗口过程的返回值 NULL 一个整型的0值,常常用于激活函数的缺省动作和参数 UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位 WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。 WINAPI 在API的定义中取代FAR PASCAL WPARAM 关于wParam的声明
Win32应用程序中常见的结构
结构 描述 ----------------------------------------------- MSG 定义了输入消息域 PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构 RECT 定义一个矩形 WNDCLASS 定义一个窗口类
一个例子:
#include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); char szProgName[]="ProgName"; int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow) file://Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。 file://从WINDOWS向WINMAIN()传递四个参数: file://参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。 file://参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。 file://参数3lpCmdline: file://参数4nCmdShow: { HWND hWnd; MSG lpMsg; WNDCLASS wcApp; wcApp.lpszClassName =szProgName; wcApp.hInstance =hInst; wcApp.lpfnWndProc =WndProc; wcApp.hCursor =LoadCursor(NULL,IDC_ARROW); wcApp.hIcon =0; wcApp.lpszMenuName =0; wcApp.hbrBackground =GetStockObject(WHITE_BRUSH); wcApp.style =CS_HREDRAW|CS_VREDRAW; wcApp.cbClsExtra =0; wcApp.cbWndExtra =0; if (!RegisterClass(&wcApp)) return 0; hWnd=CreateWindow(szProgName,"这是一个例子", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL, (HMENU)NULL, (HANDLE)hInst, (LPSTR)NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while (GetMessage(&lpMsg,0,0,0)){ TranslateMessage(&lpMsg); DispatchMessage(&lpMsg); } return (lpMsg.wParam ); } LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch (messg) { case WM_PAINT: hdc=BeginPaint(hWnd,&ps); MoveToEx(hdc,0,0,NULL); LineTo(hdc,639,429); MoveToEx(hdc,639,0,NULL); LineTo(hdc,0,429); TextOut(hdc,120,30,"一些线",6); Chord(hdc,450,20,430,80,455,25,425,70); TextOut(hdc,470,30,"弧线",4); Pie(hdc,350,50,400,150,300,50,300,100); TextOut(hdc,350,50,"饼图",4); Ellipse(hdc,100,100,400,400); Ellipse(hdc,249,249,251,251); TextOut(hdc,250,250,"圆心",4); Rectangle(hdc,50,300,150,400); ValidateRect(hWnd,NULL); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd,messg,wParam,lParam)); break; } return 0; } |