|
windows编程通用的Win32类型和常见的结构 - E2 U2 F# o8 I1 Z; V9 i5 H4 y
作者:雷神 6月20日 10:00
; ^7 h( u/ d- X+ K CALLBACK 在应用程序的回调例程中取代FAR PASCAL' G0 j; Z+ o& E! x4 W
HANDLE 一个32位的无符号整数,用作句柄2 T! }* m- x5 \0 X& j! ] M
HDC 设备描述句柄
( ` ?3 s' E1 UHWND 一个32位的无符号整数用作窗口句柄# d2 }- V# T; P5 l1 }
LONG 一个32位的带符号整数
" C2 E, n5 R2 e s+ S% |LPARAM 用于声明lParam的类型/ G3 D" ~ k" e' i% A% ?5 K
LPCSTR 与LPSTR类似,但用于只读字符串指针
. w9 Z' _- ^. `: O u" JLPSTR 一个32位的指针3 k/ ?0 v" l# S, I7 {
LPVIOD 一个普通指针类型等价于(viod *)
: V c. h$ L4 {, S c# Q E' d9 QLRESULT 子窗口过程的返回值. K& {- x+ T5 R1 f# g1 V, z4 `
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数
' v' F9 J8 i2 p" A& F, K/ zUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
* t$ j, x5 }/ ^WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
) M- l& ~8 }( ]7 F l& d$ o; KWINAPI 在API的定义中取代FAR PASCAL' j' F. K7 h1 E* ?
WPARAM 关于wParam的声明
" @7 I( R5 z! [( j8 {$ k; p6 PWin32应用程序中常见的结构0 D3 z/ ?, V' {! E; _ @
结构 描述
' X- ~% z3 q ]. C, j$ R: y) n; \-----------------------------------------------* q( F0 E9 }8 ]0 N
MSG 定义了输入消息域
% |% B9 @# E" g3 @PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构/ [" P8 V5 S& `3 v% | c
RECT 定义一个矩形; Z8 W8 I! o0 C: s7 g* O, n) q
WNDCLASS 定义一个窗口类
/ ^* V! [+ [2 n$ S一个例子:2 R' P9 g9 [5 j* i4 J/ N& `
#include& ]8 {7 J7 o& u
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
7 c7 l7 `* G+ h' @3 R& H( l9 m4 Vchar szProgName[]=" rogName";2 Q* E) \* s+ u+ o# \! S
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
, w& D! A$ d, {; C) G+ q! [//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。1 r+ n8 s- ]8 D5 I# r2 N( s
//从WINDOWS向WINMAIN()传递四个参数:
# b9 N& E" a9 X/ i3 d5 A//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
3 L; D( o# u1 S8 j+ v6 ]" C) ^. F//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。 A1 r' L, B% S9 F' C+ v5 C8 Y
//参数3lpCmdline:
! l9 f; e$ ]3 B: S//参数4nCmdShow:
- W9 K8 O- y" j/ ?6 o/ E! M+ P{8 u: Q# J/ W* J9 B$ P0 w, f I+ \
HWND hWnd;
* f3 g2 g2 L1 v8 W# f% `. DMSG lpMsg;
& M6 r( t: ~; a; @+ S: Z1 fWNDCLASS wcApp;" x0 D) N$ \1 e4 z( M, d' R+ _
wcApp.lpszClassName =szProgName;
0 k: ~0 ~" t. R- `wcApp.hInstance =hInst;0 R( @1 _$ l# k8 v T) V, T" G/ Z
wcApp.lpfnWndProc =WndProc;+ h! D* l Q' S- H4 c
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
, S6 N* i, F! t4 N0 U, twcApp.hIcon =0;0 D9 i; S: ~0 z* j. G
wcApp.lpszMenuName =0;* i {1 o" h- K3 X
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);- Y0 y; c P: l: {/ y
wcApp.style =CS_HREDRAW|CS_VREDRAW; _7 Y# C! _7 O" N( h) h; f$ u
wcApp.cbClsExtra =0;
2 [) e& q/ ^8 n. k% PwcApp.cbWndExtra =0;6 _! q$ S1 c4 f5 T7 I0 A
if (!RegisterClass(&wcApp))
: n, f4 o a5 f; d6 e% creturn 0;# ^6 ?' v0 i1 j) Q% E5 d
hWnd=CreateWindow(szProgName,"这是一个例子",3 I, l. Y e. j+ \2 C& f
WS_OVERLAPPEDWINDOW," t! _+ A0 `9 q8 X
CW_USEDEFAULT,
5 A1 G) ?( H' C. B. ~( SCW_USEDEFAULT,* f# s, t5 k& R- l& u3 A
CW_USEDEFAULT,
8 A: k. V$ Q6 v% a/ Y6 |CW_USEDEFAULT,; B+ P7 t* }. g9 A4 y7 n* Y
(HWND)NULL,
% v; d( F% P; Z(HMENU)NULL,8 {& {9 Q8 f% O( a4 V
(HANDLE)hInst,
: K0 H" a7 o: X0 V# I) t3 Y(LPSTR)NULL);
$ y0 x+ P5 v3 i7 W, U* tShowWindow(hWnd,nCmdShow);
" R: V. X6 j& Y, n6 R' |0 hUpdateWindow(hWnd);
% p2 q* w" v; Q6 L, N, x1 Xwhile (GetMessage(&lpMsg,0,0,0)){ ^4 o$ J, A r( j* t0 Z( e7 H" ~4 \
TranslateMessage(&lpMsg);, C0 r+ R) P, P: H/ w8 c3 g. U- W: u
DispatchMessage(&lpMsg);
) [/ I4 ?! T0 x3 {}
4 {1 c7 b- ~4 ureturn (lpMsg.wParam );8 _" C4 a0 v5 @. ] L: A
}
) F( r" U! e& ?) lLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
0 Q! {# M+ |% F' S{
1 r3 q6 b0 [2 t* b% fHDC hdc;8 |' T+ p( @4 t) w2 m/ W' f
PAINTSTRUCT ps;, G4 E% ~2 b2 P0 c- ]1 X% Q
switch (messg)
" i9 F6 j4 b% _/ v{9 Y" t" P! L6 s3 y# k' H
case WM_PAINT:
3 t, a d6 j& w) k+ _hdc=BeginPaint(hWnd,&ps);
' @ k6 B/ ~8 s+ e' BMoveToEx(hdc,0,0,NULL);
& s' J; B9 Q1 j+ H eLineTo(hdc,639,429);# X) k& q* s/ k& u+ r' V" t$ e
MoveToEx(hdc,639,0,NULL);
6 R' E! T4 Q6 ^, Y8 l# x5 dLineTo(hdc,0,429);, r' K! ]& d* f
TextOut(hdc,120,30,"一些线",6);9 M7 {0 q2 @3 ?3 Q& D3 f
Chord(hdc,450,20,430,80,455,25,425,70);1 d- Q1 A' K! X+ ?1 W' l* H& F- H
TextOut(hdc,470,30,"弧线",4);
3 n2 O$ E- |' |; G- M% vPie(hdc,350,50,400,150,300,50,300,100);; J- W. J" h+ P- s8 a' f+ o
TextOut(hdc,350,50,"饼图",4);
( `9 @# {' a! k- U5 O2 FEllipse(hdc,100,100,400,400);
+ s- U n0 a, b4 y# l8 ~& KEllipse(hdc,249,249,251,251);
9 }+ @ _( x" p. @TextOut(hdc,250,250,"圆心",4);
i) K4 Z' s# j/ ~% \4 XRectangle(hdc,50,300,150,400);$ V# s8 C* G0 {- F
ValidateRect(hWnd,NULL);0 s9 K% g( a$ {; F# t1 e, u, B
EndPaint(hWnd,&ps);8 _6 n- p4 Y# P; e% P
break;
. M3 E: B; |! j S0 Mcase WM_DESTROY:
/ \' _6 r3 j8 p& G. g7 G* ^! }; @. KPostQuitMessage(0);
) ^; l/ [, H: ?. D* }7 U$ m+ vbreak;
! n' _5 D5 |" f6 S( R! gdefault:/ r5 [. X: Y! w T1 T+ ?" f& K
return(DefWindowProc(hWnd,messg,wParam,lParam));
3 c3 G- Z* X7 V" Gbreak;
! Q0 O" n( n# {$ l+ y V7 h( E- j}
. W- E" e9 i5 I7 Y* O0 X! Greturn 0;( k$ F% L& M. v1 j1 n% p' k
}
3 i: b6 j3 V. P& A( H2 m- | + s0 I3 |5 v* A8 i
|
|