|
|
windows编程通用的Win32类型和常见的结构 ( ^. x6 u, u- c0 v; S
作者:雷神 6月20日 10:00
+ i$ F$ |% }: Z$ ]9 N& P$ S CALLBACK 在应用程序的回调例程中取代FAR PASCAL
% ~" l6 j& e! UHANDLE 一个32位的无符号整数,用作句柄
* n- `* I: d9 [8 K, zHDC 设备描述句柄 E5 u% q4 {: @1 f9 D& i
HWND 一个32位的无符号整数用作窗口句柄
3 y: D- F) R9 ^3 s5 J# V' t; NLONG 一个32位的带符号整数$ k2 ~8 R" h' Z8 I6 i+ C# V9 m
LPARAM 用于声明lParam的类型
0 p6 U3 z; G1 |LPCSTR 与LPSTR类似,但用于只读字符串指针
' b4 S! j3 t, o! |0 H! S6 k$ jLPSTR 一个32位的指针
3 p) t/ n! ?8 M* L. @# _" vLPVIOD 一个普通指针类型等价于(viod *)
0 g @! K6 M4 W' g/ x j. jLRESULT 子窗口过程的返回值
) W! e$ y) [; V3 [5 UNULL 一个整型的0值,常常用于激活函数的缺省动作和参数
' Y. p' T* [. w0 r3 t4 W4 RUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
$ N1 F! B+ |) i+ y* UWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。$ b( t' c+ c1 E- }; X
WINAPI 在API的定义中取代FAR PASCAL R9 V, t" C' F! ?& n
WPARAM 关于wParam的声明" A0 t1 `0 j3 n9 v8 b& k
Win32应用程序中常见的结构+ S$ |( T3 Z4 D/ s" K! p
结构 描述
_3 K' ~( s3 b# u! o1 c5 M6 C-----------------------------------------------9 A# u0 D9 W" a o, ?# ~
MSG 定义了输入消息域
j) U7 T. y, ^9 S' wPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
! j8 v/ O$ X9 j* f% [RECT 定义一个矩形
7 g: V9 D+ P6 U8 W, h5 H) [& V* SWNDCLASS 定义一个窗口类
/ y* l6 F% F: V* s一个例子:" q/ z4 ~, a0 N0 p# p+ h5 P I+ K
#include
3 H, H4 n |: i; K' ~# x; hLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
0 g0 l1 ~) z0 {- ?6 o' h1 Tchar szProgName[]=" rogName";2 Q7 W. v% [+ x( y6 R- o( w/ N
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)* @. L; ]4 w" g
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。4 b# G4 H! B/ s+ o) m' L" ]' k. ?; W, `
//从WINDOWS向WINMAIN()传递四个参数:
1 Z. f2 U8 n1 J$ P//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
5 h9 c7 ]+ R# N0 Y( Q//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
/ `$ f X3 J; l" O5 ^//参数3lpCmdline:
1 Z& X; G9 t1 l: @& F" l( J//参数4nCmdShow:
4 J9 I9 E; ]( C{
, @ N# B) Q6 ?$ ]HWND hWnd;
9 V/ l3 {, c( `% xMSG lpMsg;( }: ~* Z% b' Q( Z7 I/ P
WNDCLASS wcApp;
?7 S! S, L* c; h; M" D& K* OwcApp.lpszClassName =szProgName;# F* M' N5 {5 Z7 s/ u+ t
wcApp.hInstance =hInst;7 p7 _; N2 h/ O- H% C7 {
wcApp.lpfnWndProc =WndProc;0 K. i3 |; Y6 @5 c. a1 w( w
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
& c8 m$ Q# k& U; N, K+ lwcApp.hIcon =0;' Y5 U W- K, @/ l* t
wcApp.lpszMenuName =0;% j& j( y; X( \# r/ c# R9 S1 k
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);5 ~6 i5 z( M5 s! S% H- z: U
wcApp.style =CS_HREDRAW|CS_VREDRAW;' |/ k, Z/ |4 e* r* Z" A
wcApp.cbClsExtra =0;) {9 i x' m% t7 @
wcApp.cbWndExtra =0;
4 Q- U5 E, G6 Oif (!RegisterClass(&wcApp))0 _* E# y/ x% Q) S# ]5 w
return 0;
7 f; S6 T) n! H5 PhWnd=CreateWindow(szProgName,"这是一个例子",
9 ^# m# r- k6 W1 P/ k* IWS_OVERLAPPEDWINDOW,7 T+ f( b, j \5 U: \3 G5 n
CW_USEDEFAULT,
+ H* @ P% H$ y% @" X+ s- qCW_USEDEFAULT, g! x8 Q9 \! \7 I; a
CW_USEDEFAULT,
: {7 Y3 f9 S6 k8 pCW_USEDEFAULT,
. Q6 ^1 P0 K p# r(HWND)NULL,# z" J. r* @6 l; m( L- L& }9 H
(HMENU)NULL,
* c l9 w R! I J* R& o' P! m(HANDLE)hInst,
9 p, Z4 ?, L3 q+ \# C(LPSTR)NULL);% Y9 M- i ]% H- H, L- \9 T% P" a: x! U
ShowWindow(hWnd,nCmdShow);+ t- h. |$ M. U# ]1 N
UpdateWindow(hWnd);
0 I3 y# B1 C/ y; {while (GetMessage(&lpMsg,0,0,0)){
, F# I+ C) A/ i+ v4 r2 |TranslateMessage(&lpMsg);2 g. x* {6 D |. r" l! K
DispatchMessage(&lpMsg);/ B: V3 u2 T- n% R* M( U8 }
}4 f6 j s* d I8 Y2 M4 Q
return (lpMsg.wParam );
9 q( K2 s, S$ r1 _: T7 c! \, y}! ?0 l% m- ]; @6 U0 r
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
! i! O" O' E+ w' D1 O( F{
1 k' J, I. T; E d; [, ZHDC hdc;
$ {, R1 q4 `3 L: |0 L4 NPAINTSTRUCT ps;* u" ?6 a; z" ?& I% Y* g: Q: B
switch (messg)! |) q" \1 i/ H& q2 d
{4 L: g- k# h9 u* v$ b
case WM_PAINT:
2 `3 d0 _0 T; o r+ v7 h* ~. u& J' [hdc=BeginPaint(hWnd,&ps);
/ q; e8 J! f6 D5 a& Z( { J+ j6 |9 qMoveToEx(hdc,0,0,NULL);6 B$ F5 Q- h* B1 F9 I8 V7 t
LineTo(hdc,639,429);
( H: S4 J0 c' N9 eMoveToEx(hdc,639,0,NULL);/ Y; d+ Q4 y5 Q" E+ e" ]0 p5 ^& K/ J
LineTo(hdc,0,429);
6 p3 |# n) e+ F* q B% m2 oTextOut(hdc,120,30,"一些线",6); [# p+ a+ L- T. ^: I9 {7 T) B
Chord(hdc,450,20,430,80,455,25,425,70);
' _ {; I5 r: N u3 ^TextOut(hdc,470,30,"弧线",4);
* k& F5 @ v U/ u8 C9 NPie(hdc,350,50,400,150,300,50,300,100);, {- a E& g, b2 f. u3 W7 O2 |
TextOut(hdc,350,50,"饼图",4);6 s4 ?, T6 X, ~& ]$ C( D
Ellipse(hdc,100,100,400,400);' j) M' W4 O& M7 H3 }
Ellipse(hdc,249,249,251,251);
! R' U$ d) V# n0 p) K" ^( Z' hTextOut(hdc,250,250,"圆心",4);
5 R [( _1 \) _+ L/ gRectangle(hdc,50,300,150,400);
% E* [7 Z6 ]/ R0 ^1 }4 d- LValidateRect(hWnd,NULL);
1 h5 o# }. E# H# {' TEndPaint(hWnd,&ps);* e/ I: e9 R+ B9 P7 `3 ^, y
break;. q; Q2 P' E, O5 ]$ E
case WM_DESTROY:
! h+ K9 D, {4 j8 M" O; c; G6 hPostQuitMessage(0);
3 [; k% M5 h; `, f. Dbreak;0 g5 J' `$ `1 v
default:) s3 p5 b0 u4 p9 V6 C
return(DefWindowProc(hWnd,messg,wParam,lParam));8 Y4 U0 m: M4 J4 y) `* b
break;
. E: k) ]% u5 \3 C}/ Q0 ?+ h2 X$ k d* G
return 0;* }' @8 e$ S. _* f; }) ?
} ' Y$ C0 ?6 S5 m" R0 `4 k) x# y7 t3 c
4 d, @: F) c- s' Y( a |
|