|
|
windows编程通用的Win32类型和常见的结构 + M8 ]$ s3 q0 g5 }
作者:雷神 6月20日 10:00
' O `& Q0 x% Q. H) O CALLBACK 在应用程序的回调例程中取代FAR PASCAL
4 _. D( a" W, g- \3 }- |HANDLE 一个32位的无符号整数,用作句柄1 p: s8 U6 n' H2 B S" m, a% r
HDC 设备描述句柄9 | O# Q- R5 M( g6 P0 t' z
HWND 一个32位的无符号整数用作窗口句柄
/ Z1 s" t: V% W9 P4 a3 Q- ?LONG 一个32位的带符号整数
/ A- T3 B P: [# F1 l) h3 YLPARAM 用于声明lParam的类型
; }( _# P" D3 `LPCSTR 与LPSTR类似,但用于只读字符串指针* {6 g; ~, \- }; q- k
LPSTR 一个32位的指针, g6 L) i0 F" Z, s) O: l8 Q
LPVIOD 一个普通指针类型等价于(viod *)
9 M# k9 a0 n* _6 uLRESULT 子窗口过程的返回值. F/ S' d6 S/ r8 Y+ Z
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数
2 p9 z: H+ A# X+ K/ s! BUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
N3 B3 a6 V/ A6 `$ }( LWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
* ~( y( C( s. Y% J8 jWINAPI 在API的定义中取代FAR PASCAL
% w' J8 k( _- R" D+ a: D( U* X2 h. NWPARAM 关于wParam的声明
. K2 [0 l1 G% R' x5 Z. HWin32应用程序中常见的结构
/ ^ n9 H3 ~) p- W: i) M结构 描述1 @6 P% R' p# g% G) |9 ^- D
-----------------------------------------------
% C N" \9 U4 b. J4 T9 U, k2 J0 IMSG 定义了输入消息域( b) S7 p2 Y( B$ q
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构( j& h _6 R; @% s' ^- _' y
RECT 定义一个矩形
9 c" T7 e2 s3 HWNDCLASS 定义一个窗口类
G2 c2 q+ l; u5 t6 f9 ]4 \. W# K一个例子:# _$ [ d) n, H0 @% P0 ?: n
#include
. R' B$ l+ P( h% j7 M3 SLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);4 o2 ]/ [# q5 P6 R7 D5 z
char szProgName[]=" rogName";
& I. I8 u& l2 V8 e' L) Oint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)5 L) Q `: M& X9 E3 y2 g) w' E
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。
+ k$ j/ r( s( S7 N/ X% L7 N//从WINDOWS向WINMAIN()传递四个参数:* g+ z- g6 B6 j
//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
a0 n1 `& [. s. Z7 w$ o. y, F//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。& @1 v. N6 K2 U$ N/ b- e
//参数3lpCmdline:
$ ?% _: D6 j; [+ O1 p//参数4nCmdShow:+ {+ G3 r% F2 G# W- }3 r
{
7 k- r6 |8 S1 J0 q. Y' tHWND hWnd;" q7 J8 i9 i D3 E
MSG lpMsg;
; _+ i7 z" x1 oWNDCLASS wcApp;
3 D6 M& A- H" o! `8 a/ L) XwcApp.lpszClassName =szProgName;. R! n* ~% l8 `/ U$ Y( \9 `) N e
wcApp.hInstance =hInst;
& i3 m9 o& X# e# |wcApp.lpfnWndProc =WndProc;
: D# ^0 n5 ?7 e; o% \; t& B. \ KwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);6 v* ^: ]2 W- q, }" U
wcApp.hIcon =0;4 I: d1 f5 h# r4 V8 r
wcApp.lpszMenuName =0;
/ D+ ?$ ` R8 q uwcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
+ n. F" m1 c0 M2 ^wcApp.style =CS_HREDRAW|CS_VREDRAW;0 H3 v8 b$ S: c* `
wcApp.cbClsExtra =0;* |* _ T$ b ~# N3 K! i5 j
wcApp.cbWndExtra =0;
, \. k; g4 w. A8 u) M. Jif (!RegisterClass(&wcApp))4 T. @" E- _ h6 G% L
return 0;
5 c; Q* A& b. S ~, K+ f3 _hWnd=CreateWindow(szProgName,"这是一个例子",- \+ S" _) l* F" I2 ~
WS_OVERLAPPEDWINDOW,
' _. \# v6 x/ w) v3 q& V( R" UCW_USEDEFAULT,
* t3 i. w5 J. J# h! O0 \9 [& VCW_USEDEFAULT,+ k% M# U. V" F7 M0 O6 T8 E: D
CW_USEDEFAULT,# Q* _9 ?6 c; F& L
CW_USEDEFAULT,7 B8 b) D/ _* Q" W
(HWND)NULL,1 W/ I3 |* Y( l- U" m5 C3 d0 R' O
(HMENU)NULL,
4 O5 T7 H3 |+ y! C( i(HANDLE)hInst,
& T0 `6 k" X, B" C8 l& r(LPSTR)NULL);+ p8 ]$ e- e& [8 j. b7 }; b
ShowWindow(hWnd,nCmdShow);
4 F+ i+ X) P& M5 p, {9 E/ xUpdateWindow(hWnd);# _( E0 M7 f. @; O- ~7 _! i
while (GetMessage(&lpMsg,0,0,0)){
0 Q( d; Z# n' M# u$ z: iTranslateMessage(&lpMsg);
- b- D+ d% J. Q$ g. MDispatchMessage(&lpMsg);
) \6 h' q( L7 D# Z- S/ y$ O& K}
9 o; G9 h! R) k: J2 m+ w3 creturn (lpMsg.wParam );
a; c# v8 X9 w8 ^, p}
C- d6 V8 W; D: u+ v6 N+ hLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
: e; h' x! A+ o* @( b4 v5 P{
. W; g. W% {& D' z2 i- {HDC hdc;+ }6 k0 E% w; F+ ~' B
PAINTSTRUCT ps;1 X! {) E' S0 G1 l9 T7 P
switch (messg)0 R7 E( j2 g2 ^3 h
{: ?3 O) y% c. @
case WM_PAINT:
r5 ]0 `6 A6 G; @1 |. vhdc=BeginPaint(hWnd,&ps);" D, S% v! [+ b
MoveToEx(hdc,0,0,NULL); A) P9 X( N+ ~
LineTo(hdc,639,429);: b/ X. f/ Z: i- |6 V. D
MoveToEx(hdc,639,0,NULL);6 R/ @7 N1 i/ u( i# E1 G* Q
LineTo(hdc,0,429);
5 q6 E% h3 c7 k7 j9 K2 H: VTextOut(hdc,120,30,"一些线",6);
. ^ F6 o3 d; c9 _Chord(hdc,450,20,430,80,455,25,425,70);
* m+ q! I* ?. N( _4 M' E [TextOut(hdc,470,30,"弧线",4);9 [+ |9 x+ [6 c; j1 ], E
Pie(hdc,350,50,400,150,300,50,300,100);
& v/ Y' I4 n- zTextOut(hdc,350,50,"饼图",4);! J) v! E$ _! B
Ellipse(hdc,100,100,400,400);
2 m# {6 k: f7 {' Z! TEllipse(hdc,249,249,251,251);5 S, A1 Q& [& h
TextOut(hdc,250,250,"圆心",4);( t ?7 Q- W; M% K0 D) T ]6 n; }
Rectangle(hdc,50,300,150,400);" P9 i6 T4 j7 C/ Q i8 r: q. S
ValidateRect(hWnd,NULL);
" p0 J9 h) a( l, F" ?* l* r7 fEndPaint(hWnd,&ps);
( M0 X& s/ X# ^; E% Hbreak;# B' _: p/ Z9 t" ~ M
case WM_DESTROY:: h) c( `( f9 r E
PostQuitMessage(0);
5 g2 W5 t7 t0 A! r+ }( ebreak;7 z+ N7 e6 ~2 p; }" r# N
default:1 v" V7 l7 Z0 J* b4 m; Z
return(DefWindowProc(hWnd,messg,wParam,lParam));
" H( {, s. }, P$ t7 cbreak;. w9 U! e( l% e, G% s) _; v
}
/ ~) n# M% p, F) e3 jreturn 0;
- `" y( n6 O$ y! }9 E} % K# d! Z( R+ z& G
' p! L' D6 R' @* ^ |
|