|
|
windows编程通用的Win32类型和常见的结构 * D/ U: Q% q1 W0 r0 R
作者:雷神 6月20日 10:00 5 e8 P( ]: R" K4 S
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
1 X& [" I) l& o0 d* _; P# N$ h, HHANDLE 一个32位的无符号整数,用作句柄+ Y5 e G- ~0 {
HDC 设备描述句柄3 B6 K' A* u, X6 t( Z6 W
HWND 一个32位的无符号整数用作窗口句柄) J K" r$ b" H+ ~4 V
LONG 一个32位的带符号整数
l% J, I3 n n& NLPARAM 用于声明lParam的类型
$ |- M- \; W3 q0 y1 {; j( q* y$ i9 CLPCSTR 与LPSTR类似,但用于只读字符串指针
1 r0 \- B1 l& @/ p5 s. ]9 D6 U Y' aLPSTR 一个32位的指针, M0 F& H/ f2 A6 f4 k3 w
LPVIOD 一个普通指针类型等价于(viod *)& v" W6 Q' }3 |" F" n* {* v% A
LRESULT 子窗口过程的返回值" n9 V# _% N% o& m. _! y [4 y A
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数
; P6 ~- d$ \# l9 a: N4 p* PUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
% _( B2 W) r: _3 q* i2 \+ zWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。) ^8 |% _" L8 R0 f' S) J
WINAPI 在API的定义中取代FAR PASCAL
; m% a4 }, P: ~2 X7 nWPARAM 关于wParam的声明
4 f- l% o% j l3 R' g8 O8 `. sWin32应用程序中常见的结构
; Z6 U3 L1 A* ] ~结构 描述
0 ~2 k! o) [( h& i6 H: {. u-----------------------------------------------
; ~- j6 b4 f \! WMSG 定义了输入消息域" [- p* E, w( ~; T
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构, e8 {* e `( X4 h
RECT 定义一个矩形
+ O) Q) c4 Y. [5 D8 Z5 m9 pWNDCLASS 定义一个窗口类5 N( K9 g* O( v
一个例子:
& R3 i' } c: q# o, _4 q7 s#include1 h, \8 O/ M& X( @% R
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
5 E* z$ U/ R9 A! J: Cchar szProgName[]=" rogName";
- C1 d" |: @( A! a" n# [; D5 Cint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
" I# ^" Q5 Y& v//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。& ], V0 [4 Y" G& S0 L9 J6 v& A4 u
//从WINDOWS向WINMAIN()传递四个参数:
: e4 R" T" T6 _% Y) e, d6 v1 ^//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
- \- q; Y/ {0 h0 s V//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。) Q3 E+ L' H a2 y) ]
//参数3lpCmdline:
; e8 M" _) {& V% L0 \1 M//参数4nCmdShow:
5 i) ^. [. M- P/ L{0 x6 _2 X5 ^; q
HWND hWnd;" F9 t( \) i+ I9 s r6 U3 C+ o) a
MSG lpMsg;7 C2 u6 a! z& @# u( g! m# n
WNDCLASS wcApp;' w/ ~9 V9 ^. ]8 M; L! `# k
wcApp.lpszClassName =szProgName;8 [8 X; R o) M4 `8 U/ ?5 D
wcApp.hInstance =hInst;
: l' F9 S6 g# c4 s- u3 U0 o% vwcApp.lpfnWndProc =WndProc;" Z9 X" {7 M5 v( B
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
# W" h9 T9 A4 C' B6 M, YwcApp.hIcon =0;. G4 I8 F$ C; c* N! {: d/ n
wcApp.lpszMenuName =0;
1 t+ K8 w; _( M/ TwcApp.hbrBackground =GetStockObject(WHITE_BRUSH);. o$ s5 O+ r1 R+ T% l& T v" H5 s
wcApp.style =CS_HREDRAW|CS_VREDRAW;8 X, I- v/ z. n# W5 x
wcApp.cbClsExtra =0;6 w% R6 c6 Y, j2 K0 @
wcApp.cbWndExtra =0;' Q4 m9 }4 H* o) z: e# R D
if (!RegisterClass(&wcApp))
' U; N, j5 C# H1 ureturn 0;3 U* _# a/ r+ y3 {$ S+ Y# s
hWnd=CreateWindow(szProgName,"这是一个例子",
) M- T9 m2 O& J; @2 u$ sWS_OVERLAPPEDWINDOW,7 N6 N \7 `2 V: Q
CW_USEDEFAULT,
; M3 [. `- p; T6 OCW_USEDEFAULT,
6 a" R+ y8 U4 B1 M& X' ^- N' eCW_USEDEFAULT,% v: q& h" }0 ?; D9 r
CW_USEDEFAULT,
: q9 r" |+ T# Q. k2 U$ x(HWND)NULL,
$ v0 q. i7 J F' r/ W7 t* c(HMENU)NULL,5 y3 x1 E0 t6 W; e2 C2 ?, z
(HANDLE)hInst,3 N- h# W( t* b9 M! U0 S
(LPSTR)NULL);
1 }. L1 n6 ?& S- wShowWindow(hWnd,nCmdShow);& R2 [7 A1 m0 V' v. Y
UpdateWindow(hWnd);4 ?( `9 }! c; o+ ?8 a1 m5 v
while (GetMessage(&lpMsg,0,0,0)){
; q& d4 x" u; N+ T8 x2 j) UTranslateMessage(&lpMsg);
8 ~/ e/ ~+ r' X5 G1 \1 u+ kDispatchMessage(&lpMsg);1 y1 Z0 Q0 \+ A0 T/ k4 p4 n% N) S
}
4 R F1 n0 k @7 g+ g* l6 W' M! t6 treturn (lpMsg.wParam );# Q: I' i. n7 S8 D. K
}& m5 }9 m) W* ]/ O
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)' m) s8 l- A1 G' e1 X* [8 P
{
* m3 Q! d/ |# J' bHDC hdc;# m) q3 b/ g) j* ^/ r
PAINTSTRUCT ps;+ \8 p5 m4 i8 \& F$ b4 A3 v
switch (messg)7 S% j# } h5 W2 |
{
0 o! q3 \8 ?$ P# Q" P+ _case WM_PAINT:: F- W4 J) c) c1 q! @( Z) ]* D! E
hdc=BeginPaint(hWnd,&ps);
M; U9 W( a; p3 x8 H) |; {; Q; IMoveToEx(hdc,0,0,NULL);' y: i. w: z: M" r" e" a/ C
LineTo(hdc,639,429);) k$ [% q( z+ p* ]0 _9 z
MoveToEx(hdc,639,0,NULL);$ Y1 }: c* ^7 I5 D# u! K F
LineTo(hdc,0,429);$ E! l) B# @4 c% G
TextOut(hdc,120,30,"一些线",6);
" j3 i: ^; c$ V. P" [+ C$ lChord(hdc,450,20,430,80,455,25,425,70);8 a ~% K7 q a
TextOut(hdc,470,30,"弧线",4);' O+ `- Y% y6 @! \! B
Pie(hdc,350,50,400,150,300,50,300,100);1 ~+ n9 A. R$ c2 R- c! @
TextOut(hdc,350,50,"饼图",4);
) F% v" E- G+ Q! K( c1 C$ bEllipse(hdc,100,100,400,400);
7 P6 _; ^7 d, T+ HEllipse(hdc,249,249,251,251);
/ m+ ]! S3 [! T* B. c3 L9 D* wTextOut(hdc,250,250,"圆心",4);6 M( l6 X4 _8 q4 U
Rectangle(hdc,50,300,150,400);; D- ]& U' h; G/ y7 @% t* L
ValidateRect(hWnd,NULL);% x) d# h; n( }+ }( Y
EndPaint(hWnd,&ps);
5 r6 _3 O% z# J& c; @$ R! _( Rbreak;# B! b9 E. d2 ]7 d0 |* |5 _! @, j) Z# Y
case WM_DESTROY:
* U. ~' l) X1 c/ @" v! [; IPostQuitMessage(0);
D. u' v& k3 Z% u4 lbreak;
1 [9 J" k4 N# P* [2 tdefault:3 u( N# R5 m! O
return(DefWindowProc(hWnd,messg,wParam,lParam));" w; ?4 K- y8 i+ z" M5 ?
break;
: t9 C0 b3 n0 a}; G) H8 a0 R" y* p# n
return 0;
9 e; k! ^8 M- X# ?}
" V5 N2 u+ y4 H4 j/ y ) \# J; c2 D$ A& A. u% @/ Z
|
|