|
windows编程通用的Win32类型和常见的结构 % a# H5 h; f; i! U9 X$ _, `' ~
作者:雷神 6月20日 10:00 % U: p. h5 f% H
CALLBACK 在应用程序的回调例程中取代FAR PASCAL
1 `% W* @2 ~* L/ M4 AHANDLE 一个32位的无符号整数,用作句柄$ G" v4 f3 a6 O* K
HDC 设备描述句柄' B) |6 w( u! |8 P9 H
HWND 一个32位的无符号整数用作窗口句柄7 b3 V* S. M' O w6 c
LONG 一个32位的带符号整数
2 v+ n; G D: `+ W3 h# M' XLPARAM 用于声明lParam的类型
( j8 b0 D9 p7 |, aLPCSTR 与LPSTR类似,但用于只读字符串指针7 J8 M6 a. t, e( T$ c
LPSTR 一个32位的指针 B. ?2 y& T. C! M
LPVIOD 一个普通指针类型等价于(viod *); x' t( [* Q& N' b4 Q8 c ~
LRESULT 子窗口过程的返回值( @( [* X% u3 K4 B6 n
NULL 一个整型的0值,常常用于激活函数的缺省动作和参数) ~5 l6 g& i" {/ u4 ^* [
UINT 一种无符号的整数类型,其大小取决于主机环境;在NT下是32位
: i! \1 o6 |: x, W( xWCHAR 一种16位的UNICODE字符,用于表示世界上所有语言的符号。
2 K+ C) R/ H3 c5 R; t, VWINAPI 在API的定义中取代FAR PASCAL
: b" l! H" x& Z0 n8 k% F& rWPARAM 关于wParam的声明
: f3 K7 R* }7 V2 N o/ ?5 sWin32应用程序中常见的结构
0 `& r. n# j! `1 C) o7 [- R, M结构 描述6 ?' _* h8 |# P7 g0 C/ Y, v" u, F
-----------------------------------------------
& w c, I; Z9 ?( b6 O; nMSG 定义了输入消息域
$ j* j! C. f2 h% o9 W4 r1 ePAINTSTRUCT 定义了在窗口内绘图时使用的绘图结构- h; ?, S$ O9 V
RECT 定义一个矩形2 I8 U- l3 d4 ?: `
WNDCLASS 定义一个窗口类6 d1 \, S" T9 P& E p0 w
一个例子:
4 t3 l: r5 O' @& n4 g8 W! x) x#include/ ~* W1 c3 O4 }2 \$ E
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);$ c7 U |! D* y$ _6 y& l
char szProgName[]=" rogName";
+ D; q5 `5 T3 \5 Aint WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdline,int nCmdShow)5 [1 T2 `( D! \4 m# n, }4 J' |
//Winmain()是应用程序开始和结束的地方。主要负责注册应用程序的窗口类型;执行必须的初始化过程;创建并初始化应用程序的消息循环(用以接收程序的消息队列);结束程序,通常是在接受了WM_QUIT消息时。3 G+ p3 H0 v9 G7 D
//从WINDOWS向WINMAIN()传递四个参数:
0 m. o* O2 T5 E- z a//参数1hInst:是实例句柄,当应用程序在WINDOWS下运行时,这个数字标识了应用程序。& ?* Z4 U* t* R( R% J
//参数2hPrevInst:将始终是一个NULL值,表示没有这个应用程序的其他实例在运行。
) j9 M2 ^# B4 S2 H+ }# c7 Y//参数3lpCmdline:2 s) c% L& S# V/ @" s! _) ?7 s7 k
//参数4nCmdShow:! P' a: o6 s# U1 d
{/ U7 m3 h- h' X. x& q0 ]' k9 z6 g6 O
HWND hWnd;; M4 c" d3 I7 G; g' c9 v W, n
MSG lpMsg;
8 A) t( ?" r- I8 E. BWNDCLASS wcApp;
2 n( k( _4 @3 o: XwcApp.lpszClassName =szProgName;
7 t) Y: n- V* I* s2 X/ lwcApp.hInstance =hInst;
& ~! }9 |; s9 a) g( U: B' B! NwcApp.lpfnWndProc =WndProc;
5 H* n8 o( D8 ~- ^; m [4 VwcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
7 k. ~' X- F. e! Y0 ~wcApp.hIcon =0;
, i% ^) w2 o9 z+ q4 HwcApp.lpszMenuName =0;
$ P& o3 @9 h( F, V5 V. A, kwcApp.hbrBackground =GetStockObject(WHITE_BRUSH);
/ |% M* k" ]( WwcApp.style =CS_HREDRAW|CS_VREDRAW;! o! i0 U) W* }1 U, M3 K4 T
wcApp.cbClsExtra =0;
% o9 i/ p! _( q7 A; b# `5 mwcApp.cbWndExtra =0;
* M" I) d( e/ ^" j( Pif (!RegisterClass(&wcApp))/ C+ v3 k$ q! ~- V, s
return 0;: t; `+ o9 `$ P; X) }
hWnd=CreateWindow(szProgName,"这是一个例子",
( H3 w8 T! e1 Y6 v. n- C& \2 kWS_OVERLAPPEDWINDOW,0 f9 A& X# I; i+ R ?) L
CW_USEDEFAULT,
5 E1 u# x4 E$ K7 T7 C1 S5 ~+ `: cCW_USEDEFAULT,
' i3 a3 h( K, [+ Q2 {' _CW_USEDEFAULT,
& `; f _0 M8 A! V9 d! L# XCW_USEDEFAULT,
5 P. e" ^6 r( l! e(HWND)NULL,
0 k$ B8 b9 L2 P. ]4 ~(HMENU)NULL,
i8 C7 }: v( u% B( C o6 o(HANDLE)hInst,
5 G1 R! ?/ V. z& L' x(LPSTR)NULL);2 m; x: U0 {" x/ n$ d# _5 B( D
ShowWindow(hWnd,nCmdShow);) G5 H4 X9 D2 @
UpdateWindow(hWnd);
4 Z8 I9 f( E- F2 U4 Fwhile (GetMessage(&lpMsg,0,0,0)){5 Z) f# T# J4 e8 E# z0 o
TranslateMessage(&lpMsg);
. V( v4 X) s3 d& w! u" cDispatchMessage(&lpMsg);# ~) J( p# I9 |0 E, l+ {
}& r, p; R5 y2 _, |: D
return (lpMsg.wParam );! x7 |/ H) Z% I3 ? [0 N
}4 i5 o$ I. |- h' w- z/ t
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)7 k1 D3 k1 z9 p! g
{- M5 h8 G) k4 f5 E7 d! j
HDC hdc;6 j! q' V: d' w7 h
PAINTSTRUCT ps;
0 I3 l( H+ h5 @5 b6 {, y& Q3 uswitch (messg) t% B" V$ J+ _5 b0 @7 V: P
{
3 r3 B8 P5 [' a$ zcase WM_PAINT:$ |4 B- h! U7 v( p5 I
hdc=BeginPaint(hWnd,&ps);( `; ?; L& n9 Y, U8 `( H7 L, H
MoveToEx(hdc,0,0,NULL);
, J: S4 x4 d. G: O# _* yLineTo(hdc,639,429);* I# @& C$ Y' W/ @1 k
MoveToEx(hdc,639,0,NULL);
1 X$ T9 d3 \; \6 a: Z& \9 z# g8 {& p ~LineTo(hdc,0,429);+ X! k4 Y& p7 Q3 w. ^0 G$ E- W
TextOut(hdc,120,30,"一些线",6);! k: R4 p# G( {8 r( W" R4 R
Chord(hdc,450,20,430,80,455,25,425,70);
, D; e: M$ r v* @8 W' N- O5 l& gTextOut(hdc,470,30,"弧线",4);
% w; Q: F9 P0 d6 u( p& B7 g }; pPie(hdc,350,50,400,150,300,50,300,100);
# i" @6 v' L7 k/ @# A wTextOut(hdc,350,50,"饼图",4);
8 D. J% N+ z% O8 _- k) IEllipse(hdc,100,100,400,400);
+ N3 ^' }$ T ^Ellipse(hdc,249,249,251,251);
( R( G( R+ N: k2 i! bTextOut(hdc,250,250,"圆心",4);
; _( A* K# M3 `* B/ w0 ~# VRectangle(hdc,50,300,150,400);1 M* R% U) M" b4 O9 Q7 h( w0 J, d
ValidateRect(hWnd,NULL);
5 Y8 W$ z/ j% T: A+ S8 pEndPaint(hWnd,&ps);' @5 y1 ]1 Q& c% N
break;
" {8 L1 T- \& V. [case WM_DESTROY:
+ V6 h8 i, V4 I& OPostQuitMessage(0);/ ?& A3 S1 U* S! ^. O4 e3 N
break;' A. G( T8 @# L$ p( @% L/ x
default:
6 {0 O8 W* j3 p g# Xreturn(DefWindowProc(hWnd,messg,wParam,lParam));
% L9 N% ?; L: x! o& b9 P8 qbreak;7 h6 d" ]9 T# ^! v* d# A
}
G5 e# b/ ?+ y% |2 h: X: |- \return 0;
* e! H5 {! l) `5 y" v1 W} * Z* t% E1 w& p' H: P/ {
" t+ T0 t& Z" ~- v7 e
|
|