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;
}