|
|
windows编程通用的Win32类型和常见的结构
+ A* f1 H4 h9 ?. \' d, X作者:雷神 6月20日 10:00
3 p/ T+ w# ~& b CALLBACK 在应用程序的回调例程中取代FAR PASCAL1 h6 x' P! `7 r" v/ ~$ {: N* h
HANDLE 一个32位的无符号整数,用作句柄
' P- J9 r6 O% ~& }HDC 设备描述句柄$ |6 I! l) e" C3 @, ?
HWND 一个32位的无符号整数用作窗口句柄
! x6 ]& g9 F' R4 dLONG 一个32位的带符号整数
# j$ J* e$ A; B/ p1 E* u4 `5 SLPARAM 用于声明lParam的类型* p1 e, D4 J1 k) u* o$ ?, t
LPCSTR 与LPSTR类似,但用于只读字符串指针% H3 @+ e# H+ y( l5 I
LPSTR 一个32位的指针
4 r4 `; j5 W P6 G* j# Q8 L$ G4 ~LPVIOD 一个普通指针类型等价于(viod *)" ^: s w$ w* S
LRESULT 子窗口过程的返回值# x# |% K `% @0 w% _
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数' h* v; t( J& ?$ Z' e
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位0 U- P P0 L% Q
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
% Q% `, \3 w) P/ N/ w5 F! qWINAPI 在API的定义中取代FAR PASCAL& h1 i+ q# U# B
WPARAM 关于wParam的声明
, f3 W: U' }& E- `* A$ t) PWin32应用程序中常见的结构
( W0 j; r: W' @8 N结构 描述6 m! x/ ?! W6 r- r U. R) f( }7 `# R
-----------------------------------------------
3 i/ P6 A( U% l! }2 J) AMSG 定义了输入消息域& `* C# y$ O0 O+ Z9 e* ^$ }
PAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
% ^! I6 J+ R8 q/ q$ R% tRECT 定义一个矩形( O$ F* O0 S3 \: l% K; } r, _; i5 y
WNDCLASS 定义一个窗口类
# [( e, C t) r8 |2 A一个例子:; |% R2 a/ K; m
#include
$ i% d: |* e$ ~5 ^. jLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);0 q3 \9 I! \- @ Y" Q8 W3 v
char szProgName[]=" rogName";
9 R0 F; }2 n- ^( B0 Wint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
/ U! a" W: v6 t9 x3 x//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。' }9 }) J* \3 s/ X. T- h" d
//从WINDOWS向WINMAIN()传递四个参数:
7 O9 n! v9 L& U- Q% d% t//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。0 }' t+ @0 }1 n; H* u% R# W
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。' Y% V# G3 s! R5 a% X+ _4 U
//参数3lpCmdline:
2 O- [" C& C3 C4 t( h" J T//参数4nCmdShow: i2 a7 `0 T3 _; u8 ~5 z5 v* J9 x
{
5 Y8 D1 y/ z6 T- m9 WHWND hWnd;
) c; s( Z" A- tMSG lpMsg;# C% M* w. h! B# N4 ?
WNDCLASS wcApp;
( T* ]- o V: O/ E2 S0 }- WwcApp.lpszClassName =szProgName;0 ?' U& \9 W1 G, x: @( q
wcApp.hInstance =hInst;
3 u" P# }7 z0 I; K5 cwcApp.lpfnWndProc =WndProc;* F) K/ _4 W! `" W0 W! `8 C
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);7 h7 x/ `4 I. }7 ?/ y
wcApp.hIcon =0;
3 ]# p; n7 Y3 q+ f4 ^wcApp.lpszMenuName =0;( t8 d) s, l7 v3 d
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);: [3 Z b+ R/ {' K" T4 f
wcApp.style =CS_HREDRAW|CS_VREDRAW;3 u( h/ x1 L# @' K
wcApp.cbClsExtra =0;
& }7 H& T7 ?1 \1 z2 \- H/ J/ wwcApp.cbWndExtra =0;6 X5 [' \! @+ c/ i8 G; F0 k
if (!RegisterClass(&wcApp))1 \$ [2 w/ D2 {% A1 D
return 0;
! f: G- C7 _/ K5 M( nhWnd=CreateWindow(szProgName,"这是一个例子",& W/ U0 Y6 r3 @. N
WS_OVERLAPPEDWINDOW,
3 z5 u2 n7 d' e& h! A0 v2 V9 Z: K8 qCW_USEDEFAULT,
9 J2 b2 r0 o$ U2 V6 \. i+ O' XCW_USEDEFAULT,7 H; R4 f( `/ f, m, O
CW_USEDEFAULT,% ^; @9 u$ P& {7 ]
CW_USEDEFAULT,
& R. Y5 a$ ]: Y$ G0 w(HWND)NULL,
( O6 r$ K' L7 d(HMENU)NULL,$ c2 R2 B, ?* y3 G- ~
(HANDLE)hInst,4 z, u8 f2 @6 I" y+ U( G
(LPSTR)NULL);) m1 p1 @; b3 }& n! Y& y
ShowWindow(hWnd,nCmdShow);
7 ~: `8 m, ~* TUpdateWindow(hWnd);' W0 `" G8 z5 t( a# H9 q4 G
while (GetMessage(&lpMsg,0,0,0)){
$ d d4 j# T/ y/ O( ~) zTranslateMessage(&lpMsg);4 ^9 e) U1 a# P% P- n
DispatchMessage(&lpMsg);) n* n: [! v. a+ W% m
}5 V" `) u0 y2 t+ i5 Z$ n: r: P8 i
return (lpMsg.wParam );
* F: E5 c _7 w/ P. r}
' v2 V$ m1 U7 i+ l, R& K0 tLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
) ?7 s0 p2 N U/ D" w{
! _6 n Q5 z6 H0 rHDC hdc;
8 k0 m2 t1 G3 WPAINTSTRUCT ps;. M0 e: c2 f W& ?6 b5 F. v- ~
switch (messg)5 y0 W' p+ _( u u* Y! J
{/ U+ w/ Z a3 s S. I4 O3 o( L: x
case WM_PAINT:
% F: N- G E Z3 O, Ehdc=BeginPaint(hWnd,&ps);# t/ i8 q" s r+ G
MoveToEx(hdc,0,0,NULL);+ O" d$ ]- ~6 @0 u- {
LineTo(hdc,639,429);! ^/ t, U: }2 K& V* [) C
MoveToEx(hdc,639,0,NULL);
3 W- |: L0 Q0 p8 \: fLineTo(hdc,0,429);
6 D3 j8 \. S' ]2 i. ?" WTextOut(hdc,120,30,"一些线",6);9 o2 }$ e* G H
Chord(hdc,450,20,430,80,455,25,425,70);
. N9 W0 i+ g# N, N8 JTextOut(hdc,470,30,"弧线",4);
) @( y7 U" W: N5 J+ i& KPie(hdc,350,50,400,150,300,50,300,100);! v! V! S; s! b$ n, g
TextOut(hdc,350,50,"饼图",4);+ ^7 ]5 [8 x! V- w. D9 N
Ellipse(hdc,100,100,400,400);2 Y6 a( F8 |) f" ~- g2 V
Ellipse(hdc,249,249,251,251);
! O6 g1 e; P7 Z$ m8 \( n' QTextOut(hdc,250,250,"圆心",4);. i7 t: @/ `4 B7 B
Rectangle(hdc,50,300,150,400);+ L6 V0 ~! i$ r' A0 A& q/ _% D4 M
ValidateRect(hWnd,NULL);+ h* s# A3 p7 F6 I8 c5 `+ `
EndPaint(hWnd,&ps);, z% {; x2 @( y% J+ i1 n+ d) W+ Z
break;0 F1 O/ \" L- r1 ] _0 [" |9 h
case WM_DESTROY:9 t# h3 w0 |: P
PostQuitMessage(0);
! z: j L- \# @break;! {- w! A" q2 P; M& F9 S, z' i( P1 T
default:# b7 R/ d/ \4 c. Y+ V( H
return(DefWindowProc(hWnd,messg,wParam,lParam));
( ]: r$ E' A( b! lbreak;6 ]2 C7 K+ I% k: C% C
}5 T6 L3 \& h q5 U) t8 A M
return 0;
4 Y6 S4 a: X- v; h9 x: f} 6 O8 X2 X$ w, }; W* @1 S
" I+ V! \ U. l$ I- w) P/ K- ]4 B7 q* V
|
|