|
|
windows编程通用的Win32类型和常见的结构
7 C# _: [- N: U; J8 G2 U' U作者:雷神 6月20日 10:00 ' Z/ ?- T2 N, K! @/ D* K
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
" W! O! Y8 L. s1 |8 }HANDLE 一个32位的无符号整数,用作句柄
" ~/ X' O. u' |2 a/ o* P4 }9 uHDC 设备描述句柄
/ n3 t. k& s& a% E2 @HWND 一个32位的无符号整数用作窗口句柄
' n9 `% {& f! L& }LONG 一个32位的带符号整数
( X' h2 `5 S5 G# R3 p$ ]LPARAM 用于声明lParam的类型9 e* s& }# O G7 d
LPCSTR 与LPSTR类似,但用于只读字符串指针; ^4 ?3 C, h: x/ J, Q
LPSTR 一个32位的指针
% ]2 E4 p( r* O6 KLPVIOD 一个普通指针类型等价于(viod *)
8 U3 V9 ?0 Y* x% M5 bLRESULT 子窗口过程的返回值
7 ~2 C, R& ~2 t/ V3 UNULL 一个整型的0值,常常用于激活函数的缺省动作和参数3 {; d4 B z* [) Y
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位1 d& M+ t2 ?7 S0 }, Q1 @& b
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
: B8 ^" G: l4 k2 }9 ?- N% D% y x) YWINAPI 在API的定义中取代FAR PASCAL
+ U- e, ?" s& D9 j, e- [" JWPARAM 关于wParam的声明
5 Z7 A0 A' @7 n0 QWin32应用程序中常见的结构4 U9 N$ H5 Y% F3 c' y5 S# Q
结构 描述
( y4 B4 X3 g9 C* N% g y: T$ m-----------------------------------------------
0 e" M3 Z6 m- Y% m' ]. oMSG 定义了输入消息域& g7 n& f0 f8 R7 H! @
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构- W% Q$ y. ?( s4 v
RECT 定义一个矩形0 b6 k5 B W }+ W' n" i
WNDCLASS 定义一个窗口类
5 w4 x& r7 y- N9 l/ V一个例子:
W# _ l M3 ]- E; C#include
; U$ x Q, W4 U$ f: V0 {LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);( n( X$ R8 V1 S% n- v/ ?
char szProgName[]=" rogName";
* f, u/ L% q" Lint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)' f- ~. k" E$ ~6 V( k# V. A: x
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。2 E: m4 S2 m! V' V6 ^' t' ^
//从WINDOWS向WINMAIN()传递四个参数:
; b4 |# k# v; }! X S- Q- ]" q//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。0 _4 b9 t. C2 [( G0 J
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
u+ B+ n) o" W" C9 C$ d4 ^//参数3lpCmdline:1 r5 h' r, F) Z) X
//参数4nCmdShow:
( ]& {" E0 D! P2 e3 f{
- I, B9 m7 q2 O& s, B1 S+ Y( KHWND hWnd;
0 @: T/ x& h7 k# x5 |% WMSG lpMsg;! f3 ^' a. {1 Y" X4 W g
WNDCLASS wcApp;1 h; C1 q9 N6 m4 g
wcApp.lpszClassName =szProgName;; Q# e, g5 C/ T$ w2 N1 G' N7 p
wcApp.hInstance =hInst;
# d4 u/ ~) E* G, ]wcApp.lpfnWndProc =WndProc;
& k; D' M; T7 I# q m9 twcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
; t$ S0 q5 u9 rwcApp.hIcon =0;! \! a x% T+ m7 V7 M5 W. K( r
wcApp.lpszMenuName =0;0 u- D6 T6 L p" Y$ g+ f, r# {9 |
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
1 N4 f* K9 J" U* S, dwcApp.style =CS_HREDRAW|CS_VREDRAW;
0 b" U- k- l' iwcApp.cbClsExtra =0;
6 F% V3 ]- i K" w' V" H4 R) TwcApp.cbWndExtra =0;: X2 ?1 q/ `& _+ t' |( S
if (!RegisterClass(&wcApp)). U9 u4 Q$ H+ O4 g4 \1 o
return 0;
9 N- L X' @9 {( Q% P' P6 w0 O+ ?hWnd=CreateWindow(szProgName,"这是一个例子",% Z9 e# h" U+ B- `! w) N# u
WS_OVERLAPPEDWINDOW,( t+ f0 A/ c* F; l; s9 ~
CW_USEDEFAULT,
+ L( H* p/ o0 {# k4 x7 ^4 R4 CCW_USEDEFAULT,
: @9 p. O3 M9 u% Q [# [" T+ qCW_USEDEFAULT,( t8 g' \" R0 n- L
CW_USEDEFAULT,
& Y4 ~; a ?2 r4 l3 \; D(HWND)NULL,4 \8 ~2 t2 f8 M7 d6 ~
(HMENU)NULL,
! K4 H, m1 @) Y1 l0 f8 X: p* ] V6 p+ E$ T(HANDLE)hInst," G. y7 a% w+ ]# y+ F
(LPSTR)NULL);
1 g& H0 A, g& x/ k; eShowWindow(hWnd,nCmdShow);
. D' I- n1 `) N! F. n% ^* }UpdateWindow(hWnd);
- f) |; h u3 `; B% [. uwhile (GetMessage(&lpMsg,0,0,0)){! b7 i+ r# E0 _" a
TranslateMessage(&lpMsg);
( N" ?& A9 I: qDispatchMessage(&lpMsg);
1 k# b' h# }2 C1 f. q6 P0 d}
6 C/ @9 Y& {5 Sreturn (lpMsg.wParam );+ ^/ I/ I+ Z% Q2 ~
}) x5 w3 s3 [1 Y- d
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
' O. u% R' w1 l0 ^2 c+ k{ l' L6 U) I+ ?$ W: H
HDC hdc;1 E0 R2 i: l* g6 F/ q+ R
PAINTSTRUCT ps;
8 E; n0 g) j' X2 X( S' |3 Vswitch (messg)
5 @0 w( ^$ e, k, F' i, ~{0 d3 L% P Z" U" T, s3 s
case WM_PAINT:( G; @; B8 G9 ?3 ^
hdc=BeginPaint(hWnd,&ps);
: M8 \. [! G' h1 `" OMoveToEx(hdc,0,0,NULL);
; u6 G5 W% f9 T/ x# B l& x, ZLineTo(hdc,639,429);& H' n# u9 z6 ^; p/ d0 g f* S. @
MoveToEx(hdc,639,0,NULL);4 a4 n' g+ F. y/ @) e; M p6 Q
LineTo(hdc,0,429);0 \+ H6 Y8 |4 ^
TextOut(hdc,120,30,"一些线",6);
1 e8 }9 y* s4 KChord(hdc,450,20,430,80,455,25,425,70);8 H. q* _1 B* ]0 t& d% b, e
TextOut(hdc,470,30,"弧线",4);
7 G0 t3 K+ o# b2 w$ @Pie(hdc,350,50,400,150,300,50,300,100);: e3 b; ^; C5 _6 G
TextOut(hdc,350,50,"饼图",4);
: v: }) s' C3 BEllipse(hdc,100,100,400,400);& r: s" X8 d2 Z, Z+ T. Z
Ellipse(hdc,249,249,251,251);
3 }2 k" d8 y" r. w; p- z6 STextOut(hdc,250,250,"圆心",4);
" [1 l" s/ X5 f% M+ q hRectangle(hdc,50,300,150,400);
& m; q/ R; x& y6 `ValidateRect(hWnd,NULL);
, g4 ~. F; b# i3 T/ [& rEndPaint(hWnd,&ps);
7 I" |" r `. n( Z' U) ?break;8 V& d" G" w9 q1 Z9 j
case WM_DESTROY:
2 L+ s( K+ \! l u% d( YPostQuitMessage(0);
) U8 X" D4 }$ Lbreak;
& x' A1 Q1 a6 b Xdefault:
9 l" h1 r1 `' A4 Z k" e7 _3 q% freturn(DefWindowProc(hWnd,messg,wParam,lParam));
/ u ?6 t, v; I" J( kbreak;
- ]+ U0 q7 h. [}
2 e' l+ D% q- o$ ?7 ^1 [0 K) b/ vreturn 0;8 G) `' ?/ Z4 k" K' R( B4 z8 k1 \
}
6 B# U# g' L+ ?! m& t, a & v( Y9 i% }$ c/ I+ s* i( Q
|
|