|
windows编程通用的Win32类型和常见的结构
! C, y. b) n( Z& L% L7 M+ v, @% v作者:雷神 6月20日 10:00 6 e7 ]' O1 ] A( b: a8 h
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
2 g+ ^: L' t0 ?HANDLE 一个32位的无符号整数,用作句柄$ P* O2 |' W I
HDC 设备描述句柄
! O7 C: X4 Y. X* v) A6 v2 Q; RHWND 一个32位的无符号整数用作窗口句柄' ?3 U2 @% c2 o% x- o& u1 @6 G% W
LONG 一个32位的带符号整数
$ T+ E1 \% w8 ~# |/ S gLPARAM 用于声明lParam的类型
8 z% D7 t$ ^) X/ V; I7 i0 w$ dLPCSTR 与LPSTR类似,但用于只读字符串指针
8 Y1 r! J0 q6 |+ ~ b5 k6 n- pLPSTR 一个32位的指针
% q! N* i, ~' G8 @; MLPVIOD 一个普通指针类型等价于(viod *)
) |$ \$ C6 A; W8 i0 N1 g" b6 ], }LRESULT 子窗口过程的返回值
: U; O: G5 j. D6 ONULL 一个整型的0值,常常用于激活函数的缺省动作和参数* c: o7 K/ n/ Z6 G! _4 [/ E
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
6 Z% F v y! x3 T( Y# i" tWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。1 ]+ Y- I- `3 K$ \! d5 l
WINAPI 在API的定义中取代FAR PASCAL
, {" f2 W/ r: _, E; fWPARAM 关于wParam的声明
' b7 X& h/ U; q6 ~Win32应用程序中常见的结构
7 S& m: _' X! D6 g M3 Q& y3 t结构 描述# |8 w/ o0 C9 ?; g- z5 y2 G0 W
-----------------------------------------------* s* k$ t( W4 a
MSG 定义了输入消息域
: {/ t: R2 F8 P- x, WPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
0 {& Z( e+ h/ b9 I' h6 e# j6 u0 uRECT 定义一个矩形
( _2 [# c! z8 y$ c8 zWNDCLASS 定义一个窗口类
! m9 ~4 b {7 Q/ u% X一个例子:
& ]$ {* d1 K, ?* P; Z$ D8 ]#include
- S: v4 D8 Q8 o1 C j0 hLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);, t: i1 J. a. h x! r
char szProgName[]=" rogName";
4 y6 s/ c4 P3 I- R( B* g0 yint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
! p7 Q# q* L6 Y& C: \//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。
O6 D2 U% h, J4 E/ P9 `3 ^//从WINDOWS向WINMAIN()传递四个参数:
G8 }& P! e ^//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
5 R* ]* G) d( G0 g0 ~( `+ K& r8 ~ { y//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
( R5 ?$ s/ q: f4 X//参数3lpCmdline:
8 w9 X; K! c- e( f% b: R4 L' B//参数4nCmdShow:
1 N8 G* j/ K2 d7 F{
7 H$ h- F: [3 h1 }HWND hWnd;
1 O( k N0 I9 l: P( WMSG lpMsg;
7 x1 X1 X- \# T) c# JWNDCLASS wcApp;
- o2 J1 s' n# i' zwcApp.lpszClassName =szProgName;
5 Y: d" [/ U5 ~+ B9 ]% zwcApp.hInstance =hInst;
$ T* s1 t0 ]) i1 R! J- WwcApp.lpfnWndProc =WndProc;
9 \8 b3 Z* s& y' z) gwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
; j: i6 C8 r$ a/ ^6 zwcApp.hIcon =0;
' w" x* h3 N) S% WwcApp.lpszMenuName =0;4 g- A1 P% S& y! c0 h% d0 ^
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
: ]1 B8 y6 c' \" dwcApp.style =CS_HREDRAW|CS_VREDRAW;: [2 m2 m7 M" D+ G/ ^
wcApp.cbClsExtra =0;! l; b2 ^, Z) l9 d V7 E
wcApp.cbWndExtra =0;
8 `9 C' u8 v7 I' r+ l( m( L7 B Jif (!RegisterClass(&wcApp))+ W! `9 x, ]- r5 j1 V$ f: E
return 0;9 A8 t) ^3 H$ Y v
hWnd=CreateWindow(szProgName,"这是一个例子",0 n4 J1 t# `9 ?( j
WS_OVERLAPPEDWINDOW,
2 } P0 ^5 H4 ]. CCW_USEDEFAULT,+ ~6 `) p' o& ^+ h1 w, |. E
CW_USEDEFAULT,
+ y+ w& X W _8 ]. E0 c7 C5 f. wCW_USEDEFAULT,
8 t6 ?' K4 N* X; D: |CW_USEDEFAULT,
1 { Z! p& K# W(HWND)NULL,
+ ]. j; t% Q* t(HMENU)NULL,
6 ~; [1 [/ u& N' U0 C M& o(HANDLE)hInst,
, d3 L" _. d- @0 t5 |; s, d(LPSTR)NULL);! \& u# f$ ]2 s
ShowWindow(hWnd,nCmdShow);) r. B* l9 C- j/ N: f6 r5 A6 R
UpdateWindow(hWnd);$ J! G w ?# Y/ ]" T; I7 q
while (GetMessage(&lpMsg,0,0,0)){
6 O) D! h' t& `TranslateMessage(&lpMsg);
0 s1 P$ f# \* o1 J( w6 c, s: aDispatchMessage(&lpMsg);
9 g! b2 E% \( Q+ K( N2 w% C) ^ A+ l7 \ M}) _, N, H3 v& D' r* v
return (lpMsg.wParam ); ]& v* o: @: L9 t6 {' O
}9 w1 g0 m5 M& i7 m
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
& b% D$ n( K Z) I. a{% ], O: U! |- M
HDC hdc;1 p; m, Z) [7 @/ t
PAINTSTRUCT ps;1 s: [0 j6 }+ `7 u8 t4 U
switch (messg)7 P3 N& L3 J" i# c+ f6 T
{
2 i, F& X5 R2 e6 s wcase WM_PAINT:+ i. j& [: o7 `% D* j7 K/ x" F% ^* r
hdc=BeginPaint(hWnd,&ps);" t$ m% K; k4 q+ `
MoveToEx(hdc,0,0,NULL);
+ }) t2 {' @% G* \LineTo(hdc,639,429);' o' P. r4 p0 ^% V5 k+ z
MoveToEx(hdc,639,0,NULL);
$ {0 Y* n) |- M6 O& I" z/ _: Q6 \LineTo(hdc,0,429);
; f p" a' {, \: I( vTextOut(hdc,120,30,"一些线",6);
2 e5 @2 \0 @$ EChord(hdc,450,20,430,80,455,25,425,70);5 Q9 m) T4 @; l: W: c2 R
TextOut(hdc,470,30,"弧线",4);2 T3 ~# r4 @2 y; ~- \
Pie(hdc,350,50,400,150,300,50,300,100);9 i2 E8 `7 U( S# W$ k# t
TextOut(hdc,350,50,"饼图",4);
4 O8 q" l" d2 v' w ]# [/ j! @Ellipse(hdc,100,100,400,400);) d, c) z& K! @- J) w g
Ellipse(hdc,249,249,251,251);
& U. }% D( x+ P) F( E7 sTextOut(hdc,250,250,"圆心",4);
6 K4 f" q: W( n) A0 V8 tRectangle(hdc,50,300,150,400);& q0 x0 ~$ C+ z: m
ValidateRect(hWnd,NULL);
* }2 z. {7 b7 QEndPaint(hWnd,&ps);
8 G# C: Z; u7 W! u: d" o- J- Ibreak;0 K; Q- e; T r* c5 s
case WM_DESTROY:' |: |4 a5 ^. o) V+ X
PostQuitMessage(0);/ m3 _9 b& g5 c J
break;0 o/ \- Z% B! Z& L: h2 [" X- z O
default:
7 R1 s0 S$ Z1 s* oreturn(DefWindowProc(hWnd,messg,wParam,lParam));
( w3 v/ b8 n/ bbreak;' W$ w; A" F+ E j) S( f0 F" O: R8 x/ M
}
0 r$ }8 W( M% d, d; x; kreturn 0;
) h# U+ V) z4 p& k: Y; ^% _}
# ~( o3 Y- m$ C
U$ I- i5 H) g W |
|