|
|
windows编程通用的Win32类型和常见的结构
4 g0 `# ^, x; E作者:雷神 6月20日 10:00
! d$ @6 m( `, x6 N3 r2 x: H CALLBACK 在应用程序的回调例程中取代FAR PASCAL
/ ~' {4 p! O0 u: \: k9 a) F% ?HANDLE 一个32位的无符号整数,用作句柄1 v8 h. Y0 Q. {: T
HDC 设备描述句柄! n8 w4 y. z: k ~6 Z( X
HWND 一个32位的无符号整数用作窗口句柄6 K! P. D$ w7 M- Y0 L0 j
LONG 一个32位的带符号整数+ s- [9 N* J0 u1 Q
LPARAM 用于声明lParam的类型
8 ?) @5 r8 g( x& \& zLPCSTR 与LPSTR类似,但用于只读字符串指针) c0 g7 s5 _: G; D( i) A
LPSTR 一个32位的指针/ i0 e0 d1 m1 ?" h
LPVIOD 一个普通指针类型等价于(viod *)0 [$ f1 q& Q: v) F4 l& D7 ?
LRESULT 子窗口过程的返回值
& R3 E5 ~" j7 t9 L6 H" b0 l- }NULL 一个整型的0值,常常用于激活函数的缺省动作和参数
0 G/ i. X+ ? H4 WUINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位: z" X4 M' l' q9 R# D- `2 I# U
WCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
8 d& v% D" O R+ p6 o% k+ RWINAPI 在API的定义中取代FAR PASCAL
6 ^9 R4 l: x1 W+ G6 ^0 IWPARAM 关于wParam的声明2 Z# C, J; O5 Z# L4 c: H/ I
Win32应用程序中常见的结构
4 L) _6 J' e1 a$ t$ O q结构 描述
7 u5 r* s6 ]6 c8 ]% }" [-----------------------------------------------
+ J g& i: n% L; q9 D9 XMSG 定义了输入消息域
, E' n& Q. p; M% ZPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构" l! A% s6 q2 [ a/ ~3 H, \
RECT 定义一个矩形
/ D3 ]4 K! H( U2 N2 LWNDCLASS 定义一个窗口类. C' s& a- r3 R
一个例子:
2 G9 y; n3 o6 `% ^" M$ p#include2 k/ Q' ?; Y8 F# v+ k1 P% w
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);4 \' Y" M, J ?5 }( t9 K8 t
char szProgName[]=" rogName";
* s0 q5 J8 Y! Y0 O/ ?int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)% S5 I, @+ p; x- |4 d( G! i
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。) o4 j) s7 W# Q& _
//从WINDOWS向WINMAIN()传递四个参数:
9 y. ?* P4 L- v% t6 ~//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。1 v% [6 Y- N- @, a: U) y, \5 `
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。$ o( b+ S C$ H2 U1 }
//参数3lpCmdline:
/ z9 P s! ^' i//参数4nCmdShow:( k- w) t* X4 c6 U
{
$ T6 M3 L* l9 A- e, o+ A- b3 rHWND hWnd;
, l" ^* ]& ?; Y' r* E4 D4 n$ B2 MMSG lpMsg;
9 C' p \# E, S4 ~8 |! ` C6 |WNDCLASS wcApp;; o4 {6 B3 n( {! D
wcApp.lpszClassName =szProgName;
' a% S/ B# v; _% r6 SwcApp.hInstance =hInst;' [2 r$ r: `* T
wcApp.lpfnWndProc =WndProc;
o0 I8 e" M+ f. mwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
/ @) T) ~9 J# d# ?+ a$ {5 wwcApp.hIcon =0;9 m9 W" {6 g# `6 \ r
wcApp.lpszMenuName =0;- ~- w# {; G+ ~4 v( H1 @) s3 `
wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
1 A# L8 D0 P0 s3 n/ o2 ^% m/ EwcApp.style =CS_HREDRAW|CS_VREDRAW;1 k G( M0 d; i, T( I7 y- c
wcApp.cbClsExtra =0;* l3 P: P! h# n% J
wcApp.cbWndExtra =0;) u2 L5 L0 C* e/ x1 b# [0 X
if (!RegisterClass(&wcApp))
9 G# I& V9 r" Ureturn 0;9 G9 T: |6 b [ d
hWnd=CreateWindow(szProgName,"这是一个例子",
5 M2 j' w# W+ FWS_OVERLAPPEDWINDOW,; V# ^( e" I; n. \, \
CW_USEDEFAULT,6 M- a% Q% Z9 X# _3 |
CW_USEDEFAULT,
- y2 ]& o" P L% W ?5 g+ \CW_USEDEFAULT,
3 t* f/ d3 x( C- p$ Z7 r6 _4 ACW_USEDEFAULT,
# @, `6 j. ]4 B$ a(HWND)NULL,
& A3 t4 T0 O O* I( z6 r0 X(HMENU)NULL,+ Q$ N. u: ], H4 l
(HANDLE)hInst,
$ O6 D: H @( b# g9 T% l) k/ y7 P(LPSTR)NULL);/ H( u! g# q6 `$ P0 U6 u
ShowWindow(hWnd,nCmdShow);
8 z* V# {: j' ]4 J. x% N: a; a+ q0 JUpdateWindow(hWnd);( ~& U9 E" ?. @
while (GetMessage(&lpMsg,0,0,0)){+ v0 h! g$ d, B4 f: \4 x A
TranslateMessage(&lpMsg);6 e" M2 {5 C- r1 a6 x) u
DispatchMessage(&lpMsg);- t i! t+ U% f/ O
}
J# y5 X9 Q8 @6 G8 x1 {8 z& Hreturn (lpMsg.wParam );9 F5 q% I. G& z
}) i& u3 r7 P% v5 ?1 o
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
. e3 S" S$ d' o7 ]{1 X# L3 t8 z" E& y/ Q+ M" \ Y& D, |
HDC hdc;
" R6 }% ~( r4 I* @' IPAINTSTRUCT ps;
# U& R5 J; j; p1 [switch (messg)7 m8 ~1 c% _ L$ S+ R# f
{4 h5 k! D K1 x$ z5 F
case WM_PAINT:. ^; o% N, ^! }) C3 f
hdc=BeginPaint(hWnd,&ps);0 W. z# c( I" m, H4 [
MoveToEx(hdc,0,0,NULL);
: ]# }/ Z( {& S, zLineTo(hdc,639,429);: `5 w8 i. s& X0 S% _( O, Y8 A
MoveToEx(hdc,639,0,NULL);
! \9 k2 R, ?3 I( mLineTo(hdc,0,429);
- |) }5 O- }/ xTextOut(hdc,120,30,"一些线",6);
F) {( W. J1 z5 u/ F2 jChord(hdc,450,20,430,80,455,25,425,70);
% T# k" l6 C4 {: nTextOut(hdc,470,30,"弧线",4);+ p( A6 i( U( j; P! ?/ b
Pie(hdc,350,50,400,150,300,50,300,100);
0 i- p3 W6 Z0 Q5 _5 D( FTextOut(hdc,350,50,"饼图",4);& J/ \: f/ o" C7 P: o1 Z
Ellipse(hdc,100,100,400,400);+ s( b* {# [, C6 b
Ellipse(hdc,249,249,251,251);
7 ]* v9 f, B& x, |( W# B1 ?TextOut(hdc,250,250,"圆心",4);
& O6 D0 p! |7 r; lRectangle(hdc,50,300,150,400);
}- k) a/ M6 S" Y; YValidateRect(hWnd,NULL);
, Y+ Y0 g% v* K9 o6 q5 {- L+ uEndPaint(hWnd,&ps);* S$ P. n; d% k4 v) t% U
break;% z( f1 q5 i! D; x% X$ ^7 v# n
case WM_DESTROY:
+ n' S* z! J, N" gPostQuitMessage(0);0 C4 v _# z& g; S
break;
" A6 ^1 T# v$ `) e. Zdefault:9 n$ Z/ q2 Q% M% M4 E; q9 L! u( h
return(DefWindowProc(hWnd,messg,wParam,lParam));& S( d' P$ O& W& H1 c
break;2 l5 k5 J; K1 G# e4 \
}
( J# T3 C3 y7 L$ a# `return 0;
! K P2 |% E: G: ]}
& p3 x) y8 W0 c, _1 Y: \0 D 3 Z, S# E2 h/ M/ ?8 X
|
|