|
|
windows编程通用的Win32类型和常见的结构 6 {, H. B. m1 M9 e4 z( X2 t$ M" N8 ]
作者:雷神 6月20日 10:00 ! O- i9 G4 ~* |) D
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
# x: n; ~8 `, U4 J. EHANDLE 一个32位的无符号整数,用作句柄
) h0 Y d3 H7 J/ W m5 _HDC 设备描述句柄" f4 N; y- G0 E" m: t) i0 a# S. l* ~
HWND 一个32位的无符号整数用作窗口句柄
$ Y6 b% m2 q |3 V0 R3 @LONG 一个32位的带符号整数
! H* l0 W) k5 [/ b' O( zLPARAM 用于声明lParam的类型7 n8 F: F4 J- o/ p) u2 w1 \
LPCSTR 与LPSTR类似,但用于只读字符串指针" A/ w/ c/ S- s5 K0 r3 Z
LPSTR 一个32位的指针; c4 o7 z: x! T; y1 @
LPVIOD 一个普通指针类型等价于(viod *)* q! w3 w3 \3 M+ L# |; c; ^
LRESULT 子窗口过程的返回值
( H4 C/ M8 `5 J- vNULL 一个整型的0值,常常用于激活函数的缺省动作和参数
3 N, V2 W$ M* f6 y# ~UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位9 ?. T: e, o7 L: D* h8 u
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
9 `) b) p) a" i' k0 aWINAPI 在API的定义中取代FAR PASCAL9 W9 W( I. U1 h1 i, o
WPARAM 关于wParam的声明
6 ]4 M: K" p' m) C9 ?1 t9 FWin32应用程序中常见的结构
& S& }+ b) }" q% ?/ c+ p1 c% o" a结构 描述+ T# k7 d) a& @) T8 t; i
-----------------------------------------------
8 K# t/ A( u1 a3 JMSG 定义了输入消息域
* D: t4 r, T3 g4 M5 cPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构, j' O* u- p+ W, A) C1 i
RECT 定义一个矩形
3 q2 |2 O; l: Z1 l0 Q4 YWNDCLASS 定义一个窗口类
: p' j1 I) ]4 q$ g$ [5 [; w4 J2 V9 `一个例子:4 L4 I4 o8 M, s8 z" ~! v, T! N
#include
, z/ i% r) q" l( PLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
6 t) ?+ X! V; N r7 gchar szProgName[]=" rogName";" W) L- C$ w" t$ M5 r: P2 s+ i
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)+ i% G# a1 t+ \( d
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。& W7 u5 t Q S7 P' E; w8 r/ a* ^
//从WINDOWS向WINMAIN()传递四个参数:0 L* _) Q% O9 g2 R! D! x
//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
& @" B) e! @9 J" D, F5 H! i/ f- b9 Z//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
- q' m; Z1 O1 p$ p- p _//参数3lpCmdline:; z4 e7 `4 v: x+ B, b
//参数4nCmdShow:* _, |- L# E4 E' x/ Q v
{% y: e, O! Z+ R/ ~' w
HWND hWnd;* l ], Z/ h! p& r+ C# N- d0 ~
MSG lpMsg;
9 Y5 {0 t2 `, Z6 IWNDCLASS wcApp;* m. l) y# R; W; W& c7 V& j
wcApp.lpszClassName =szProgName;9 A6 a# _ Q9 s: k9 s# e T
wcApp.hInstance =hInst;( u7 m: _; w( N8 B
wcApp.lpfnWndProc =WndProc;
# E% ? w. l& G2 T; ZwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);1 W2 n. Z7 V. v1 `2 |% h0 t
wcApp.hIcon =0;) j0 u7 a2 y' Z1 A. _
wcApp.lpszMenuName =0;6 R+ Y, i8 Y% g& ?' |
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
: O" y% R# u1 T' t' p9 M5 awcApp.style =CS_HREDRAW|CS_VREDRAW;
. v+ a: p5 p6 w* P7 q3 YwcApp.cbClsExtra =0;
. ^0 [5 _! ?2 `0 r3 J; g" h+ \wcApp.cbWndExtra =0;
$ ?8 X# k/ C& d! ]+ eif (!RegisterClass(&wcApp))
* o/ ~7 J! [$ H4 {, F' i0 zreturn 0;
4 q3 o& i3 M/ r, }/ s& EhWnd=CreateWindow(szProgName,"这是一个例子"," \! f% P3 i! c; o1 y
WS_OVERLAPPEDWINDOW,! i& B' A4 i! Y8 r, b! K3 f! e
CW_USEDEFAULT,/ f9 T2 Z+ v, w5 p; R) |( l" W$ o' D
CW_USEDEFAULT,
' A7 S$ C3 K3 ~0 oCW_USEDEFAULT,
) E6 i' b; ^! R( B, |2 FCW_USEDEFAULT,: M$ S. H( w' k4 M: r( J0 a+ W! ]) |
(HWND)NULL,
1 A! z& L/ W) _9 P8 x* k$ ?, H(HMENU)NULL,
u2 G3 n& b# L0 V5 b/ W(HANDLE)hInst,
$ O0 w" w3 ^% {(LPSTR)NULL); G. h' m! F$ B, I( I0 v& C; `
ShowWindow(hWnd,nCmdShow);2 K- ~4 s) Y$ q
UpdateWindow(hWnd);
1 `" V+ r) z0 Q+ I6 a) F$ _while (GetMessage(&lpMsg,0,0,0)){
6 | G0 [/ K7 i7 M2 N' n" v' |TranslateMessage(&lpMsg);
) K& q. M# z8 z; tDispatchMessage(&lpMsg);& y0 C7 O7 L' M
}
/ K+ Q% _9 C9 J2 Oreturn (lpMsg.wParam );9 m v* z+ }, t3 C W$ E7 \
}: i* U8 V4 @ G8 ^
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
( p U& R/ z) c% ~/ q{& W& p+ C4 K: {
HDC hdc;
5 {1 k [* f8 y( @- p5 T O- @PAINTSTRUCT ps;
A; C! r8 ?2 O1 Eswitch (messg)5 T( s' @" v% p3 n: v" F
{3 ^0 v# ^ |; u% O( ]
case WM_PAINT:
3 ]1 N$ x- d* W; }* i8 c! C: rhdc=BeginPaint(hWnd,&ps);
/ G5 l# X5 b* y: N) b8 l1 G& oMoveToEx(hdc,0,0,NULL);
' d- I3 p8 M# kLineTo(hdc,639,429);
8 l) Y$ t) @ g* u) MMoveToEx(hdc,639,0,NULL);: R2 M; @# B1 S, ]$ ~4 l- x; ]
LineTo(hdc,0,429);
4 ~7 ]; h+ L# [, d5 UTextOut(hdc,120,30,"一些线",6); A# \# Z9 h/ a
Chord(hdc,450,20,430,80,455,25,425,70);
: r7 l! F3 f# t& O& wTextOut(hdc,470,30,"弧线",4);) Q$ h6 ^: ?2 g8 M( ?5 f. X" p
Pie(hdc,350,50,400,150,300,50,300,100);9 k9 ?( \- B i" f2 `
TextOut(hdc,350,50,"饼图",4);
4 v! P8 q6 N6 r' k \* t4 xEllipse(hdc,100,100,400,400);! s9 s8 l1 h0 A; t. X
Ellipse(hdc,249,249,251,251);
4 q5 b r, h. S( ^; pTextOut(hdc,250,250,"圆心",4);- H# f' N, i2 }# |" J
Rectangle(hdc,50,300,150,400);
0 N3 ~+ o3 o$ {% J# aValidateRect(hWnd,NULL);; g3 V* ^) n8 H- l
EndPaint(hWnd,&ps);
+ r& M. }! T# R# Vbreak;
9 B6 k2 m, S( l4 V0 A' p( Zcase WM_DESTROY:" T' t+ P* {; j5 n( C
PostQuitMessage(0);
O5 n- `, j/ S# I9 w' Jbreak;
$ A& r1 T! |: ?" s+ pdefault:% t+ y0 V1 b* ~# y: z
return(DefWindowProc(hWnd,messg,wParam,lParam));
' h% w$ a9 ?2 n' _1 U. d/ Zbreak;2 l0 \, E: j# \! X5 E! g" O
}5 @6 e- c# r" U
return 0;
4 R! a% E1 K5 t$ D( l1 u}
7 @) `' O' b( X" m; G
V/ ?8 E' B, y. o! T# X# z |
|