|
|
windows编程通用的Win32类型和常见的结构
3 q, q$ P/ ?1 n. C0 w, {( @作者:雷神 6月20日 10:00
+ G9 Q. O$ C# X/ _0 [% Q CALLBACK 在应用程序的回调例程中取代FAR PASCAL3 o8 ?* z$ ]* L9 }7 c2 \
HANDLE 一个32位的无符号整数,用作句柄1 v! \) @+ Q5 z( F, ?$ g. {
HDC 设备描述句柄
4 z/ A. d7 R! {/ _. ]+ ]) {! GHWND 一个32位的无符号整数用作窗口句柄* i+ j# S7 k3 g+ J3 ~
LONG 一个32位的带符号整数* F" {( v' B. m; B# b8 H, m2 l
LPARAM 用于声明lParam的类型' S3 H' L( H$ i3 D8 Y2 E r
LPCSTR 与LPSTR类似,但用于只读字符串指针
3 L2 j- V' W% t0 C, Q* RLPSTR 一个32位的指针* m! e9 y# C; ? I. E& h: W
LPVIOD 一个普通指针类型等价于(viod *)
* r& g/ ~8 }" d8 V& X( d2 d2 r2 l1 \& XLRESULT 子窗口过程的返回值$ k7 |! | ~8 T: @0 v T' Q
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数( k; i3 A; {% k2 l
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
# s5 J. p2 g3 C# b- R0 cWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
6 d3 ~9 {9 {! y0 \9 HWINAPI 在API的定义中取代FAR PASCAL; i& f6 u* p4 d
WPARAM 关于wParam的声明- V4 E# D3 l6 a9 K' @
Win32应用程序中常见的结构
3 L B# m/ q- x, o& X! l结构 描述
6 j, O; @+ d4 W" f: x: U-----------------------------------------------
. h- I/ g$ [6 ?MSG 定义了输入消息域
. g9 R4 ^# Z0 m1 t7 l6 f V0 fPAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构! v5 G" ?. o' K {
RECT 定义一个矩形2 E% J6 z! x' i l4 ~$ h
WNDCLASS 定义一个窗口类! R4 y2 D/ o5 H
一个例子:8 c1 f3 H4 y# \ J3 N
#include- R; t* ]7 H; O9 E) a
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
* |5 R5 G9 Q* Z* bchar szProgName[]=" rogName";
1 F7 d4 P# I, d: E6 xint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)
( M. X8 T g8 t' `, t6 |//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。0 V& r9 H D# {3 z
//从WINDOWS向WINMAIN()传递四个参数:6 \+ Y# M$ j* l' W, L( Z6 n6 C
//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。
2 ~$ Z$ F# m; i1 q, D8 _3 S//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
# n: E( X$ v+ |" m' \' u1 ?9 ?//参数3lpCmdline:
2 G. V3 e, p" Q& Z//参数4nCmdShow:: x/ I, _+ o$ l: p9 k# V$ H6 ~2 G
{3 y6 ~6 y* {0 e# o
HWND hWnd;
8 q( C; K$ h9 aMSG lpMsg;. D1 i) i j. q! V1 }
WNDCLASS wcApp; l" p% Z9 A, B
wcApp.lpszClassName =szProgName;. c' Y! e7 x) k* F: b# K) V
wcApp.hInstance =hInst;
7 h; i. p) A2 w( `wcApp.lpfnWndProc =WndProc;' M% O3 X0 @2 |# i
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
2 G- k) C) v: T8 w2 {4 u6 Z+ x8 ~, ?wcApp.hIcon =0; A! ?' G3 T, G3 C8 m' f4 F0 l
wcApp.lpszMenuName =0;
1 _3 `$ O! A: h, D! ~wcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
/ A9 s: o' T5 FwcApp.style =CS_HREDRAW|CS_VREDRAW;$ A' C$ Y5 k) Y' ~7 K
wcApp.cbClsExtra =0;
3 z! F) U' ?# G0 x' cwcApp.cbWndExtra =0;) Y; w4 }+ Z/ s# O* p
if (!RegisterClass(&wcApp))3 S& p" v8 k6 l Y
return 0;
! p7 h% }& V' \" S- W2 Q- R- BhWnd=CreateWindow(szProgName,"这是一个例子",
+ N" d# l6 m/ y8 H0 ~- d) X! |: Q7 SWS_OVERLAPPEDWINDOW,4 t' s* D! k' t$ N6 O9 `- Q
CW_USEDEFAULT,2 |8 z: v* l+ f/ c$ I) G
CW_USEDEFAULT,# Q$ w+ F+ `4 z& \
CW_USEDEFAULT,1 [, n/ C3 Q( \: P4 c
CW_USEDEFAULT,
Y# z" j+ c g. l. }' @1 G( w* o9 ^(HWND)NULL,7 l3 i0 z5 q0 X7 {6 J v
(HMENU)NULL,0 q% G, R& c+ R, m$ h6 y
(HANDLE)hInst,
3 G4 s+ g4 V! V2 e) D* H& K: b+ j(LPSTR)NULL); n5 R2 R w# z% y
ShowWindow(hWnd,nCmdShow);7 e' U& @* O' I5 G* R0 U# { v
UpdateWindow(hWnd);8 R# d7 N7 H( K; m
while (GetMessage(&lpMsg,0,0,0)){
# G4 e( s# Z3 P y! @8 M8 rTranslateMessage(&lpMsg);7 V8 B6 ? W8 ~
DispatchMessage(&lpMsg);
- T! |4 C1 @! J7 M L}# r) |* S( q# U3 x: a
return (lpMsg.wParam );6 Z( a2 P% E8 `+ l& b
}
3 S8 [2 j: G2 N) j5 w0 @ l' uLRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)0 }( p4 }) K" O) ^% Y4 Y$ s
{1 ^ a( \) Q; S9 F& A
HDC hdc;1 T. s6 I7 q+ z
PAINTSTRUCT ps;
7 p# v2 U. @. o9 J+ iswitch (messg)
' D7 F$ n' T! B8 t; x{
* b( [. V. ]" J2 V- Vcase WM_PAINT:; g5 P. h3 W5 H0 {- W7 ~8 M9 h
hdc=BeginPaint(hWnd,&ps);7 N. A% \" F# A9 P$ b$ k
MoveToEx(hdc,0,0,NULL);. k" [ I5 j0 b8 Z
LineTo(hdc,639,429);
! h) D0 t, d8 aMoveToEx(hdc,639,0,NULL);
" a3 n" [3 U, q3 y9 L. }, aLineTo(hdc,0,429);
& S( N; b! a! k# HTextOut(hdc,120,30,"一些线",6);( z8 b5 o1 b' z% \6 ]; ?# ^, q
Chord(hdc,450,20,430,80,455,25,425,70);3 u) l8 v7 c7 C" @, s. t
TextOut(hdc,470,30,"弧线",4);8 c$ E% F% ^4 Q! q( V0 T+ k
Pie(hdc,350,50,400,150,300,50,300,100);- i. k" Z- v E0 x
TextOut(hdc,350,50,"饼图",4);
4 t e8 |7 J2 p9 ?! ?5 o. b/ sEllipse(hdc,100,100,400,400);2 Q N3 ^& N8 ~5 i9 q( g, i1 x2 `
Ellipse(hdc,249,249,251,251);# K- L5 T) A' q- B+ m5 m) y
TextOut(hdc,250,250,"圆心",4);/ z; |( J3 }* b8 r
Rectangle(hdc,50,300,150,400);
) _6 X2 o* H: a' {+ w9 e' h6 T8 |% RValidateRect(hWnd,NULL);
. H' T7 c j. qEndPaint(hWnd,&ps);) a$ I8 S6 h2 U: W6 m3 R9 ?0 i
break;
. O) h% s& G- g; {. Y2 K) b7 j6 ~case WM_DESTROY:7 K2 E' F% N$ g
PostQuitMessage(0);$ E' v3 v: {' s6 D
break;
& d5 A) Q4 Z6 E; C Z5 @3 Q5 jdefault:
) r' g- t! ^4 z# treturn(DefWindowProc(hWnd,messg,wParam,lParam));
4 C8 [' g/ z/ F/ \6 J& Wbreak;
' B5 [- Z) W' R; r5 v}
" O \& B8 X* P5 x& R, Zreturn 0;( J1 P4 }5 ]' n' s8 n, m2 _7 \
} . }3 W0 T+ l4 ^
; K' N7 C6 D! I* V* X$ `! m& h0 B T
|
|