|
|
windows编程通用的Win32类型和常见的结构
8 h( C( g. r1 R' p0 ^作者:雷神 6月20日 10:00 . k p) ^0 g5 @5 e0 W
CALLBACK 在应用程序的回调例程中取代FAR PASCAL2 g4 M+ a$ S9 X" B
HANDLE 一个32位的无符号整数,用作句柄1 C4 D/ w$ k% L' N* e/ G1 J4 A
HDC 设备描述句柄8 ~6 z( O/ b' T1 L" V
HWND 一个32位的无符号整数用作窗口句柄+ ^3 J( c* ^, U, O0 S9 s" b
LONG 一个32位的带符号整数
: s) z: ]( [5 `! B+ dLPARAM 用于声明lParam的类型
3 s& n2 i1 ~/ E& O0 ^ S7 jLPCSTR 与LPSTR类似,但用于只读字符串指针2 ~. d! @% x9 x& }1 x
LPSTR 一个32位的指针2 b, w3 w7 }) A, P
LPVIOD 一个普通指针类型等价于(viod *)" v9 @! M* W) j/ ]' i/ }' z
LRESULT 子窗口过程的返回值& n3 `# t( W0 v5 n) F) F& E& ]
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数6 X3 E# m. s9 z% |9 B5 p
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位0 G- d6 @9 p0 L' E" J
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
( d, o, n1 _# P2 o% Q- LWINAPI 在API的定义中取代FAR PASCAL: B& m. [4 g: |! F2 C
WPARAM 关于wParam的声明
7 Y# a g: I7 K1 a, f+ q1 `1 eWin32应用程序中常见的结构5 ^8 N z# h; e* G, I8 F
结构 描述
m4 o( J1 m ?' o' A2 K3 [-----------------------------------------------1 x J3 X# B7 j6 Q
MSG 定义了输入消息域
5 x* e3 t- z/ ]3 r* k2 Q9 x) ?, H% vPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构 t1 C1 z( M* g+ X M- {# B
RECT 定义一个矩形
6 k5 p+ q# L, d. K7 B% L0 aWNDCLASS 定义一个窗口类
% K1 b) O9 g7 o1 d1 B9 ?一个例子:
6 S: L8 o$ k' k) i2 x; p#include3 M8 J% X& P& y, h4 i
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);; N6 L) s# [9 u0 w3 \
char szProgName[]=" rogName";
% Y& e3 |: |/ L! Q: [8 W# q" W: ]int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
b$ G0 |) _- \* I, l5 W//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。$ q+ Z7 G0 |% {9 I4 P {% F2 x
//从WINDOWS向WINMAIN()传递四个参数:" Y$ Z7 \7 f, q x3 Z* D: _
//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。1 @( [ w9 {# J( s( w' d
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
9 k A2 s1 ?, K( o+ N//参数3lpCmdline:
/ k$ m7 b8 k9 m0 B2 \6 b7 N//参数4nCmdShow:7 i4 z) n% ?: H
{: `& K5 _! i0 s: I( _' b: l. L) Q/ g
HWND hWnd; O5 G) F. ~. L( I* H; |, `
MSG lpMsg;
. t" ~, ?! {. d( H! J8 f/ S8 UWNDCLASS wcApp;
% p+ u4 S: C3 ?! GwcApp.lpszClassName =szProgName;
: ?8 p. u" {$ M. NwcApp.hInstance =hInst;$ Z: V8 n! q+ O7 v0 h
wcApp.lpfnWndProc =WndProc;3 v, }3 [* L/ n f* ~; B5 U p
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);. ~; s% ?: m: b% d" K; n
wcApp.hIcon =0;
( R: w% i5 k9 j3 Q5 S* g( u: g' p4 @wcApp.lpszMenuName =0;/ N+ E" r, D! [% O# m
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);+ _( T# u# h: ~3 f
wcApp.style =CS_HREDRAW|CS_VREDRAW;3 p, U7 ~9 b* n$ z' M, B
wcApp.cbClsExtra =0;# D2 l( v" ]# m6 [
wcApp.cbWndExtra =0;, Q9 k5 [/ r% ?% ~
if (!RegisterClass(&wcApp))
; x6 ~5 l$ ~. yreturn 0; Z7 w7 W7 |7 \+ s# u2 Q! X- H4 f
hWnd=CreateWindow(szProgName,"这是一个例子",
% R: w2 o1 @5 S! q" b* NWS_OVERLAPPEDWINDOW,6 s: [8 c7 M/ R0 H. p8 @3 g; C* s
CW_USEDEFAULT,) T2 ] y5 r8 V7 {8 H6 k
CW_USEDEFAULT,, Y/ y9 b+ |' c6 L% d$ v& h
CW_USEDEFAULT,: [& I6 F; i7 m; i0 W3 @( z' ~
CW_USEDEFAULT,+ J \/ c' k. c: F+ ^1 B
(HWND)NULL,/ ]# \8 q, }* j9 Z1 S- p
(HMENU)NULL,
/ E, P1 x9 ?- {* P(HANDLE)hInst,
9 |9 z3 N9 L7 k) K. }# B2 d(LPSTR)NULL);
: z2 ^: ~+ X5 L# ^ShowWindow(hWnd,nCmdShow);0 O' b7 n2 \" M# n8 d) f; Z
UpdateWindow(hWnd);
$ Y" I) t h& n* Z3 x! o$ M8 xwhile (GetMessage(&lpMsg,0,0,0)){
# \4 D) m. @4 h. W! v8 sTranslateMessage(&lpMsg);: H* f% }" F' k9 `9 Y n9 C8 C
DispatchMessage(&lpMsg);
9 @: F5 \9 L0 f- U. P}
) A4 @- }3 V* e( Nreturn (lpMsg.wParam );
5 v5 x; d' J0 q$ p; @}+ s; {7 X& Z9 }& K6 I( I0 z* Y
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)5 x+ j3 @- z8 B/ w0 Y- X
{# k! Z3 N, k, b, u- n7 j
HDC hdc;
- X8 P. q; E% v) JPAINTSTRUCT ps;
7 ^9 c$ x, A0 q# e6 n3 e% T7 ?- }switch (messg)$ g# X; l7 R. k- f5 C, E! x
{6 J) R# h( m: Q) ^, T' \5 ?; l; W
case WM_PAINT:
, u3 X1 g" N$ a; _' e) R- A, ]hdc=BeginPaint(hWnd,&ps);2 k# U4 F4 {( C: ~1 L, ]8 i7 w' A, d' l
MoveToEx(hdc,0,0,NULL);
" G( d z9 x) [: V. v" dLineTo(hdc,639,429);- I( ~* d0 o: i5 \3 s l
MoveToEx(hdc,639,0,NULL);, j) J9 k1 {* }+ d! _
LineTo(hdc,0,429);
, x+ ^% i! l) R8 A, D$ }TextOut(hdc,120,30,"一些线",6);
6 k( E6 @# ?/ J; iChord(hdc,450,20,430,80,455,25,425,70);- v2 [& r' J* @
TextOut(hdc,470,30,"弧线",4);+ ?- Y" w/ L- C, N+ d
Pie(hdc,350,50,400,150,300,50,300,100);
, I- ~$ `3 Z4 f3 uTextOut(hdc,350,50,"饼图",4);) Q/ }4 Q- C# v2 @: k
Ellipse(hdc,100,100,400,400);
( Y# S, ]3 p j: o& x" HEllipse(hdc,249,249,251,251);
% C' y2 C" }4 YTextOut(hdc,250,250,"圆心",4);
3 G* B" g% a+ k4 wRectangle(hdc,50,300,150,400);
3 k$ L4 \9 v& w4 d, CValidateRect(hWnd,NULL);: |$ ^6 [7 `" U- C
EndPaint(hWnd,&ps);/ }5 i3 G) i/ X* f8 E# A o
break;4 x5 O$ a0 U! @) e' y& [
case WM_DESTROY:
* k- |* j" J9 F( p& ^. J% T8 x" `8 e$ xPostQuitMessage(0); c7 h- }1 i8 b
break;
: U. O8 u7 @- ^' `default:
- d7 Y& ~" B( u% J. G8 e) p, Hreturn(DefWindowProc(hWnd,messg,wParam,lParam));
# T2 \* r$ h( ~; q6 E) \' Q" X' Ubreak;
9 f/ V8 d1 H/ |( e" j0 |* z2 F3 r}
8 n) U8 H" x8 z3 A+ q# Yreturn 0;: E/ w% R, Q8 e; z- \ `& e d
} 0 R) ^6 J3 j1 I/ N! ]4 e2 w; l
& c7 m) ]. ~2 g g |
|