|
windows编程通用的Win32类型和常见的结构 - Q0 I$ K2 Q& r0 {' `
作者:雷神 6月20日 10:00 % [$ T' o6 D, D7 L; R" c" P
CALLBACK 在应用程序的回调例程中取代FAR PASCAL7 D& t5 F* D- p1 a6 Z/ b
HANDLE 一个32位的无符号整数,用作句柄; Q$ u2 ]* w2 [# D, p) t
HDC 设备描述句柄6 c8 E5 P9 h0 T- [& D; h% n7 [
HWND 一个32位的无符号整数用作窗口句柄% }2 g* y& ?9 L( P* S
LONG 一个32位的带符号整数
: s+ e8 L: I8 w# V; d+ xLPARAM 用于声明lParam的类型5 D* ~* l, q, J( l& `. H g8 G
LPCSTR 与LPSTR类似,但用于只读字符串指针
. [2 ?0 t& x3 D+ t% {LPSTR 一个32位的指针
. q9 N& `) J1 ]LPVIOD 一个普通指针类型等价于(viod *). Q; r7 L- V( C0 X0 {8 ~
LRESULT 子窗口过程的返回值
. L8 }/ f8 d3 @8 A+ iNULL 一个整型的0值,常常用于激活函数的缺省动作和参数
) o' p8 X2 ~8 L; tUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位& G9 g3 e( e- F. i% J
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。; d1 y+ f+ N5 x" z. e9 b5 m9 f) d0 w
WINAPI 在API的定义中取代FAR PASCAL! a& y1 I4 J/ G" _
WPARAM 关于wParam的声明
1 j! z; P& W- O, J# k) o4 IWin32应用程序中常见的结构
7 ~/ l A0 {% _' C+ Y0 a结构 描述
4 x+ x' Q: t s- P0 J-----------------------------------------------; Q e7 N, R* }* [1 d& H3 Y# U' p
MSG 定义了输入消息域
3 k- H/ C3 z& l- kPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构
; z) n$ C& z( T. k( vRECT 定义一个矩形
+ J% V; a! D/ d& [/ W- l* {WNDCLASS 定义一个窗口类! p9 S$ n2 I3 n3 p. c) f# O1 s
一个例子:
4 x, v# K3 t/ X0 t( w I5 ]#include
2 x: e4 y y5 ]! PLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);! n. J- j5 h+ }
char szProgName[]=" rogName";
) k0 C9 s; w" s' l) ~; Xint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
7 M) ]# {8 t' f: x* [* w//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。 p& l* D2 i& ~ x& H/ C, A. Z
//从WINDOWS向WINMAIN()传递四个参数:
% J h; t2 K, V//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
" B- t R t. G% E1 h//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。' M" s& Z4 T! ?
//参数3lpCmdline:+ T* P% {5 U( V1 Z4 s! ~2 b
//参数4nCmdShow:
; q8 p1 t. ?/ y; D$ V: k{# z X7 J: ], v6 ]1 Y% k- k% c
HWND hWnd;
5 U( S2 G8 {+ g) _& y3 ~) o: G& _) rMSG lpMsg;
+ ?3 O" n4 V" K2 KWNDCLASS wcApp;
( Q$ f" [+ Q; O% l8 J, s; i1 K$ ]wcApp.lpszClassName =szProgName;
9 v# a. }" c0 |) s4 k1 X+ wwcApp.hInstance =hInst;
. K; d- j7 ~0 t: p, ]wcApp.lpfnWndProc =WndProc;( X6 J) L9 n/ D. z, e, h) W W
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
. P) s4 n: l d& ewcApp.hIcon =0;) J% t5 q( p6 V0 k2 l1 D
wcApp.lpszMenuName =0;
. W0 }( ~1 B# Q0 Y' ]) R# |wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
# B0 {2 [# M! pwcApp.style =CS_HREDRAW|CS_VREDRAW;
( ^) Y' p7 B" ]+ {$ u4 i& E- ]wcApp.cbClsExtra =0;; |: E6 e( R8 |6 V, B h
wcApp.cbWndExtra =0;, V0 j2 K; s; h; |+ V3 k
if (!RegisterClass(&wcApp))4 R2 ?2 n3 q# T, P
return 0; k. R$ e3 Y+ H
hWnd=CreateWindow(szProgName,"这是一个例子", ?! t9 N4 } w' |1 x
WS_OVERLAPPEDWINDOW,
# j# I5 k6 c/ l# I6 R/ PCW_USEDEFAULT,
# D' e2 l7 k$ F% I) V6 RCW_USEDEFAULT,6 I+ r$ w$ h' R n+ W7 I; v
CW_USEDEFAULT,, {- {2 a2 C4 ^2 d& v3 t
CW_USEDEFAULT,9 R9 I n- T. V$ s- H( h- ? f, s& w7 G6 _
(HWND)NULL,
8 c3 m @+ q$ Y( S. B(HMENU)NULL,2 u' Z9 p+ k& p: x# N: e/ L. ?% p! N( f
(HANDLE)hInst,# A6 ]3 C1 X3 n3 B
(LPSTR)NULL);
# t; Q% |0 V5 T/ ^$ Y: v- [ShowWindow(hWnd,nCmdShow);% p" C0 a- n _8 J) a
UpdateWindow(hWnd);
2 u( x# |9 k* r7 |. C5 Z% p+ u, nwhile (GetMessage(&lpMsg,0,0,0)){8 {- ]" N Y7 ?
TranslateMessage(&lpMsg);% R# l! g2 b; }; H
DispatchMessage(&lpMsg);
' f6 j6 T: D5 [" z T+ N0 X T}: v M. }* V7 ` ?! P
return (lpMsg.wParam );3 ?' O8 \! z7 ^8 g
}1 v3 e# E) b- ?5 F/ Z% u+ N
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)* X" _( N- j; H/ F9 Y$ f
{% t- l# U) C7 @6 E
HDC hdc;: s8 A# h% [2 q7 K: N' T2 A% N$ T
PAINTSTRUCT ps;$ }- y; {" Z. |) `" _0 s9 Q) n0 @1 w
switch (messg)2 `1 s1 l/ {2 w! m
{
4 G6 \/ V7 I( u/ _. G! C: h% g( ecase WM_PAINT:
2 F$ d6 j* k. Zhdc=BeginPaint(hWnd,&ps);
. S- {2 t% m0 w! D* J2 t& a# yMoveToEx(hdc,0,0,NULL);3 j( ?- c1 {0 X% d# t5 c8 v- G
LineTo(hdc,639,429);
( o. [; J2 h* T+ S3 xMoveToEx(hdc,639,0,NULL);% z- G1 m4 E# a
LineTo(hdc,0,429);2 u$ u, Z! T% U
TextOut(hdc,120,30,"一些线",6);
" l' V' p i0 J7 D1 Y+ A- ~Chord(hdc,450,20,430,80,455,25,425,70);+ i" b7 a, O; b7 b; m
TextOut(hdc,470,30,"弧线",4);
) |# q* k7 d. r2 J, j7 T' `# TPie(hdc,350,50,400,150,300,50,300,100);
2 m- p0 J$ \/ s8 V5 O1 iTextOut(hdc,350,50,"饼图",4);7 E6 p0 X" d6 h: l V5 t& V7 M' j
Ellipse(hdc,100,100,400,400);7 `6 X6 x+ J4 d' u: e$ F7 P
Ellipse(hdc,249,249,251,251);! \& Q3 l; f5 _ m$ e- w& [
TextOut(hdc,250,250,"圆心",4);* s+ s# p# T' Z$ d
Rectangle(hdc,50,300,150,400);
; b' h7 s1 D' a# G2 C* |% fValidateRect(hWnd,NULL); W) {8 y9 N% G! b* `- n2 S
EndPaint(hWnd,&ps);" N, b9 t/ o$ N# J, o
break;% ^/ M# s' t1 \6 z( T# x
case WM_DESTROY:* U6 r8 |$ f; _$ i+ w; ]
PostQuitMessage(0);
9 [) d& n% J5 X' e" T! n9 ibreak;! V! t3 v1 f" R$ l: F+ X9 E
default:: D: A/ Z7 j" e
return(DefWindowProc(hWnd,messg,wParam,lParam));
( K U7 h* X+ ybreak;
- m: |) R3 v' C& R$ D, ]# ?}) F. R+ y! ?4 ]. j0 l+ f: V8 r
return 0;4 N9 d( [4 j0 C( V3 {, N
}
% l* p" U( J# B7 Y/ n+ c " U, c k* c! \' E5 R
|
|