|
|
windows编程通用的Win32类型和常见的结构 * j$ t0 w& G" \1 \- Y' f* l# L# J% u
作者:雷神 6月20日 10:00 4 E8 ^1 |" c" X g6 Q( F
CALLBACK 在应用程序的回调例程中取代FAR PASCAL5 F' }3 x' h- e! R1 e' C
HANDLE 一个32位的无符号整数,用作句柄/ n* G# A }; Y- P0 ]
HDC 设备描述句柄6 H! O, i( m. a R2 x% e
HWND 一个32位的无符号整数用作窗口句柄8 }' G9 z# m, E1 \6 | ^- g
LONG 一个32位的带符号整数6 l, w/ U7 U4 }8 M1 {3 O2 f' Q
LPARAM 用于声明lParam的类型
1 r! X2 |3 D6 l3 n2 y+ W5 ELPCSTR 与LPSTR类似,但用于只读字符串指针& G) z+ k$ A5 E1 T
LPSTR 一个32位的指针# N! f3 N) c) N. @
LPVIOD 一个普通指针类型等价于(viod *)
$ K/ Z3 w6 W1 m7 ILRESULT 子窗口过程的返回值9 k$ j# o+ [' W: d& w& f9 P* I$ S6 t6 V
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数2 i y" ?9 r1 q: P4 P
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
( I4 l; u+ R, v2 eWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
|0 O) f# G0 z3 H7 L* z9 fWINAPI 在API的定义中取代FAR PASCAL: f$ r/ k4 B( P! P, I
WPARAM 关于wParam的声明9 |& o) e% D$ N5 X3 Z' `: w q, Y
Win32应用程序中常见的结构
/ e$ ?% ~9 q4 x' j$ {, v结构 描述- ~" n8 J' Q/ |3 g- i. m# ]" \
-----------------------------------------------3 a" _; }4 C) v |. [
MSG 定义了输入消息域% Y/ w, O! n% y K' s+ y0 m2 W0 v. d% ]
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
+ ?7 v+ @ q* R4 J( hRECT 定义一个矩形
. Z5 b9 A; } z: f& M5 yWNDCLASS 定义一个窗口类" d$ D0 o9 Y$ I9 z' b/ d
一个例子:
0 ^7 a4 h2 k, g2 b, a! {#include/ E4 R1 w# j! L
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); t8 Q0 o' C& Z" O3 q* I0 u- R; N
char szProgName[]=" rogName";
8 P8 D1 z6 w) k3 E9 @6 Gint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
7 ]7 t& w6 r R9 y* N//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。
5 ~: Y$ z! x0 w; E//从WINDOWS向WINMAIN()传递四个参数:/ g8 Q, C5 g7 M* |3 i: V8 L
//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。) h- c% {1 Z: p2 |" D3 h+ }
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
7 U8 N8 y% o. b7 p) P4 {//参数3lpCmdline:
5 H' M) [$ k+ w; `1 e//参数4nCmdShow:
9 o c3 `4 C3 I; D{9 M! z) D& D3 I, ?
HWND hWnd;
' m1 ?& e& j3 ~MSG lpMsg;
9 J/ l& U2 x' iWNDCLASS wcApp;
1 L4 |$ ^+ _8 G' a! z1 wwcApp.lpszClassName =szProgName;$ w1 t* U6 O0 Q3 P; G
wcApp.hInstance =hInst;: p" c s2 h+ e" K* c6 d( }7 |4 O
wcApp.lpfnWndProc =WndProc;
( ~3 j* Y* F$ k) R# `5 ^$ nwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
7 G3 ?! _- e( D }1 \3 q# E/ BwcApp.hIcon =0;
9 @+ `" d! {) f/ ?' z7 m: v: w4 hwcApp.lpszMenuName =0;
1 j: v9 o5 C! s; V* X! n9 v. OwcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
. o) K+ G! s: o9 x( V3 _2 {: h# I& KwcApp.style =CS_HREDRAW|CS_VREDRAW;1 n" g; M. T3 f# j/ G0 h k
wcApp.cbClsExtra =0;# P/ r8 |7 o, }5 a \
wcApp.cbWndExtra =0;
- I% h1 ~( H. vif (!RegisterClass(&wcApp))- ^: c5 \& X" M) n8 v# t
return 0;; M1 [8 Z: a! A1 B l. R4 I0 |; M9 E& }
hWnd=CreateWindow(szProgName,"这是一个例子",
; H& g* ?' R/ ~1 J nWS_OVERLAPPEDWINDOW,
, V9 g6 M Q3 t, \9 @CW_USEDEFAULT,
" p6 d0 M* n; i: {- L' zCW_USEDEFAULT,
3 d( U) ^! O$ s8 a! D5 YCW_USEDEFAULT,
0 \: V" ^$ }* S, v" l" \7 `) \# oCW_USEDEFAULT,
; }: M& u/ r* |: C/ d( f! s! H(HWND)NULL,
. k7 ^; r( y! h: B9 Q(HMENU)NULL,
6 ?# W% X& O) s* I(HANDLE)hInst,: S# z7 n( D' K B2 C
(LPSTR)NULL);
/ n* o. k: s; {8 a- NShowWindow(hWnd,nCmdShow);, K# S# C$ A) S5 E8 r |
UpdateWindow(hWnd);! N4 G# r6 R, f5 Y! \" e) V
while (GetMessage(&lpMsg,0,0,0)){4 r" A1 I) c: Q
TranslateMessage(&lpMsg);
( S: x, x& a$ ^7 F) y* YDispatchMessage(&lpMsg);
8 ~3 P+ R! E# V3 k}
3 f! p4 ]1 _& l. `3 O' E) \return (lpMsg.wParam );$ X( o1 C5 |0 V3 |3 i2 W6 D
}
" c- i: ]. S8 c( a2 eLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)* r7 ~. W1 l2 }+ L/ J
{ N7 M9 k9 Y! H
HDC hdc;! k$ M% g! G ]( p- @8 h
PAINTSTRUCT ps;
) j7 F: f: c# e5 S/ ^* G4 J, Y- ^8 gswitch (messg)# y0 O* O4 E- w. h% B( i: @
{: c" f0 K8 F% z0 R7 M. y4 F
case WM_PAINT:+ Y5 l6 k, v9 } y5 k
hdc=BeginPaint(hWnd,&ps);9 k0 r6 U @/ J6 z! y5 o7 f: C( v
MoveToEx(hdc,0,0,NULL);
" n6 }3 |1 e' jLineTo(hdc,639,429);
. |9 n0 H' o/ r5 g; m: iMoveToEx(hdc,639,0,NULL);
+ U+ {# e% Q1 C, P8 K. F4 B5 ULineTo(hdc,0,429);
1 L+ o- h: d; v% F% H$ PTextOut(hdc,120,30,"一些线",6);# [0 R; q8 h9 ^
Chord(hdc,450,20,430,80,455,25,425,70);/ \, Z h x& W5 Z. N3 \, w( G
TextOut(hdc,470,30,"弧线",4);
0 Y% H% L( G: f& \& `2 i& EPie(hdc,350,50,400,150,300,50,300,100);4 e* o' m/ i8 e1 r2 k
TextOut(hdc,350,50,"饼图",4);
' t# n' a1 ~5 E6 L4 WEllipse(hdc,100,100,400,400);
+ I( c/ i b2 Z! r sEllipse(hdc,249,249,251,251);- g% P6 D: v' u) {
TextOut(hdc,250,250,"圆心",4);
. n$ z2 Y/ P. o+ D3 c0 w3 u, zRectangle(hdc,50,300,150,400);
8 H" D3 d9 k; z. cValidateRect(hWnd,NULL);8 d! J. P! \, j1 m# I% Q6 A9 d4 B
EndPaint(hWnd,&ps);- D2 N) s3 @% [! f9 ^/ P: B
break;8 n2 }& b( n- Y6 N
case WM_DESTROY:
) s8 ]' ^; i3 L% Y! kPostQuitMessage(0);
1 y' V8 _ S6 B' a4 O$ J# Ibreak;/ A) Z$ \. o6 a% R- g1 `, F
default:# M6 ^' o) f) ]- [
return(DefWindowProc(hWnd,messg,wParam,lParam));- N# f3 r; u6 ~2 {% b6 C
break;
0 T# Q! L+ e) x a}( r" o- p! F6 N b
return 0;
* i; Y# k# P+ \( M}
, Z; u+ U# e( e r2 Y, l5 o
" C g6 B! P% R, Q* H |
|