|
|
windows编程通用的Win32类型和常见的结构 " g x* b; B* R6 x: \. H
作者:雷神 6月20日 10:00
( P2 b" L* u- T CALLBACK 在应用程序的回调例程中取代FAR PASCAL9 n6 g+ X9 W7 A6 P
HANDLE 一个32位的无符号整数,用作句柄2 |/ a5 v+ x J( U) x( h
HDC 设备描述句柄
$ Z8 x* C q/ |6 gHWND 一个32位的无符号整数用作窗口句柄9 s! k$ O8 z& N L% L/ G) u
LONG 一个32位的带符号整数4 L J4 @* g; f. s; ]. I0 j) f
LPARAM 用于声明lParam的类型
6 u! h* j& r/ y; p- m0 {LPCSTR 与LPSTR类似,但用于只读字符串指针# K( n' t# R9 J' I& f0 w( A+ L
LPSTR 一个32位的指针0 U2 m; R- B% l+ }
LPVIOD 一个普通指针类型等价于(viod *)& G- {0 e7 \2 P" E7 [% \; ]
LRESULT 子窗口过程的返回值4 `. I% H+ j: c. J# {
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数) J4 A/ t/ ]* ]! L a8 { e
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
$ x, \& t* V" G: l: hWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。0 e9 H) K1 Y6 {) l
WINAPI 在API的定义中取代FAR PASCAL
& K% X4 v; c5 `7 {7 AWPARAM 关于wParam的声明
: \: D* g5 V+ R" Y6 W$ lWin32应用程序中常见的结构
& i' g K* w' N+ C7 Z结构 描述
: u8 Z5 M: P7 {, X4 ^% {4 a-----------------------------------------------
% M. E6 X8 ?8 F6 |2 s' kMSG 定义了输入消息域9 c, V3 }" z9 b6 s
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
y$ R' @4 j* `: e; xRECT 定义一个矩形
, |/ E4 h. d: RWNDCLASS 定义一个窗口类
3 L& m5 V7 m8 N$ c6 g/ l7 k8 r* E一个例子:
- F# T+ W7 }! E5 w( a7 z, ?* q#include# e X/ [8 ~7 i; k
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
6 \. _% r8 r# k6 v( @char szProgName[]=" rogName";+ |( A" Q1 c" N! d0 {
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)4 _& ~/ u# \4 J5 m
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。
6 U5 K' B# g1 S5 K//从WINDOWS向WINMAIN()传递四个参数:
& I" d" k3 o- s- Q7 c! P( _& b. Z0 H//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。* \; b, T# N& [, [4 ]; U2 C5 r
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。3 r; M5 V1 @" i" a: M4 f
//参数3lpCmdline:* {. _2 T6 S" k* @( Z
//参数4nCmdShow:8 D, t# z3 C4 m9 r" C
{
7 a& p8 C" I2 d3 `HWND hWnd;* g6 R5 C2 g) c0 a& U0 h7 w
MSG lpMsg;2 M# J" N6 W; o8 B8 h8 I% T: Y
WNDCLASS wcApp;
) W2 D+ j* v+ qwcApp.lpszClassName =szProgName;
) } t) J& d/ r! n/ J7 g2 I$ OwcApp.hInstance =hInst;
8 @! A. r, [+ r! S* RwcApp.lpfnWndProc =WndProc;
X8 }1 e8 L1 |% F. N. PwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);- a+ {" i0 K8 p* I
wcApp.hIcon =0;/ l+ q# u F, L# p1 t
wcApp.lpszMenuName =0;
6 i) N# j1 Q) u, Y1 l, m' U3 JwcApp.hbrBackground =GetStockObject(WHITE_BRUSH);/ X! q3 J& o, \/ G; Y1 ^
wcApp.style =CS_HREDRAW|CS_VREDRAW;" m7 l0 ]& Q4 i$ }- v- R
wcApp.cbClsExtra =0;
' E, M1 W( T! c b/ ~wcApp.cbWndExtra =0;2 p }' ~: |9 Z o6 {3 g
if (!RegisterClass(&wcApp))7 h. U0 |/ D5 V- ~8 j. i
return 0;4 F6 m) ^$ }$ [5 K/ ]
hWnd=CreateWindow(szProgName,"这是一个例子",
0 D+ \/ j/ V/ M* ~6 }% |2 HWS_OVERLAPPEDWINDOW,
" _: N$ X7 d! |* P. vCW_USEDEFAULT,
9 w9 b7 a' d" G7 zCW_USEDEFAULT,
& s, ? N3 U: y+ lCW_USEDEFAULT,
4 e& k6 V& p/ sCW_USEDEFAULT,/ b& [% U* X1 r0 s4 Z5 L/ L. T
(HWND)NULL,
+ @ C" m9 Z3 s4 h2 F* \% p( g(HMENU)NULL," L! J4 J0 X6 u; q
(HANDLE)hInst,
: T5 S! z' f, |6 a+ d( p(LPSTR)NULL);
) X( I' N6 T: ZShowWindow(hWnd,nCmdShow);
. e+ Y8 u8 r. O% e9 ?3 VUpdateWindow(hWnd);
; f) U, V* r, V: A- r2 gwhile (GetMessage(&lpMsg,0,0,0)){, M8 v4 L. Y! c7 I0 A0 R
TranslateMessage(&lpMsg);
8 B( \" ~! v& k3 i: h6 ?, xDispatchMessage(&lpMsg);
4 ~5 }$ c: g; D: P; R}
( d$ X S, ]# a* q$ ?0 @return (lpMsg.wParam );1 a' x% Y7 v) Q7 {3 \+ B
}
* |5 Q: w+ y% [ t/ \( fLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
9 B, v# T( ^9 T( Q9 B{! Q3 \% |! c+ y7 I& D3 p
HDC hdc;
) C4 ~' N4 [3 H. z4 \5 E3 fPAINTSTRUCT ps;1 ]8 ` h3 m+ p& Z/ P0 t
switch (messg)# N4 y# B& Q/ Y% d, M3 S4 b4 m
{' K7 H4 f. o! j" d! V
case WM_PAINT:
* R# Z0 g% B4 C3 Phdc=BeginPaint(hWnd,&ps);+ y1 ~: h1 H* g+ V3 ?" t2 S" c2 y
MoveToEx(hdc,0,0,NULL);* D: H! r* R% p* h+ p: O
LineTo(hdc,639,429);
2 {: R5 N, D3 a& W6 YMoveToEx(hdc,639,0,NULL);4 f* J- m3 Y- Y" L& D
LineTo(hdc,0,429);- X; C% {2 }+ f, y6 I
TextOut(hdc,120,30,"一些线",6);) m" {/ I, c. _% l) l% J
Chord(hdc,450,20,430,80,455,25,425,70);
1 q7 z) R9 |1 T7 L! kTextOut(hdc,470,30,"弧线",4);8 M3 j9 W/ M& s) E p/ r2 t9 j6 @
Pie(hdc,350,50,400,150,300,50,300,100);% `9 U. R: V2 _3 f6 v
TextOut(hdc,350,50,"饼图",4);
$ v% U3 C* M9 y" S0 \Ellipse(hdc,100,100,400,400);
6 Z/ x0 ^! E6 p7 L [ UEllipse(hdc,249,249,251,251);
! [$ r5 L( }9 f+ m$ u6 R9 ~- B# PTextOut(hdc,250,250,"圆心",4);/ Z- I+ p0 B1 O
Rectangle(hdc,50,300,150,400);1 j4 H4 v$ F# b# v4 k
ValidateRect(hWnd,NULL);, m: {$ ~* {5 W, }5 j& l6 a4 g3 j
EndPaint(hWnd,&ps);
6 r3 Z: @5 c9 O2 e3 ^* G1 F5 S1 Ebreak;
6 A: o1 F9 f& u9 c! Wcase WM_DESTROY:3 z& M+ t( {! R+ A
PostQuitMessage(0);
5 f- J- Q, O& N* c* y, Lbreak;
: U" \6 b- a* Bdefault:
2 K0 ~. }8 V) I$ Q- r0 O5 q: _return(DefWindowProc(hWnd,messg,wParam,lParam));
\0 e9 G9 G/ Nbreak;
) u$ y4 _8 S" c9 Y( F}8 [8 }7 c) J" O
return 0;" U4 q( g( P: Z4 ]7 ?0 C6 E% V6 k
} 3 H& I! l& v" M5 l7 F9 o
6 `! G8 W' S* {" S |
|