|
|
windows编程通用的Win32类型和常见的结构
% R/ Y: @+ m! G- H- j E' a9 G6 g+ S) m作者:雷神 6月20日 10:00 O1 o" ?0 \5 }
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
7 n" Z9 e& s! EHANDLE 一个32位的无符号整数,用作句柄
; ~. t; l! u. } `0 f$ \& D& fHDC 设备描述句柄
& L7 Q: f% J" c# y: aHWND 一个32位的无符号整数用作窗口句柄3 |# F4 |: E/ Q5 S. x p
LONG 一个32位的带符号整数4 R: T7 u; _5 n" V d+ \
LPARAM 用于声明lParam的类型
. Q9 l; v' ~$ Q) g! M4 KLPCSTR 与LPSTR类似,但用于只读字符串指针
2 ^; X! o( o9 l9 i" Y0 k; jLPSTR 一个32位的指针
, T9 Q' e4 D& L0 WLPVIOD 一个普通指针类型等价于(viod *)7 f% D; v7 j( s7 x% s [( F5 I
LRESULT 子窗口过程的返回值: j% c ^# r. y
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数; d- P/ s$ c) U3 e
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位7 a+ S2 S) O$ k) f8 }; ~' k! t
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。 O2 I5 R4 n3 H
WINAPI 在API的定义中取代FAR PASCAL
; V* E" [1 A- d& A2 H# w0 N4 \WPARAM 关于wParam的声明
. |2 J, m. {( ~0 E7 FWin32应用程序中常见的结构$ l7 Q$ ~* B- ]2 w4 u7 A
结构 描述
, R2 ] X6 I3 I, Q% l1 \* Y! V-----------------------------------------------/ z- J1 o5 Y4 o1 @. D
MSG 定义了输入消息域
7 z0 L, R7 C* U: [! APAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
4 C! G+ q, L; |0 VRECT 定义一个矩形
$ Z h* P T* A+ y9 oWNDCLASS 定义一个窗口类/ L" A9 K1 v$ ~1 [2 P
一个例子:
4 z9 `3 t7 {) B- R" r2 O2 s0 q#include; p% U) f' `* d; t* c5 n# n" g
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
/ s+ a* G' O$ I9 K6 v3 \1 dchar szProgName[]=" rogName";6 a- _+ P& b' a" v! v/ q5 {0 N
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)% h5 k# ?1 w8 n- Q
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。9 b% x3 v7 n+ v0 [0 h
//从WINDOWS向WINMAIN()传递四个参数:- E6 X& ?' `( d5 u3 O. `7 X
//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
+ N! e- E- [/ \0 t//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
% W, q2 S' y N* Q) i' Z& U//参数3lpCmdline:
$ H& v$ V2 ^! g3 S( ` j' i& w//参数4nCmdShow:
5 l/ F1 I1 T0 {7 R! m* M{4 H" b2 Z# c. }2 G" [2 B$ Z
HWND hWnd;8 S- H( \, b& u& z
MSG lpMsg;
' c8 U9 D9 G* A- c% X) LWNDCLASS wcApp;
8 {& O" J" v4 G' L( ^: ?8 zwcApp.lpszClassName =szProgName;
* k; p8 E1 m3 _" U" i" K6 XwcApp.hInstance =hInst;5 v$ ~5 a5 @0 s& q/ n
wcApp.lpfnWndProc =WndProc;( i9 n; V4 G' }! Q; ]
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
) Y. B1 C$ X* |1 F: [wcApp.hIcon =0;) s7 D6 J5 |. a* s
wcApp.lpszMenuName =0;
# k: B/ l4 P; X* Z+ v9 W o4 SwcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
" r6 y* E- m( p" w0 gwcApp.style =CS_HREDRAW|CS_VREDRAW;
9 k) F8 N0 F$ M7 o. \9 G7 h- GwcApp.cbClsExtra =0;/ [" R8 v% l g$ E
wcApp.cbWndExtra =0;( @, U8 a4 r: e! C
if (!RegisterClass(&wcApp))2 G% ?0 v" O5 W7 _+ y! U3 N/ Y( L. P
return 0;& J. x* { S S c5 i
hWnd=CreateWindow(szProgName,"这是一个例子",
1 _! V* I. b+ v! T" J/ f- C% r/ fWS_OVERLAPPEDWINDOW,
0 W* u8 s0 m( C9 I2 E1 HCW_USEDEFAULT,
# p6 @' t" ^# Z8 q7 I7 tCW_USEDEFAULT,
/ ]8 g0 j: ~* o7 _ x; C% G/ u. k' i u0 XCW_USEDEFAULT,
3 ~/ N [$ u- {CW_USEDEFAULT,
/ x& k, {8 ]& c: w# C$ Q: J(HWND)NULL,
! h f' N h4 w2 C( }( q(HMENU)NULL,
: J/ D( e, u) i8 m4 f(HANDLE)hInst,
/ p Z+ c. o8 A' Y: v/ k/ ~7 I(LPSTR)NULL); y, S4 [; e) D) d) }
ShowWindow(hWnd,nCmdShow);/ O/ w; h4 X# x
UpdateWindow(hWnd);+ y" D% s: d& I# V
while (GetMessage(&lpMsg,0,0,0)){1 V* T6 b1 A/ a2 l
TranslateMessage(&lpMsg);0 y# K/ K# C& V
DispatchMessage(&lpMsg);
* B& G2 R+ B8 o; y9 s% ^}
. G* ~1 K9 `9 d/ hreturn (lpMsg.wParam );
! a4 r6 W6 f8 V+ F+ ?* Z}
3 r# a L" X; q+ v& q5 _: R$ KLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)2 l# J. k! ~' Q! Z' X$ Q8 `+ @
{5 q0 {$ u* O! [9 X( I. r! |# r: M
HDC hdc;
7 E4 m: [1 Z+ ^; M, R0 a F# `2 {PAINTSTRUCT ps;
* Y7 R8 f. l# w% {switch (messg)4 u! e' z) Y4 Y- h5 L% {
{0 i& ^. {. r8 [: I
case WM_PAINT:
( O& B2 g" a: [hdc=BeginPaint(hWnd,&ps);
" T9 J# Z$ D& E( H, \. y( GMoveToEx(hdc,0,0,NULL);2 R/ o9 T! x6 W
LineTo(hdc,639,429);
5 h2 C& c1 J+ {2 ~1 v9 KMoveToEx(hdc,639,0,NULL);
! F6 E& }9 ~! DLineTo(hdc,0,429);( w& ]2 ~" H- e
TextOut(hdc,120,30,"一些线",6);/ k4 A7 u( W" R$ g2 W
Chord(hdc,450,20,430,80,455,25,425,70);
, q! g& l% H% q9 N% d; s& o' _TextOut(hdc,470,30,"弧线",4);& w5 C0 n- \% [7 W5 W- P0 T( R
Pie(hdc,350,50,400,150,300,50,300,100);) l3 a0 L8 d% P2 p6 n
TextOut(hdc,350,50,"饼图",4);: L D5 i7 t7 E6 T
Ellipse(hdc,100,100,400,400);* z3 _ V5 W4 |1 }$ M4 X$ z
Ellipse(hdc,249,249,251,251);( n7 G+ b, K2 W) t6 k9 t4 k5 \
TextOut(hdc,250,250,"圆心",4);
8 P# x% i6 B, C9 xRectangle(hdc,50,300,150,400);
0 g+ f* w# x% xValidateRect(hWnd,NULL);
4 N5 ]& z; i& _; UEndPaint(hWnd,&ps);
" S. C: M$ X! tbreak;
; G* U9 c. g( X; s! ~3 l: z; Q ccase WM_DESTROY:. e" x) b( a: C2 s2 r0 H* [# W
PostQuitMessage(0);
5 R$ q& X0 Q: A$ k- ybreak;
- X( n5 L; q) ?5 c% W) M0 q# vdefault:8 j! K; p8 q1 K/ n: d% q: G
return(DefWindowProc(hWnd,messg,wParam,lParam));0 W8 i# q- d7 d. T6 o' ?
break;
- c8 b3 C/ [5 s/ f+ ~}
2 o) S0 H' n Jreturn 0;& n+ x [7 M! v& p! ?& t
}
- ^; a# T4 S7 S: u 5 s3 W7 ^. t2 E$ o
|
|