|
windows编程通用的Win32类型和常见的结构 9 x7 x" _8 O: z+ X
作者:雷神 6月20日 10:00 , ~8 t* `2 Y) M/ G
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
9 {8 X- {) r: E6 _1 NHANDLE 一个32位的无符号整数,用作句柄
7 O$ v5 I# O+ i# lHDC 设备描述句柄: z! R2 g/ ^3 J
HWND 一个32位的无符号整数用作窗口句柄1 m8 ?, v$ p/ ?" z0 u; o w: p5 P
LONG 一个32位的带符号整数- v2 f$ B- ~& b B2 H
LPARAM 用于声明lParam的类型
" x. U2 e- z0 G4 |3 L& s( |LPCSTR 与LPSTR类似,但用于只读字符串指针. l6 w) u1 p$ o( o, {* l- g% Z
LPSTR 一个32位的指针
1 L3 M- s( i9 W. s+ g1 l: a' wLPVIOD 一个普通指针类型等价于(viod *)
* Z% X4 [$ ]0 b, Q% LLRESULT 子窗口过程的返回值
& z! [% K- X& o# }& [NULL 一个整型的0值,常常用于激活函数的缺省动作和参数
, D, x% k3 R( W! C* a2 C: Q2 gUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位+ y9 X7 P$ r6 r
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
# }1 m2 B$ \* j/ c# t' n) d3 r! nWINAPI 在API的定义中取代FAR PASCAL; B; E/ i, M5 ?- U; G4 L
WPARAM 关于wParam的声明; t4 ~" _" b9 r$ v" t- Y X
Win32应用程序中常见的结构8 @- `; F4 _# _" V
结构 描述" \ F) u4 }- p9 ]$ b ], t
-----------------------------------------------& y2 b8 n7 E3 R/ O3 z
MSG 定义了输入消息域" w2 f3 ~2 T3 R3 b
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构6 S" R& z; O c; M4 r' z" X
RECT 定义一个矩形+ G% k, Z% h* d1 B; ~5 H
WNDCLASS 定义一个窗口类
2 _% V. m$ T" s" L u: L一个例子:
! t6 D" r o; G7 v6 r; K$ q; Y#include# ]9 X- T, e4 C% j5 s2 `
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);1 l$ C* E5 d3 N0 ^ s u" E
char szProgName[]=" rogName";9 H n4 E/ @; M/ s; a$ J- `
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow). s1 h$ u4 ]! V7 _- c% @6 ]4 c
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。3 v; W. o, z; S
//从WINDOWS向WINMAIN()传递四个参数:
) ?! V6 J' t2 R$ [: o! U0 I/ U//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。+ K" Q& A7 V, o
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。; Z o4 i e. I/ | l' E
//参数3lpCmdline:
, i% [# Z6 x& a" W+ q//参数4nCmdShow:$ {4 p/ a+ n/ }% W
{5 i7 V; m) G7 X3 i' r
HWND hWnd;; ]4 U9 r, b; \5 u
MSG lpMsg;8 [3 p. D+ Z( g8 L/ {
WNDCLASS wcApp;- B/ m% a/ r4 |& q W2 P
wcApp.lpszClassName =szProgName;1 o; {; Q( _9 D& r' ~2 u
wcApp.hInstance =hInst;
) p9 w/ e! f2 F/ G: |wcApp.lpfnWndProc =WndProc;; D9 ~' {" W% D) G% t# w3 k& P
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);4 D8 V9 s, ]3 `6 i
wcApp.hIcon =0; ]/ Z- R$ ^. J7 {% Z; K/ Y1 J
wcApp.lpszMenuName =0;0 H2 ]% n: V; J8 |
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
; Y5 u/ D0 a$ b7 R; x5 YwcApp.style =CS_HREDRAW|CS_VREDRAW;7 W6 m8 ^" R1 e+ G% n- x
wcApp.cbClsExtra =0;
2 E# p$ p( A3 K1 ^" EwcApp.cbWndExtra =0;$ K, V/ Z8 \+ x7 r6 ~, O; T
if (!RegisterClass(&wcApp)), {0 x r5 s- a: F
return 0;1 d8 Q8 W% L8 B/ [ Y3 B
hWnd=CreateWindow(szProgName,"这是一个例子",8 |8 g9 ?/ {# X$ ?
WS_OVERLAPPEDWINDOW,
+ s0 Z l7 X. O; S- K( XCW_USEDEFAULT,
! S% R+ [5 v9 zCW_USEDEFAULT,! N( d" k1 R3 ?: Z u @* A
CW_USEDEFAULT,5 ]( z" p% y5 V( U7 J
CW_USEDEFAULT,
4 F( k- X8 P2 Q, G) E. }(HWND)NULL,
' [( {7 K1 Q7 f7 n0 m6 Y(HMENU)NULL,4 a( d* Q& u- v- P* r
(HANDLE)hInst,
. G$ f( x- ~. [(LPSTR)NULL);4 v1 U2 {( Y9 D, V0 h( V
ShowWindow(hWnd,nCmdShow);1 ]4 v2 m) c9 O9 Y" \- O
UpdateWindow(hWnd);
* `* v1 P7 @9 ~. N' X# Bwhile (GetMessage(&lpMsg,0,0,0)){8 p: l0 l/ J% v/ K3 T* _
TranslateMessage(&lpMsg);
! P3 m+ s. e7 PDispatchMessage(&lpMsg);( o; d, Z, C; k" f; }6 T2 N! X
}
7 a% ]: ^% U9 jreturn (lpMsg.wParam );8 V7 M3 d2 k# _
}
B" M0 \9 R/ M8 y; SLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
6 t: Z' W/ W+ s; S/ @, @{$ o! Y! V @) \( W6 u N
HDC hdc;/ F* Y4 Z2 X1 T# F! ]' D
PAINTSTRUCT ps;! N7 Y, A- X% U
switch (messg)
. u* y& S9 F2 r7 k% R{
7 D2 ~0 E( P3 K/ v; g5 }/ S9 @9 pcase WM_PAINT:
6 `6 ]) p' D, Chdc=BeginPaint(hWnd,&ps);
. K7 X7 i' v* \( _4 H9 }0 W- @MoveToEx(hdc,0,0,NULL);5 F4 U" u6 t3 a$ M2 t
LineTo(hdc,639,429);
7 N5 n a" X# ?* v' P9 CMoveToEx(hdc,639,0,NULL);4 u2 G5 u% O- m: t
LineTo(hdc,0,429);/ a# r+ E1 s E% p& J
TextOut(hdc,120,30,"一些线",6);8 [( k* y4 Z/ {" j7 B6 h) z
Chord(hdc,450,20,430,80,455,25,425,70);
D! h. `7 ]8 k8 n8 p5 ^* NTextOut(hdc,470,30,"弧线",4);
( }+ ?' `; s J g1 W: b# r# _( @Pie(hdc,350,50,400,150,300,50,300,100);
& i. k& I+ X' f! pTextOut(hdc,350,50,"饼图",4);+ r- N, M, c! |1 w% I# S! ]: \
Ellipse(hdc,100,100,400,400);
# b8 n7 e" v( ~! _Ellipse(hdc,249,249,251,251);5 m! k, ]7 O9 d( J# s
TextOut(hdc,250,250,"圆心",4);0 J* h+ C" U, L
Rectangle(hdc,50,300,150,400);8 k0 V" R2 r4 ~* {$ A
ValidateRect(hWnd,NULL);
+ @0 M8 F! F8 @" ~# N9 k- rEndPaint(hWnd,&ps);
: r& H: a+ T* a1 Bbreak;
- d( q$ p* s5 m7 R4 W4 }2 bcase WM_DESTROY:
. J$ v* z% v$ p0 a, J/ E* a" i, TPostQuitMessage(0);
& d+ } |4 y* f# k+ J4 n0 Qbreak;" S; q$ |! Z' r
default:+ r6 F4 k7 n, I5 \! f) p; |
return(DefWindowProc(hWnd,messg,wParam,lParam));2 s( o" p, u' A/ _% L# X
break;: L/ @1 ^. V/ f% c
}3 @6 v) E3 m! g% T* z8 u# g n
return 0;
$ x) U! n v2 ]' H} $ X$ s% U8 e$ ^$ f6 b) N
6 m5 R7 @5 J# d. G4 { F |
|