P. 1
forgers-win32-tutorial ARABIC

forgers-win32-tutorial ARABIC

|Views: 10|Likes:
Published by hayssam

More info:

Published by: hayssam on Jun 11, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/09/2014

pdf

text

original

C

c¸cö¸ : ________________________________ ______________ 4
Ll..........(...al........al ________________________________ _____ 6
I . ¡le _oc¸ . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 6
II . g¸l|], Ia,l win32 : ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸ 7
III . c|(a, ecol| . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 9
IV . _|la]ll Ilö|ll . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 17
V . _|la]ll cö|o ¹l]cl . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸ 22
VI . c]lç¸l ¡lco|al . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 26
VII . Ll|çö,\lç ¡|lçöll . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 29
VIII . Ll]lçol . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 35
IX . ,llo i, Ll]lço . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 40
X . c(al(öll Ll¸±o|ll . c]a Ll±,]¸ .Ll],]o .]l]]l . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 44
XI . ]lçol ¹lo leç(a c||a\l ]|±l . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸ 50
I(a, _((|. .lá|l . ________________________________ ________ 53
I . _ç\l .]çl . ||ll ¯oç Ll¸±o .lá|l c(o ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸ 53
II . c±|láll Ll]lçolç Llo|¸l ¡lco|al . ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸ 56
III . ¯ll|ll .]çl : cllol I,]aç Llçc\l I,]a ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 61
IV . ç,l]ll .]çl . Llc||a¸l ecc±|¸ cÐolç MDI ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 66
c(|l((ll Llc±¸l cÐolç ________________________________ _____ 76
I . ç ]lÐçl Llol(a .,l¸|((ll BitBlt ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸ 76
II . coloa c(|ö| e]ç~ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸¸ 81
III . Ll±]o|¸lç ¯oç¸l ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸¸¸¸ 86
IV . _lçl\lç Iç|ol ._|ll ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸¸¸ 91
_|l\çç Llc±¸ ________________________________ _________ 97
I . lÐ|l||ol, g~|, çol]¸ç ,|± ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸¸¸¸ 97
II . _a _ço(o|l c(|lql ]¸lç\l ]|a Llçcl .. ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 99
III . _a c|1]ç(l c(|lql ]¸lç\l ]|a Llçcl .. ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 100
Llöo|¸ ________________________________ ______________ 103
I . l _o|¸l . c±|láll .l|oil _ç|o ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ ¸¸¸ 103
II . ,_o|¸l . _l _±(|, lcl¸ .ll ¡|±|. API .ll _(o MFC ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 106
III . g_o|¸l . c]ç¸l .|¸ _ço Ll|oi¸ ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸ 109
Llo||~¸l co|1 ________________________________ ________ 111
j,.s,
_\x¸ç\¡ .\,..s\ ¿\s _\o ¸í»i\¡ ÷íui\¡ .¿,s¸i\ ¿¸¸i\ a\ ¿», .
_a>u\¡:ç\ ,\saui\ -.x c,i( .,\¸ai\ a>\, a»¸>ç\ ¿o ±s\.i\¡ _¸\ai\ _s\
5 ±i\. ,¸s¡ _¸\>i\ .\¸i\ _»¡: _\o ±,», ¸.a, ¡i¡ _>x\ ,\ í.\ .a:¡¸, ¸¡»\ ¸\:
,s\, a,.,:íi\ _,.\¡ai\ ±¸su:¡ .±,x¸ _i», a.¡\>ç\ a,» ,¸.\i: ±»¡ _ ..\ui\
¸\:5 \..\.>:x\ ¸.>i \¸L. .\a.\i. .¡\¸: a.,.÷\ \.:>i ±,a, _s _¡ .÷.,.}\ ,\s\Luç\
ç ÷\¡x¡ .\¸s ..\¸»¡ ._,».:i\ a,\¸o \aua.: a,.¸» ,\¸.\.¡ _a:i. .±5¸i\ aasí
a,,.s\ ±.\¡}\ _\o \a.\o\ _ ÷¸i:¸.¡ .
±:ii\ ¸»¡: ¸.o \a¸x\ .¸\.x\ ÷.>i a,.¸» ÷¸.\.¡ ¸\:ii\ \.m a¡¸, ±.s
_¡. _»¡:i ¸s\ ±.\s ¿.¡ ._¸\>:ç\ ±\os _\:. _o _.\. _,\a¡ s( a,.¡¸iiy\ ,\.,:ii\¡
. aa¸>ç\ as¸i\ ¿\o ¿¡i¡ _ _.o\¸\i ±:ii\ ¿. _> .
.\¸s .s\ \aa i\ _i\ ±.¸.y\ ,\sau ¿. ao¡¸s _us\ aa,as _ ¡x .¸\:ii\ \.x
.\:xs\ a, .u»\¡ .¸¡..,¡i\ ¸\L. ±s as¸i\ ¿\o · ¸\,. ±¡¸, Brook Niles ,\ _ í.\¡ .
,\ ±,\:¸\ .\.,s a,>, _,¸o ¸¡\x\, ci. ¿. ,¸,\ ¡\ _.:.ç\ _,¸>i\ ¿.¸ç\ .,a:»,
_.¸» ¸¡\x\, ._¡¸.i\ -.x ±s\ui a,¸¸i\ aa»\¡ç\ ±s a:¡¸: _\o ,¸.» \. ¿s¸:\
a.»., ¡i¡ _¸>i\, _a, _» ±»s a.\ s( .a,¸\>i\ a,\aii\¡ a,,.s\ ai.÷\ aua.: .÷.\>i\5
a\,\» . o\ .ai¡ .¿\i:ç\ _¸u, ,.s\ \.\,s\ _.\¸» .a,»¸÷\ a¡¸i\ ¸¡\x\ _\o ,.¸:
.\¡5\ í» .a¡¸i\ _ s( ¸¡. _i _,i \.\» ._a,a÷\ ¸\:ii\ ±i¡. ¿, ¸.s\ aa,as _ \.x¡
_L,Ls ¿. ±.\5 ¿,.\u: s¡ ._s¸, ¿. ±.\5 .
¸.Lu:x c.\¡ .,í» ._¡¸.i\ ¿. _¡.i\ \.a, _¸:aç\ ¿. ±.5 \.( ,\s\Lu¡
,\. _\o _x\ ,\ _\o \u,¸s ±.5 _.\ ¿o¸¡ .a:ai\ \¸o ±\:s .» .÷.,.s a,,¸o
.¸.»\ \. _u»\, .\a:ss\ ±i¡\s .ai¡ .í,., \m .s\ ¿ ,\s\Luç\ ¿. _.ii\ ,\ s( .¿a.ç\
a:¡» ±.\¡s ,¸o\ ,\ .,¸\ .¸\:ii\ \.x _ c,\¸ _..: ,\ ¿.¸ç\ _s\ c.. .,¸\ \.m
>u l\a.¡ aa ) a¡¸i\ .u»\ { _,..i\ ¸\,:s\ _ .¡x ¡\ ._s¸, ¡\ _>.L. \Ls _s \ax\5¡ .
.\¸:os\, ¸\i»s\ _»s¡ .\Lss\ _,su:, ¸¡»\ ,\ _\o .a,.,:íi\ ,\s\Lu¸\i _,¸>i\
\.,\o \a, \¡\s.: í» .¿is:\u. _\o .
_.i\ _¸¸i\ ¿»¡ç\ _( ÷¸x\.. ¸\x.i\ c.i¸,» .¸.s\ c,\o _ix\ \. \.( ±,a:x\
_¡¸.i\ -.x a.. . html . index f tutorial f org . winprog . www :ff http .,¸: ±.5 ¡i \.\ .
¸\:ii\ \.x .\¸.(, \,¡x ¸¡a. _:s _\x\¸. c.\i.(, a.(» .¸\:ii\ \.x _ c:\»\u( ¿\¸.(
,\¸\, \¸:\.¡ .
¸,¸o ±.o¸ \. \.( _,\a. ,¡. ¿. ¿ii .ci. c\» .a:\.x( ¡\ ¸\:ii\ ¿.» _ _¸\ai\ _
¸.s\ _ _:¸¡». ¡s¸\» ci. _o ._.\. .
\a:¡¸, ±¸» .ai¡ ._¸aai\ _ \x\¸x \¸5 .\¸s\ a»¸ _( ¿»a. ¸\:ii\ \.x
s( ci. .\¸¡ ¿. ¡s¸, s .¿\». _\ ¿. a,.x ._¸\ai\ _¸,¸o c,., _, ,s\ ¡x\x¡ .\,\s¸.
¿a.i\ _÷\, .\o.i\, a,\o \¡\s.: s ,\ \,s\¸ .a,,¸o ,¡¸s _¸\»ç\¡ ¸¸>i\ a:¡ss
_íui\¡ ,\_y\¡ ¿.s\¡ a,\.m\¡ .
ºº,,ll::éélljj jj..¡¡ jj¸¸±±.. ..,,éé
¿. ¸¡.¸ ¿\¸.(, ±¸» _.(» .¸\:ii\ \.x ,¡¸u¡ ¸\:i\ ¸\çy\ _s\ ¿. ._¸\ai\ _¸,¸o
\.x _i»i\ \.x ¡\ ) \a¸o., s ¸¡ui\ ¿>, ,s ¿.\.¸, Acrobat Reader { ¿5\.\ _
,\.¡\>¸\i _.\ii\ _¸»i\ ¡\ _x\xs\ _¡u¡ç\ _( _¡s¸i\ ¿,L:»: \a,\o ¸a.i\, .aa\:s
¿,¡i\ ,\,u¡us ±\:s a>s\¸. ¿. c.i_ ¸¡\xs\ \.x .\a:>i\L. ..u, ±.\ _i\ 32 .
¸\:ii\ ¿. _¸i:¡ .¡>: ,\ .,¸: .a>s\¸ç\ ÷¸aai c:>i\L. .>,¡ ,s\ . »s .\.
\.x _\o ¸a.i\, ±a» ¿» .ci. c,\o _a»,i ¸¸i\ ¿.\.¸, _\÷\¡ Acrobat Reader .
_,\»i\ ¿»¡¸\i c\a.,i .
_,i.i\ \.x .\¸s\ _5 _ ÷.¸\¡i\ a\..s\ .¡5\ _,¸s c.i_ '..l<.l', .
__ll.. ¸¸éé,,
_¡ .¸\:ii\ \.x _»s _ ÷¸x\.. _o ¡\ ÷¸x\.. aa,¸L, ¿x\x ¿. _5 ¸ix\
¸5.i\, ¿s\¡ .a,\o ,í,.>:¡ ,\Lsí. a»\u( _ ¡\ a:\Ls\ _,su: . _s\ WebDev .
>,.»i\ _í» _s\¡ .\.x ±ss\ .±,.»i\ _.\a: ±ss\ ao¡x¡ç\ ¸\¡¸¡ _s ÷¡ss\ _5¡ ._
±.¸.y\¡ ¸:¡,.¸i\i a,,¸>i\ .
¸\:5 ¿. a.i\.i\ a>.Li\ _,a.:¡ .\¸.( a.¡o¡ a\ .¸s ¿ . ¸¦,, ¸± )¸_¦[ ¸¸¦,
¸¸,,¸¸¦[ _ 16 _a.\s 200+ .i _»\¡ç\ 23 ÷.>ai\ ¡. 1+2+ .
,l ],|e|| W|11I k|| ,|: ]±e.
www.c4arab.com www.winprog.org 6
.l..........,...,l........,j
! ¡|¿ ¸l¸, .
.. _.Il _¸¸iIl ei± Il ,lL. .>. ¤>o¸.Il .l,.l.l :I ,is. ¤I,çL .lcl. l¡ao _±s
W!N32 AP! . .Icl _îI _.Il _± ¤Iza..zIl ¤aIIl .lº¸±o _.Il ++ li± .,¸±.. _z..
.lsIzIl _o ¿ç.Il . Il ¿o _ola.Il. _z.. _.Il .laIIl ¤,s. _Ic _.L. .loçIazIl .Icl :Iií AP!
:¸,. Uç>,sIl¸ _I.z.Vl lºl>Il l¡,º lz. . _îI .laIIl ei¡I ¤..l.zIl >lçíVl ¸íi. ,çºl _I .ç.
_l>.Il _o _,IsIl lçss> ,¡.îI¸ .laIIl ¤,s. ¿o _,IiIl li± lçIza..l _l.Il _a. .
_I¸ _.Il ¤aI .l,I¸l ,,is.I _,IiIl li± _a., _I l¡cl..l .>lçIl .lçL>Il _îI ¸¸L.,
,s..I lL>l _,>±.¸ i >lçíVl Il _Ic clí lç. _. i.V¸ç. ++ Il ¸l _. Uç>,s .++
_.ao .¸a. V ..í l>| " ¸¸ílzIl " V¸ " typedef " ¤z,Ia.Il _zc .çI.l .¸a. V¸ switch
_¸¸iIl ei± .l>s±I ¸¸L.Il _.º :I> _º ¤±.>zIl ..îIl _a. ¿IlL.¸ ¿>¸. cl :I _.>..,º .
4,Iø LIhny, :
.l¸ l.l,>l ¤.V l¡.aIlLo .>, _.Il¸ ¤ol¡Il Lls.Il _a. ¸íiI _a.l _,IiIl li± ¤.l¸> l.
lo l¸,.í .LI.>l _sIl _s. _º ¿s.. ¤Il>o Vº l¡,Ic ¿IL. ,I l>|¸ _a.Il ciI ,,±lszIl .
_± Lls.Il ei± :
N ¿ç. _o ¤I.oVl _º ¤±¸¸azIl ¸>l±zIl zip ¤,Il.o ..,I :
l _z± >çîIl _olí _l¸>|. ,ºl ,I l¡,I| ¸¸L.Il >i±. l.l _.Il Lls.Il Lsº _îI _.I .
_,z>.I çcio ..lº >çîIl _o ¸>Il li± _zc .çI.l ¤º¸ao _º l.cl¸ ..í c|º
Il .lsIo _º _º¸zIl >çîIl .,¸>.¸ zip .
N _. _í ¿IlL :
l¸,.í :.V _.l.Il _o V,Iº i>º lo ¿ç±çzI :.aIlLo l..l Ulç. :Il. _Ic ¸L> lo l>|
±.. lo .l>s± ¤,s. _º e¸.l.o .>.l ¸l ¿ç±çzIl ¤,s.I :.aIlLo l..l .lç>Il .>l
¤I..Vl _¸L _.º _¸¸iIl ei± .
,l ],|e|| W|11I k|| ¿.|:,: La:| W|11I
www.c4arab.com www.winprog.org 7
!! ],|i¸, ]æ,| 32 win :
¸¸i.,¸ _ol¸. _o _ol.¸. L..l .,¸±.. ,çs. l.ciº ¤,laII l.i..o ..í lo l>| . >çîIl _... ,º
e¸s,.Il ¸¸>o _º _.Vl ) source editor ( .¸±zIl. _l>Il ) compiler ( lo _Ic ¸çoVl .¸l. lo l>|¸
_,çIl ,Ilc _º _ol.¸. ¸a±l _Ic _±>.. :.|º ,l¸, 32 .
_.Il. _,I¸ _.Il. ç± l.± >çîIl cl. _... V ++ ¤,.l.Il ¤aIIl. _l>Il .¸±zIl clí c|¸
,I.Il ¸l.zIl _º ¸,.Il¸ .¸¸>Il _Ic Lls.Il ¿±¸ _o ¿.z, V li± cl V| _,cç.Il Ví _.s, , . li¡I
l.sIo _z... l..|º test.c _.Vl >çîIl ¤.l,L _º _z>, çiIl¸ :
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
return 0;
}
l..l :º>l±.. _.Il lL>Vl el¸º ç± ¤,I| çcio ..l _. U¸lº Ul.zIl li± _za, ,I l>|
.¸±zIl ¿o ¤sº¸zIl .l.,.îIl ¤aIlLz. ,sº l¡.cç... ,I l>|º _ol.¸.Il i,s.. .
_. Uç>,sIl _ol.¸. _z± iíl. ++ i,i>.. .zº :.l _o V.o W!N32 GU! _,.L. _,I¸
çîIl ¿ç. _o Uç.. ) Console ( .
lL>Vl cV _. _í ¸í> _,IiIl li± _º l.¸¸isz. _,I ¤.|º _,ºl¸aIl _o ¸>l ¿ç. çl
¸>V .¸±o _o .I.>. l¡.>Ilao .çI.l¸ .
,çs, cl Ul.zIl li± _º _îz, .¸±zIl .l¸,i>.Il _a. i,Iç.. ) warnings ( ,ic _ç±>.
l¸.ol¸l.Il Ulza..l ¤IliIl i,¸¸. ,., _.Il . WinNain >¸l¸ li¡º e>lc l¡. .
>çîIl _o ¤L,..Il .l..Il ei± _.a. l>lo cVl
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
WinNain() : ¤IliII ¤.ºlîzIl ¤IliIl _± main() _º ¤oi>..zIl _î,.ç,Il ¸l _¸iIl . _o
i,s..Il ¤,Izc _ol.¸.Il li., l.± . _¡º .l¸.ol¸l.Il lol :
,l ],|e|| W|11I k|| ¿.|:,: La:| W|11I
www.c4arab.com www.winprog.org 8
HINSTANCE hInstance
_.so ) handle ( çi,s..Il _ol.¸.Il .Io ) .Io .exe _º
e¸íliIl (
HINSTANCE hPrevInstance
lz.l> NULL _,çIl .ls,.L.I ¤...Il. 32
LPSTR lpCmdLine
.lL,.çIl ¸L. 籸 ) arguments ( ¿ç. _o cçî, .,>.
.¸¸> ¤I.I. ) string ( _ol.¸.Il ,.l c¸> _o .
int nCmdShow
¤>,>± ¤z,º ç± L,.çIl li± ) integer ( l¡Il.¸| _îz, _.Il¸
_I| ShowWindow() . ls>V l¡,I| ¸¸L... .
H!nstance _Ic :I> ,., .,>. ¸>l _. çl ¸l >¸lçzIl _,z>.í ,l¡zIl _a.I _za...
..o cç ¤,Lz.Il ei>çIl .Io lo| _± ¤,Lz.Il ei>çIl¸ .exe ¸l .dll _º¸ _ol.¸.Il _z± ¤I,z>. ,.
Il 籸 Vl ¤,Lz.Il .li>çIl _o i>l¸ ¿ç. ¿o _ola.Il ,.,. li± _z,Ia.Il l.I,I> .exe
HPrev!nstance _,.zII l±.so cçî.I _za... ) instance ( _.l.Il ei,s.. ç¸l>Il _ol.¸.II
:I> i>lç. lo l>| ) _º l.Ilc win16 ( _,çIl _º 32 :I> Ulz±| :.îz, .
.IriimyI LgImÌ :
W!NAP! . .¸a, lci..VI .çI.l ,i>... _stdcall _Is. Vº l¡.,±lo ,Ia. _î. ,I l>|
Il li± _º l..¸¸> ¸lL| _¸l> l¡.V 縸¸± l±>ç>¸ cl. ¸íi. Lsº l¡.l.. _,Ii .
_jgII _ LIiI,;II ¿IgiÌ 32 :
¸¸i.,çIl ¤.,. _º ¸,zo .,¸a. l¡I ¿lç.Vl _a. cl L>V.. U!NT _.a. ) Unsigned !NT (
cl lzí ¸.ço ¸,aIl _,>±Il >iaIl .,¸a.I _±¸ LPSTR _.a. ) Long Pointer to STRing ( _±¸
I ¤.ºlîo char* .¸¸> _Ic ¸.ço Ulza..l c|º li¡I l¸> ,I±¸ _Ic _,çL ¸.ço _o Vi.
¤sºlç.o ¿lç.Vl cçî. cl .>, Lsº _ol.¸.Il. ¸±, V .¸¸> ¤I.I. .
¤s.l.Ilº ¸,.s.Il _¡. _. _í ¸,±,.¸ iclçsIl _a. ¸íi. Lsº LP _.a. Long
Pointer _,çIl ¤.,. _º 32 ¸..a, Long ¤.l.. _Is. V c>| lsILo . >ç±szIl .¸a. V :.l çI lol
¸.çzIl. _,IiIl li± ¤z.. _.º :Ii. ¤z.¡o c¸>l ..í ¤a>l¸o lz.l> _.>..,º .
ia. _.l, LP .¸>Il C _.a, çiIl¸ Const ¤Iíl. _o ¿lç.VI ¤...Il. li±¸ LPCSTR cl çl
_,> _º l±lç.>o ¸,,a. _îz, V¸ ¤..l.Il _± .¸¸>Il ¤I.I. LPSTR _,ia. _îz,¸ ¤..l. ..,I
l±lç.>o .
>. cl _îz, l±,l .¸>Il i T >çî,.ç,Il. _za. .o>lzº :I> cl.. _Is. V l¡. l>¸¸zo
) Unicode ( l.,. _.a. V l¡.|º .
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 9
!!! J[¿æ, J¸s|i .
_º¸zIl Ul.zIl : simple_window
_,I ¤.îI¸ .a±Il ¸oVl. _,I ¤L,.. eiºl. _zc
¸.Il _º ,î>.Il _îz, _.> .>l¸ ¤z,Ia.¸ ¤Il> _í UçIio ¤º¸azº l,.lç.c Vzc _ol. .
Il Ul¸> l¡>¡... çiIl _zaIl .lçL> ¤º¸ao AP! l¡.V ¤,z±Vl ¤,lc _º ¸ol ç± eiºl. _zaI
¸¸i.,çIl iºlç. _îI ¤,.l.Vl ¤,±¸Vl ¸..a. .
_.>.., .çI.Vl _s. iz.cl li.ll±¸ ¤..ºl.o _.º >çîIl _¸c lz.l> :
#include <windows.h>
const char g_szClassName[] = "myWindowClass";
/* .¸L. 4 : ...... ^¸,¸ */
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
/* .¸L. 1 : ...... ¯.. _¸>.. */
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 10
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
/* .¸L. 2 : ...... ^...¸ */
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,g_szClassName,
"The title of my window",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
/* .¸L. 3 : _...¸. ¯..> */
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
_,çIl iºlç. _o eiºl. _,s>.I ¤>l¸>| _îz, >çí _.>l li± 32 >¸i> _º >çîIl li± 70 l¸L. .
¤Iî.o c¸> _o _za,. Ul.zIl li± c|º _l>.. _.l.Il Ul.zIl i,s.. ,. lo l>| .
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 11
ñghnI 1 : ñísIiII 4is _,µmi
eiºl.Il ¤.º ) Window Class ( o c¸>. _l>Il l±l¸>| :I> _º lz. eiºl.Il ¿ç.. _Ia.. .loçIa
l¡. ) Window Procedure ( eiºl.Il .ºl¸, çiIl¸ ¤.çs,Vl ) icon ( cçI¸ eiºl.II e¸,.îIl¸ e¸,a±Il
¤,sI>Il . _,>.. :.îz, Ul>zIl li± _º ¤.º . lo l..|¸ ei>l¸ ei± UV> _o iºlç. _o ¤,º .c¸
e¸o _í _º _.l±>Il ¸í> e>lc| c¸> _o ¤.sIl . :.îz, eiºl.Il ¤.º _º _.l±> _o e>i>. lo .Icl
¤.sIl ei± _o ¤s..zIl iºlç.Il _º ¤I,ia. .
_.Il .l.º l,±ç±> _s. l¡I _,I eiºl.Il ¤.º .++
const char g_szClassName[] = "myWindowClass";
l ¸,a.zIl ¿ç. _o ç± eVc .¸¸> ¤I.I. ¤.º ,.| _,¸>.I ¸,a.zIl li± ,i>..,¸ ¤..l.
,lL.Il ¿o eiºl.Il ¤.º _,>..I ls>V ¤oi>.... çiIl¸ eiºl.Il .
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
_º ¤oi>... çiIl >çîIl ç± li± WinMain() _,>..I ¤.º l±cl _z. ,çs. eiºl.Il _î,¡Il wc ,.
¤IliIl _ci... RegisterClassEx() ,lL.Il ¿o eiºl.Il ¤.º _,>..I .
l±cl _.Vlí _± eiºl.Il ¤.º :
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 12
cbSize _î,¡Il ,>>
style Lz. ¤.sIl (CS_*) eiºl.Il Lz. ¿o ¤LI> .>, V (WS_*) ei± cçî. e>lc
I ¤,¸l.o ¤z,sIl 0
lpfnWndProc eiºl.Il l¸>| ç>. ¸.ço ) window procedure ( ¤.sIl ei¡I ) eiºl.Il ¤.sI çl (
cbClsExtra .l.l,.Il ¤,zí ) data ( e>lc ¤.sIl ei¡I e¸íliIl _º e¸ç>>zIl 0
cbWndExtra _± e>lc ¤z,sIl ¤.sIl ei± _o eiºl. _îI e¸íliIl _º e¸ç>>zIl .l.l,.Il ¤,zí 0
h!nstance _.so _,.zIl _,.L.Il _o _I>..zIl ) ¸ ¤Il> _º ,i>..zIl ¸.ol¸l.Il _s. ç±
¤,.,.¸Il _ol.¸.Il WinNain() (
h!con _Ic La±Il _c l¡.L>Vo ,., e¸,.í ¤.çs,l Alt+Tab ) ,>>. cçî. e>lc 32 * 32
_.î. (
hCursor eiºl.Il ¸lL| _z± _¸lzIl :,¸>. l..l ¸.çzIl _î.
hbrBackground .II _,ao cçI lLc\ _±¸ ¤,sI>Il el.¸º eiºl
lpszNenuName ,.l >¸çzI ¤z.lsIl eiºl.Il ei± ei.lº _º l¡oli>..l _îzzIl
lpszClassName .l.sIl ¤,s. _c l±¸,,z.¸ ¤.sIl .,¸a. _o l..îz, ,.|
h!conSm ºl.II ¸.,Vl ççIaIl _í¸Il _º ¸¡L. e¸,a± ¤.çs,l ,l¡zIl L,¸. _º l±,l¸ ei
¸¸i.,çIl. _l>Il ) ,>>. cçî. e>lc 16 * 16 _.î. (
.Icl _IsIl _ci.., V _a,.L _. .l,LazIl ei± _í .la,..l _Ic ¸>lº ¸,c cçî. iº
_,IiIl li± _¸¸> ¤,s. _º .l¡.|. l¡>¸. ,.,. .l,LazIl ei± .
,lL.Il ¿o ¤.sIl ei± _,>..I _a.. l±ia. RegisterClassEx(8wc) . c|º _.sIl ¤Il> _º
¤,.,.¸Il _ol.¸.Il ¤Il> _I| >ça.¸ _ol.¸.Il ¸>la. ¤,Ic¸ :Ii. l.¸.>. ¤Il.¸ l.,I| _.¸, ,lL.Il
WinNain()
ñghnI 2 : ñísIiII .Imi|
ei± ,li>..l. eiºl. l..| l..lîo|. cçî, ¤.|º eiºl.Il ¤.sI _,>..Il ¤,Izc _l>. ¤Il> _º
¤.sIl . Vo :,Ic .>, ¤IliIl .l¸.ol¸l. ¤L> CreateWindowEx() ) ¤Il> ¤Iaº lz.l> .>, çiIl¸
Ul¸iI lci..l AP! ( .l.Il li± _º ¤c¸.. l¡>¸.. ,çºl. _îI .
HWND hwnd;
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 13
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
U¸Vl ¸.ol¸l.Il ) WS_EX_CL!ENTEDGE ( ç± Lz. ¿.çzIl eiºl.Il ) extended ( li± _º
eiºl.Il ¸lL\ e¸olc ¤,.Ll. ¤,.l> l.,Lcl Ul.zIl . ¤z,sIl _a>l 0 _î.Il ¤º¸ao .>¸l l>| ..l.zIl
¤z,sIl ei¡I . ¤>,..Il L>V¸ ,,sIl ¤,s. .¸> .
,.l l.,iI :I> ia. ¤.sIl ) g_szClassName ( _o ¿ç. çl _c ,lL.Il ¸.>, ¸.ol¸l.Il li±
e]l..| .>, iºlç.Il . l..|º ls.l. l¡I,>... l.zº _.Il ¤.sIl ¿ç. _o eiºl. l..\ _a.. l..l lz.¸
... ¤.sIl ei± ,.l _za . _º ¸¡L,. çiIl _.Il 籸 l..iºl. clç.c ¸l ,.l i,i>.. l.zº :I> ia.
¤,z..Il (caption) l..iºl.. _l>Il clç.aIl L,¸. ¸l .
. .¸azIl ¸.ol¸l.Il WS_OvERLAPPEDW!NDOW _o i,iaIl i>ç, eiºl.Il Lz.. _l> ç±
.l¸.ol¸l.Il ei± ¿ç. _í _zc ¤º¸azI l¡.,¸>. :.îz,¸ . ls>V l¡I ¸¸L.Il ,.,. .
cl¸.ol¸l.Ilº l¡.ls.l.í eisao ..,I ¤,IlçzIl ¤a.¸Vl .l¸.ol¸l.Il . clº ¸azIl
CW_USEDEFAULT eiºl.Il .l,.li>\ lz± _,.¸o X ¸ Y ¤.l.II ¸.,Vl ççIaIl _í¸Il _o ¤,li. .
ºl.Il ¿ºço cl±>, cliIIl cl¸.ol¸l.Il ¤z,sIl. lz¡,I| e¸l.\l ,. ei CW_USEDEFAULT ¤,¸>Il :¸.I
l±]l..| ,., iºl. çV ¤,±l¸.ºVl ,,sIl ¸l,.>V ,lL.II . _,.z,sIl lol 320 ¸ 2+0 _¸c cl±>. lz¡º
eiºl.Il ¿ls.¸l¸ .
¤.l. _Ic UlçLVl l¡. _ls. ei>¸ ¸a±l _±¸ _.î.Il ei>ç. ¤.ç.>o ,,sIl _í
¸.ç,.zîIl . i± _Ic Uic ¤>,..I L>V i,s..Il ia.¸ ,,sIl e ) eiºl.Il ,>>¸ ¿ºço _º .l¸,a. .(
:I> ia. _.l, ,. ) NULL, NULL, g-h!ns, NULL ( .l¸.ol¸l.Il ei± _º l.± l.i.c : _.so
) handle ( .l.l,. ç>. ¸.ço¸ _,.L.Il _c _,.zIl _.so ¤z.lsIl _.so ,Vl eiºl.Il ) data ( l..|
eiºl.Il .
l>IL±zIl .¸.í _,çIl ¤.,. _º ¤,.l.l l¡.îI .isa.¸ ¤Il>o V . 32 .
l..l¸ l.V _o¸± _.I.. _Ic ¤..¸o cçî. iºlç.Il ¸¸i.,çIl _º . _Ic ¸¸ L>V. loi.aº
,Vl eiºl.Il _.so c|º l.Il.o _º ,Vl _± ¤I ¤,¸l>Il eiºl.Il¸ _.\l ç± ¸¸Il li± c|º eiºl.Il )
PerentWindow ( ,¸iao ) NULL ( li±¸ l¡I .l V l±l.l..l _.Il eiºl.Il cl el.ao cVl _± _. ,l V¸
l¡,Ic _>¸l> ,î> V¸ _o¸¡Il ,I.Il ¤zº _º ¿±çz.. .
l..Vl iºlç.Il _Ic ¸,.l.Il _s. ¤.c ¸>., V.o ,Vl eiºl.Il _,çI. ¸l ¸Vc| c| ) .la.¸o¸ ¸l¸¸Vl
¸ ¸ ¸ >¸.Il (.. ,Vl eiºl.II ¤a.l.Il .
¸l.Il _I| >ça. ¤z,sIlº ¤,s..zIl .l¸.ol NULL _.so _>. ¤,.l.Il ¤z.lsIl ¤o¸iao _±¸
¤z.lº çl _I| ¸.. ,I l.o>lo ) menu ( l..iºl. _º .
¤z,sIl. ¤,I| ¸l.o .Il.Il ¸.ol¸l.Il ) g_h!nst ( _.so _>,¸ _,.zIl l,¡o 籸 _,.L.Il _c
Ic ¤,.,.¸Il ¤IliIl .l¸.ol¸l. _o ¸.ol¸l. U¸l ¤z,º _ WinNain() .
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 14
¤z,sIl. _¡..zIl¸ _,¸çíizIl ¤a.¸Vl _o ¸.ol¸l. ¸>l lol NULL l..\l .l.l,.I 硺 ) _.Il¸
lz.l> l¡Iz±l ( l.,> l±]l..| ,. _.Il eiºl.Il _I| ¤,ºl±| .l.l,. Ul.¸\ ,i>.., ¸.ol¸l.Il li±¸ .
NULL î. cl ¸ia. V ¤z,sIl cç. cç 0 _.Il ¤aI _º l,Il> NULL _.z. ) 0 *) void ((
.l¸.çzIl ¿o ,i>... l¡.l lz. . _Ic _±>. cl _îz,º li¡I .l¸,i>. I :oli>..l ¤Il> NULL ¿o
,,º ¤>,>± . ¤z,sIl Ulza..l :.îz, 0 Ui. NULL ± _º ¤Il>Il ei .
_o e>lazIl ,,sIl _º ,¡s,ºi. ,iaI l¡.Icl _º ¿>¸. _,>o¸.zIl _¸.a. _.Il _íl.zIl .Icl
¤IliIl ei¡. ¤Lç.zIl ¤,IzaIl _.º ¸l _l>. i,i>.I li±¸ Ul¸iIl . V.zº CreateWindow() l¡I _îz,
| >ç>çI ¤Ll... ¸,s..¸ ¤>o¸. ¸,.> cçî. cl V| Lls.Il _o i,iaIl _º _.sIl .lî.¸V e¸,.í ¤,.lîo
cl :I lz.l> _.>..,º li¡I .V±azIl ei± i,i>. _Ic ¤a,¸.Il :.¸iº ¤Il> _º V| lL>Vl
_íl.o c¸> _o _>o¸.Il ¸lç.zIl ¤Izî.I Ul¸iIl _o e>lazIl ,,sIl _º _ºi. .
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ei± _¸c :Ii. l..îz, l±ç>. ,,I. _.so _Ic l.I±> l..l _º l.sº>¸ eiºl.Il l..|. l.zº cl ia.
¤IliII ¸.ol¸l. ¸>l _,Iza..o eiºl.Il WinNain() e>lc|. .olº eiºl.Il cl clz±I l¡.,i>.. ,çs. ,.
Il _±s. li±¸ ¤.l.Il _Ic l¡.s. ,,z±. _,.,.Vl _,.z,Ia. :
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
¸.ol¸l.Il nCmdShow _Ic l>lz.cl _.l,º _î.. eiºl.Il _¸c :.îz, .,> ç¸l,.>l ç±
SW_SHOWNORNAL ¤IliIl _I| ¸¸z, ¸.ol¸l. ,li>..l. _îI .ºçIl _í WinNain() çV _îz,
l¡.l..|. .zº _.Il eiºl.II _za..o ¸l _.¸o _î. _Ic l±¸l¡L| UV> _o l¡,º ¸.íl ,î>., cl _o
:I> ¸,c ¸l ¸a±o ¸l _s>o .
¸l,.>V ç± ¸.ol¸l.Il li±¸ eiºl.Il _î,± _lç>I :.aIlLz. .l¸,zzIl _o ¸,.îIl i>. .ç.
l±i,s..¸ eiºl.Il ¸l>.| .çI.l .
ñghnI 3 : _IIm¡II 4íIn
. ¤,Izc _í¸ ¤±.. _í _ol.¸.Il .Iº ¿.s, l.± ei± ¸.c ¸z. :>ol.¸. cç..o _Ic ,.
,î>.Il _o ¤Ls.Il .
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 15
}
return Msg.wParam;
¤IliIl GetNessage() _o ¤Il.¸Il Lls.I|. ,çs. ¸ç.lL Il _.l.¸Il .º¸ çl _º _,.L.Il. _l>
i.. ¸l,.>l ¸l _,.lszIl ¤>çI ¸l¸¸l _Ic La±Il ¸l l¡î,¸>. ¸l _¸lzIl ¸¸ _Ic ¸s.Il. ,i>..zIl ,çs,
) item ( _.l.¸Il ¸ç.lL _º l¡a±,¸ _.l.¸ iIç, ,lL.Il c|º ¸>l _. çl _zc ¸l ¤z.lsIl >ç.. _o
_.azIl _ol.¸.Il. _l>Il . I lci..l. GetNessage() ¤,IlçzIl ¤z,I.Il ¤Il.¸Il ,V..l. ,çs. :.|º
l¡.>Ilao _>V _.l.¸Il ¸ç.lL _o l¡c¸.¸ . ¤Il.¸ çl :l.± _î, ,I l>|º ) _c ,i>..zIl .ºç. l..l
_,.lszIl ¤>çI ¸l _¸lzIl _Ic _zaIl ( c|º GetNessage() _.î . ) Blocks .( li± ¿.... ,I l>|
., _ol.¸.Il cl _Ic Ui, ¤.|º _IL±zIl _Il.Il.¸ ei,i> _.l.¸ i,Iç. ,., cl _I| ¤>IlazIl _c .ºç
¤IliIl ei± _±s. :,I| l±i,a, .
¤IliIl TranslateNessage() _Ic ¤,ºl±\l ¤>IlazIl _a. ç¸>. .li>l i,Iç.í _,.lszIl ¤>çI
¿ç. _o _.l.¸ WN_CHAR _.l.¸ ¤a.l.zI WN_KEYDOWN . l¸,>l DispatchNessage() .a.. ,çs.
¤Il.¸Il. ¤,.azIl eiºl.Il _I| l>¸l> ¤Il.¸Il . ¸l c¸>l eiºl. çl ¸l ¤,.l.Vl l..iºl. cçî. iº ei±
,î>. çl ) control ( ¸>l _ol.¸. _.º _o ¸l ,lL.Il _.º _o el..zIl eiºl.Il cçî. cl,>Vl _a. _º¸ .
,¡, çiIl ¤,I>liIl .V.l¸zIl ei± :sIs. cl .>, V _.l.¸ ,V..l ,. ¤.l :I> _í _o
¤,.azIl eiºl.Il. ¤Il.¸Il L.¸ clz±í _ºl.Il. _sî., ,lL.Il¸ l>¸l> l¡Il.¸|¸ .
ñghnI 4 : ñísIiII .I¡µ|
..lí l>| ¤sI> _.l.¸Il ) messages loop ( ¤clo> _.z, eiºl.Il l¸>| c|º _ol.¸.Il .Iº _.z. .
,., .,> l.± l..iºl. _I| ¤I.¸zIl _.l.¸Il _í ¤>Ilao¸ ¤,º¸.
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
l¸>\l li± lci..l ,., ) procedure ( ¤Il.¸ _îI HWND çl eiºl.Il. _l>Il _.szIl ç±
¤.sIl _s. _o ¤s..o eiºl. _o ¸.íl i>lç. ¤Il> :I> ¤,z±l ¸¡L.¸ ¤Il.¸Il. ¤,.azIl :I. ) class (
.Il l¸>| _s. ,i>... l¡.o _í¸ eiºl ) WinProc() ) ( ¤.sIl _s. _o iºlç. eic l..| .¸> ( l±i.c
eiºl.Il _.so _º cçî, .V.>Vlº ei IçzIl ¤Il.¸Il. ¤,.azIl eiºl.Il i,i>.I _,¸L±o cçî. hwnd
,l ],|e|| W|11I k|| iL,a: 1æs|:
www.c4arab.com www.winprog.org 16
eiºl. _î. _Ia.zIl . ¤Il.¸Il _Ic l.Iç±> i.c Ul.zí WN_CLOSE() lz.¸ eiºl.Il ,i¡. ,çs. l..|º
lso ,i>... l..l ¤,Iza. ¤,.azIl eiºl.Il i,i>.I ¸.ol¸l.Il li± _za... l..|º iºlç.Il _,. ¤sI.>o _.
,i¡Il .
¤Il.¸Il .a. ,., WN_CLOSE ¸¸Il _Ic La±Il. ,i>..zIl ,l,º i.c _º >ç>çzIl
_Ic ¤La± l..l ¸l _z,Vl ççIaIl _í¸Il Alt+F+ . cl >¸l _îI eiºl.Il ,i± _I| l±¸º ç>ç, li±
_a>l Ls> _o ¸lç> eiºl. ¸.c ,i>..zIl ¤.IlLo V.o _..îz, l.±¸ l,.lsI. ,.. V ,i¡Il ¤,Izc
V.o eiºl.Il ¸Vc| _.º ¤.l.l,. .
¤IliIl _ci... loi.c DestroyWindow() ¤Il.¸Il _.¸, ,lL.Il c|º WN_DESTROY _I|
Il _í ,i± ,., eiºl.II ,i¡Il ¤,Izc _.º ¤.o¸ l¡oi± .çILzIl eiºl.Il l..Vl iºlç. ) .la.¸o ¸l¸¸l (...
,lL.Il .¸L _o ,Vl eiºl.Il ,i¡. ,l,sIl _.º . iºlç.Il _í¸ ei>l¸ eiºl. cç. i>ç, V l.Il.o _º
¤IliIl _ci... c>| ¤z¡zIl l¡.| _ol.¸.Il _o cVl _ci... l..|º ¤o¸iao l..Vl
PostQuitNessage() . ¿ç. _o ¤Il.¸ _.¸. ¤IliIl ei± WN_QU!T _I| ¤sI> _.l.¸Il . _±>. _I
¤z,sIl e>çc .... l¡.V li.l ¤Il.¸Il ei± _Ic FALSE ¤IliIl _o GesNessage() _º c¸. lzí¸
¤z,sIl e>çc .i>, lzI ¤.|º _.l.¸Il ¤sI> >çí FALSE _.l.¸Il ¤>Ilao _c .ºç.. ¤sI>Il c|º
¤,.l¡.Il ¤>,..Il >çí i,a.¸ ¤z,sIl wParam . ¤±l>Il WN_QU!T _z± l¡>l¸>|. ,çs. .ç. _.Il¸
¤IliIl .l¸.ol¸l. PostQuitNessage() . _o :>ol.¸. lci..l ¤Il> _º Lsº ¤ol± cçî. e>lazIl ¤z,sIl
lo Ll.. _zc >ç.¸ ¸>l _ol.¸. _.º .
ñghnI 5 : 4m,In ñghn iµgi y
.l.±Il ¿.s., cl _o Ui.¸ ¿±çzIl li± _.> li,sa. ,,±lszIl >l>¸. . ¸.íl _í¸ _Is. V
:.lîo|. cçî, ¤.|º _¸iIl li± _z± _¸¸azIl Ul.zIl _º¸ _zaIl _Ic ¸.íl >ça.Il ¿o¸ ¤.V ¤.l¸¸
¸.íl .>±.l iº¸ ¤z¡.zIl ¸±l.aIl _o i,iaIl .l..íl .
¿o ¤sº¸zIl eicl.zIl .lsIo ¿>l¸ .¸±zIl ) compiler ( _.Il ,,sIl _í ¤aIlLzI ¤îI.z. çiIl
¤.,ao ¤IliI ¤a.l.Il .l¸.ol¸l.Il _í¸ _,ao ¸.ol¸l. l±i>., .
,l ],|e|| W|11I k|| ]:|a,|| L|s:||
www.c4arab.com www.winprog.org 17
!v ¸s|æ¸i[ ]|a.i[ .
_º¸zIl Ul.zIl : window_click
V l¡.îI eiºl. l.l..l l..>
_.º _o e>i>zIl ,l¡zIl _a.. V| ,çs.
DefWindowProc() ¸,a±.¸ ¸,.î.í
.>Vl _¸c ¸lL\l .l¸l± ...
_.º _o e¸l>.|. .zº lo _,ia. ¤s,¸L :,Ic _¸cl. _.Vl l.Ll.. _º . .lçL>Il ¿..l Lsº
_>a.. V¸ .
¤Iî.o c¸> _o _za, ¤.l _o iíl.¸ _.l.Il Ul.zIl i> ¤,li.Il _º . _,ia.. ,çs. cl :.îz,¸
¤..l.o ¤I.ol _Ic _±>. _.> ¤.o ¤,Ll,.>l ¤>.. ¿.±. cl ¸l ¤,Ic >çîIl _a. _±º _îI .
l..iºl. _Ic ¸s.Il. ,çs, loi.c ,i>..zII _ol.¸.Il ,.l _¸c ¤,.lîo| ¤ºl±|. ,çs. .ç. .
l¡.>Ilao¸ _.l.¸Il Lls.Il .çI.l l.I _±ç, ¤.îI ,¡zIl _.Il. _,I li± . l>ç>ço clí lo c¸. l.c>
eiºl.Il l¸>| _º l.i.c WndProc() :
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:/*...... _..¸ ¯..> */
DestroyWindow(hwnd);
break;
case WM_DESTROY:/*...... ,.. ¯..> */
PostQuitMessage(0);
break;
default:/* ...· .. .... ¯¸., */
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
¤Il.¸Il _.so ¤ºl±|. cç.IlLo l..|º _¸lzIl .l¸s. Lls.Il _º .c¸. l.í l>|
WN_LBUTTONDOWN _¸lzII ¸.,Vl ¸¸Il _Ic ¸s.Il _.>.I ) ¸l WN_RBUTTONDOWN ¸l
WN_NBUTTONDOWN .,.¸.Il _Ic L.¸Vl¸ _z,Vl _¸lzIl 縸I .(
_.l.¸Il _o ¿ç.Il li± ¤ºl±|. ,¸Io c>| :.|º ¤Il.¸Il ei± Lls.Il _º l.cl¸ ..í l>| ) çl
_¸lzII ¸.,Vl ¸¸Il _Ic ¸s.Il. ¤±l>Il ) WN_LBUTOONDOWN ( l¸>\l _º WndProc() _l>Il
_.l, lzí eiºl.Il ¤.s. :
,l ],|e|| W|11I k|| ]:|a,|| L|s:||
www.c4arab.com www.winprog.org 18
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_LBUTTONDOWN: /*.¸:. ¸ .....´ _.. ..*/
break; /*..,´ ...¸*/
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
.Vl>Il .,.¸. ) cases ( ¤z,Ia.Il >ç>¸ _o iíl. Lsº ,¡, V break ¤Il> _í l¸¸ .
_. çl _za, V ¤.îI ¸.,Vl _¸lzIl ¸¸ _.l.¸ _.so l.s±l l.Il.o _º . c>| ,çs. .ç.
.Il ¤Il> >çí ¤ºl±|. _Il>Il .IzIl ,.l i,i>. _Ic l¸>lº >çîIl li± cçî,.¸ ¸.,Vl ¸¸Il _Ic ¸s
Volí e¸l.o¸ ) Lsº ¸lç> ¿.¸o _¸a, .,>. Ul.zIl Uia. cl ¸l .(
¤,s,í¸ ¤z¡zIl ei± ¸>., çiIl >çîIl :,Ic _¸cl. V¸l :Ii. ,çs. _.Il .lz,Ia.Il _± lo
.s..o l¸>lº cçî. _.> >i>zIl clîzIl _z± ¤>l¸>| ¸l >çîIl li± ¿o .lçL>Il _s. _zc _Ic V
>lçíVl _o e¸,c .
GetModuleFileName(hInstance, szFileName, MAX_PATH);
MessageBox(hwnd, szFileName, "This program is:", MB_OK|
MB_ICONINFORMATION);
,i>..zIl ¸s. ¤Il> is., cl >ç. l..îI clí ¿ºço çl _o _za, V >çîIl li± ¸.,Vl ¸¸Il _Ic
l¸>\l .Iº _º l¡. l.zº _,ia. ¤,Izc ¸>l _o cçî, ..l.zIl ¿ºçzIl c>| _¸lzII WndProc() li±
_.Vl ç>.Il _Ic ¸,±,. l¸>\l :
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_LBUTTONDOWN:
/*.,., .¸:. ¯,.,*/
{
char szFileName[MAX_PATH];
,l ],|e|| W|11I k|| ]:|a,|| L|s:||
www.c4arab.com www.winprog.org 19
HINSTANCE hInstance = GetModuleHandle(NULL);
GetModuleFileName(hInstance, szFileName, MAX_PATH);
MessageBox(hwnd, szFileName, "This program is:",
MB_OK | MB_ICONINFORMATION);
}
/* .¸:. ¯,. .,., */
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
ei,i>Il ¤a.¸Vl ¸L.Vl _.a. l>lo
..±l>Il ¤ºl±| ,. V¸l _, ¦ ) ¤z,Ia.Il .Vl> _o ¤Il> _>l> switch _º ,çIao ç± lzí¸ ¤.V
_o ¤Il> _>l> ei,i> .l¸,a.z. _,¸±.Il. ,çs. loi.c _,..±l>Il _,.l± .,±. l..|º _.Il ¤aI
I ¤a.l.Il .Vl>Il switch . _,¸,a.z. _,¸±.Il. l.± l.zº isIº : h!nstance ¸ szFileName . ¤IliIlº
GetNoduleFileName() _,.zIl _.so ç± l¡,º ¸.o¸l. U¸l cçî, cl L¸... (H!NSTANCE) çiIl¸
_I| ¸,., ¤,Lz.Il ei>çIl ei s.zIl ) .IzIl l.>ol.¸. çl .exe .( _.szIl li± _Ic _±>. .,í _îI
¤IliIl GetNoduleHandle() ¤z,sIl l.¸¸o lo l>| .,> :I> _c .,>. NULL | l¡.|º ¤IliIl ei± _I
li± l.Il.o _º ¤,I| _l.>. lo ç± çiIl¸ ei,s.. ç¸l>Il .IzIl _.so l.I i,a.. .
HINSTANCE hInstance = GetModuleHandle(NULL);
i,i> ¸,a.z. _,¸±.Il. l.zº eVcl ¤z,Ia.Il _º c>| h!nstance ei>çIl _.sz. el.Ií¸l¸
l.I±> çiIl ç¸l>Il _ol.¸.II ¤,Lz.Il ¤IliIl _o ¤,Ic GetNoduleHandle() .
¤IliIl. _l>Il U¸Vl ¸.ol¸l.Il _>l _o ¤Ií li± GetNoduleFileName() . _I| _l.>. cVl
¿ç.¸ ¤,Lz.Il ei>çIl. _l>Il .IzIl ¸l.o¸ ,.| _,¸>. ¤,º ,., ¸.ço ç± çiIl¸ _.l.Il ¸.ol¸l.Il
.¸¸> ¤I.I. ç± ¸.çzIl li± .l.l,. LPTSTR ) ¸l LPSTR ( cl lzIc LPSTR U>la, char* .
_,¸±.Il l..îz, c>| _... .¸¸> ) .¸¸> ¤I.I. ¸l ( _î.Il li± _Ic :
char szFileName[MAX_PATH];
NAX_PATH .IzIl _>l> ¤. _,¸±.Il ,. ¿.l¸ ¸¸ílo _c e¸l.c ç± windows.h li± >i>,¸
zIl ¸l.o¸ ,.V _îzo UçL _±ºl ¸¸ílzIl _,çIl ¤.,. _º .I 32 .
,l ],|e|| W|11I k|| ]:|a,|| L|s:||
www.c4arab.com www.winprog.org 20
¸¸ílzIl ¸,¸z.. ,çs. l±,l NAX_PATH ¤IliIl _I| GetNoduleFileName() ,.\l UçL i,i>.I
¤IliIl ei± _º .Il.Il ¸.ol¸l.Il ç± li±¸ ¸l.zIl¸ .
¸,a.zIl c|º ¤IliIl ei± lci..l ia. ) ¸.çzIl ¸l ( szFileName .¸¸> ¤I.I. cVl çç>,
_¡... _Il>Il .,l.Il. çi,s..Il l.sIo ¸l.o¸ ,.V :Ii. ¤,¸l> . ¤I.I.Il ei± ¸,¸z.. l±ia. ,çs.
_I| NessageBox() ,i>..zII _.l.Il _¸aI ¤I,.¸ L..l ¤IliIl ei± ¸l..cl _Ic .
_¸lzII ¸.,Vl ¸¸Il _Ic ¸s.Il. ,º i,s..Il i.c¸ >çîIl _olí .,¸±.. ,º ) ¸lL| _z±
eiºl.Il ( e¸l.o¸ .IzIl ,.l. :¸.>, ¸lç> ¿.¸o _Ic _±>.. .
ei,s... ,º¸ ¤>..l _ol.¸.Il _olí :,I|º lo lL> >ç>çI UiazIl >çîIl _za, ,I l>| . ¤Il>o V
_za,. .
#include <windows.h>
const char g_szClassName[] = "myWindowClass";
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_LBUTTONDOWN:
{
char szFileName[MAX_PATH];
HINSTANCE hInstance = GetModuleHandle(NULL);
GetModuleFileName(hInstance, szFileName, MAX_PATH);
MessageBox(hwnd, szFileName, "This program is:",MB_OK|
MB_ICONINFORMATION);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc; HWND hwnd; MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
,l ],|e|| W|11I k|| ]:|a,|| L|s:||
www.c4arab.com www.winprog.org 21
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK); return 0; }
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, g_szClassName,
"The title of my window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
,l ],|e|| W|11I k|| ]:|a,|| is|l L|,e|
www.c4arab.com www.winprog.org 22
v ¸s|æ¸i[ Ja|l [[¸¸[ .
¤,lc _º l¸ol ¸..a, ¸¸i.,çIl _ol¸. _º ¤I.¸zIl ¤Il.¸Il _î,±¸ _.l.¸Il ¤sI> ¤º¸ao
e>i>o ,l¡o l>V ¤¡>ço _ol¸. ¤.l.í ¤Il> _º ¤,z±Vl . .çI.l _º _za.Il _º cç.IlLo _>. cVl
..Il l¡,¸.a,. ,,±lszIl c|º li¡I ,l. :l¸>| ¸,c _o ¤.V _.l.¸Il ¤>Ilao ls>V _,ç .
°4IIm¡II _ø I,
¤z,º _± ¤Il.¸Il ¤>,>± . .lsIo .aIlL lo l>|º _l¸Il ) ¤oiszIl ¸l ( .l>,¸±. i>.. :.|º
¤Iíl.Il ei± _Ic :
#define WM_INITDIALOG 0x0110
#define WM_COMMAND 0x0111
#define WM_LBUTTONDOWN 0x0201
... :I> _I| lo¸ . ei± l.,¸s.¸ ¤,.azIl iºlç.Il¸ ,lL.Il _,. Ul±.l ¤I,.çí _za... _.l.¸Il
,î>. ¸l eiºl. _o i,¸. ..í l>|º .l¸LVl ei± _,. _. _í _s. _Ic _za. _.l.¸Il ) control (
) i> _º ç± çiIl¸ iºlç.Il _o _l> ¿ç. ¤.l> ( eiºl.Il ei± _I| ¤Il.¸ Ul.¸| V| :,Ic lzº . lo l>|¸
¤Il.¸ :I _.¸. l¡.|º l.,. :.o c¸>l eiºl. .>l¸l . _±> lo l>| .i> ) event ( ,i>..zIl ¸s.í lo
º _,.lszIl ¤>çI ¸l¸¸l _o ¸¸ _Ic ¤La± ¸l l¡î,¸>. ¸l _¸lzIl ¸¸ _Ic _.l.¸ iIç, ,lL.Il c|
:Ii. ¤,.azIl eiºl.Il _I| l¡I.¸,¸ . l¡ao _cls..¸ ¤Il.¸Il Ls.I. :.|º iºlç.Il ei± _o eiºl. ..í l>| .
_,..l _,¸.ol¸l. l±l,l.. _º _z>. iºlç.Il _.l.¸ _o ¤Il.¸ _í wParam ¸ lParam . V±l
..lí wParam ,>> .l> 16 ¸ .. lParam ,>>. 32 _º _îI .. _,çIl 32 ,>>. ¸l± lz¡.o _í
32 .. .
_,¸.ol¸l.Il _,i± Ulza..l ¤s,¸L l±,l¸ _,¸.ol¸l.Il _,i± _za... _.l.¸Il _í ..,I
_.l.¸Il .V.>l. .I.>. . Ul.zí : ¤Il.¸Il WN_CLOSE :,Ic _a..,¸ _,¸.ol¸l.Il _o l,l _za... V
¤Il>Il ei± _º lz¡Ilz±| c>| . ¤Il.¸Il lol WN_CONNAND l¡.|º _,¸.ol¸l.Il Ví _za... ) wParam
¸ lParam ( U¸Vl ¸.ol¸l.Il wParam _,.z,º çç>, H!WORD ¸ LOWORD ) lz¡.,z.. l..îz, : ¤zIí
l,.> ¤zIí¸ l,Ic ( .,> H!WORD . _l>Il wParam ç± ¸la.| ¤Il.¸Il ) _,.L.II V.lº clí l>| ( ¸
LOWORD ç± ,î>.Il ) control ( ¸l .¸ao ¤z.lsIl ) menu identificator ( ¤Il.¸Il _.¸l çiIl . _º
_,> lParam ç± _.so eiºl.Il ) HWND ( ¤Il.¸Il _.¸l çiIl ,î>.Il ¸l ,î>.Il _î, ,I ¤Il> _º¸
¸.ol¸l.Il c|º ¤Il.¸Il ei¡I _.¸zIl ç± lParam ¤z,sIl çç>,. NULL .
H!WORD() ¸ LOWORD() lz± 2 ¸¸ílo ) ¤zIîIl ei± ¤,... _îz, _± ( _.º _o lz¡s,¸a. ,.
_,as.¸zIl _,.,l.Il _º _I¸Vl ¤z,sIl Ul>o ¸¸i.,¸ ) High Word ( .l> ¤scl±o ¤zIîI 32 çl ..
º¸ ¤,.Vl ¤,¸.c _i.Il ¤z,sII ls 0xffff0000 _,±s>.zIl _,.,l.Il. >i>.º l,.iIl ¤zIîIl lol
0x0000ffff . ¤zIîIl ,>> c|º ,çIao ç± lzí¸ ¤.V WORD _,çIl _º 32 ç± 16 .. ) 2 .,l. ( ,>>¸
¤scl±zIl ¤zIîIl DWORD 32 .. ) + .,l. .(
,li>..l :.îz, ¤Il.¸ Ul.¸\ PostNessage() ¸l SendNessage() .
,l ],|e|| W|11I k|| ]:|a,|| is|l L|,e|
www.c4arab.com www.winprog.org 23
_I¸Vl ¤IliIl : PostNessage() _,>Il _º >ça.¸ _.l.¸Il ¸ç.lL _º ¤Il.¸Il ¿±. . _.a, li±
,., V iº ¸l l¡.>Ilao ,., iº ¤Il.¸Il c|º ¤IliIl ei± ¤z¡o ia. ¤.l . ¤IliIl _,> _º SendNessage()
¸¸i.,¸ _zî, cl ia. V| >ça. V¸ eiºl.Il _I| e¸.l.o ¤Il.¸Il _.¸. l¡I ¤>IlazIl ¤,Izc .
¤Il.¸Il l¡I _.¸.. l..|º eiºl.Il ¸Vc| >ç. l.í l>| WN_CLOSE _î.Il li± _Ic
PostNessage(hwnd, WN_CLOSE, 0, 0) _zc _s. l¡I _.Il¸ _o Ví cl L>V ¸¸Il
wParam ¸ lParam ç¸l., 0 ¤Il.¸Il cV WN_CLOSE _,i± _za... V _.º _o l.¸.l lzí¸
¸.ol¸l.Il _, .
jIgnI LIr;¡, :
_o .lzî>.Il _I| _.l.¸ .a. _I| ¸L±.. :.|º ¸lç>Il .la.¸o Ulza..l _º li.. loi.c
l¡ao .Ll>.Il _>l . _.so _Ic _±>.. cl .>, U¸l _,.çL> _Ic :I> _zc :.îz, ) handle (
¤IliIl UV> _o ¸lç>Il ¿.¸zI ¿.l.Il ¸±.aIl GetDlg!tem() .¸azIl _,¸L _c ) !D ( . ,. _za... l±ia
SendNessage() ¤IliIl Ulza..l e¸.l.o :.îz, ¸l SendDlg!temNessage() _,.çL>Il ¿z>. _.Il
lao . _.\l eiºl.Il .¸ao¸ eiºl.Il _.so ¤IliIl ei¡I _La, ) ¸íio <> e¸¸¸±II ..ço ( _±>. .ç.¸
¤Il.¸ l¡,I| _.¸l ,. _.Vl eiºl.Il _.so _Ic :Ii. .
SendDlg!temNessage() Il Ul¸> ¤,s.¸ AP! ¤IliIlí GetDlg!temText() _í _Ic _za.
¸lç>Il .la.¸o _Ic Lsº _,I¸ iºlç.Il .
°_IIm¡II jg;Ih gø I,
¤Il.¸I :Il.¸| l..l :.l _¸s.I WN_PA!NT c|º l¡.s. ,.¸ e>lc| _>l _o eiºl.II
_,.lszIl ¤>çI _Ic ¸ol¸l ¤cçz>o _Ic La±Il. ,lº ,i>..zIl . .i>, l>lo ,çs.. _± L.±Il.
¤,Izc l..l _.l.¸Il ei± _z¡. :.l ,l _,.lszIl ¤>çI _.l.¸ Lls.Il _>l _o ,.¸Il ¤,Izc .,ºç..
_cç±ço ¸,c ¸..a, _,¸l¸sIl Ví ,.¸Il . l¡.ºl±| ,., _.l.¸Il ei± iIç . lzI _.l.¸Il ¸ç.lL l.,iI c>|
Lls.Il ,., lzI¸ _.l.¸Il ¸ç.lL _º e>ç>çzIl :I. _I| .i>. l¡.|º l¡.>Ilao _>V l¡±.lso i,i>.¸ l¡
¸ç.lLIl li± _o . ç>. ,is.. ¤,s.Il c|º l±li>| Lls.Il. .zº l>|º ¤Il.¸ ¤,l _z¡. _I :.l. _z±, li±
l¡Ií l¡Lls.Il ,., cl _I| .,.¸.Il ..> ¤oiszIl .
°_IIm¡II 4íIn _ø I,
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
1 . ¤IliIl _ci... _.l.¸Il ¤sI> GetNessgae() _.l.¸Il ¸ç.lL _º .>.. e¸,>Vl ei±
ei,i> ¤Il.¸ ¤,V l¸L..o .ºç., _ol.¸.Il c|º lc¸lº ¸ç.lLIl cl .i>¸ l>|º .
2 . .i> _±>, lzI ) event ( ¤Il.¸ i,Iç. _º l....o lo ) V.o _¸lzIl :,¸>. ( .|º ,., ¤
¤IliIl i,a.º _.l.¸Il ¸ç.lL _º l¡a±¸ GetNessage() ¤.>ço ¤z,º ) ¸s±Il _o ¸.íl ( e¸,.o
_î,¡II l±cVl .l.l,.Il _z. :Ii. ,çs.¸ l¡.>Ilao .>, _.l.¸ ¸l ¤Il.¸ >ç>¸ _I| :Ii.
,l ],|e|| W|11I k|| ]:|a,|| is|l L|,e|
www.c4arab.com www.winprog.org 24
NSG ) ¤Il.¸Il msg _î,¡Il ¿ç. _o _± NSG .l.l,.Il _o ¤cçz>o _Ic ¸ºç.. _¡º _Il.Il.
cVl .¸±zIl ¿o ¤sº¸zIl eicl.zIl .lsIo _o l¡.a>l¸o _îz, _.Il¸ l± ) compiler (( .Iº
¸,a.zII l±cVl .l.l,.Il Vz. l¡.l msg ¤IliIl ei± _I| ¸¸zzIl . ¤z,sIl i,a. ¤IliIl ei± cl lzí
0 ..lí l>| ¿ç. _o ¤Il.¸Il WN_QU!T lL>l l¡.±¸.cl lo l>| ¤.Il. ¤z,º ¸l .
3 . ¤Il.¸Il i>l. ) ¸,a.zIl _º ¤Lçs>zIl msg ( ¤IliIl _I| l±¸¸z.¸ TranslateNessage()
_I| _z±¸ _l.so .l> _.l.¸ ,>¸.. .,> ¤Il.¸Il _Ic ¤>IlazIl _a.. ,çs. e¸,>Vl ei±
¸ço¸ .l> _.l.¸ . ei± .olº l>| V| _za. V l,.Vl _a. _îI ei.l¸ .IlaIl _º ¤,IzaIl ei±
l¡.z¡z. ¤IliIl .
4 . s. :I> ia. ¤IliIl _I| ¤Il.¸Il ¸,¸z.. ,ç DispatchNessage() ei± _as. l>lo _îI
eiºl.Il l¸>| _I| l¡.a.. _Il.Il.¸ ¤Il.¸Il. ¤,.azIl eiºl.Il _º _ºi. l¡.| ¤Il.¸II ¤IliIl )
Window Procedure ( eiºl.Il ei¡. _l>Il . eiºl.Il _.so¸ ¤Il.¸Il ¸,¸z. ,., ) ¤Il> 縸¸±
º iºlç. eic :l¸..l _.lszIl _º .I.>. _¡º _Il.Il.¸ eiºl.Il l¸>| _s. _ ( _,¸.ol¸l.Il¸
wParam ¸ lParam .
5 . ¸l,.>l _Il.Il.¸ l¡.l¸.ol¸l.¸ ¤Il.¸Il _º _,ºi.Il. ,çs. :. ¤±l>Il eiºl.Il l¸>| _º
¤IliIl Ulza..l :.îz, lzí ¤,º .c¸. çiIl Ll..Il DefWindowProc() ¤Il.¸Il ,>¸.. _.Il
l Ll..Il. _±l¸.ºV ) ¸l¸¸Vl _,çI. .l¸l±.>\l _¸c l±¸,a±. l±¸,.î. eiºl.Il _Ic .(...
6 . >ça, eiºl.Il l¸>| c|º ¤Il.¸Il ¤>Ilao _o _¡... lzI ) returns ( _I| ,î>.Il _s..,º
DispatchNessage() ¿>¸. l..l çl _.l.¸Il ¤sI> _I| ,î>.Il l¡ao >ça,¸ e¸,>Vl ei± >ça.º
¤,li.Il _I| ¸¸>¸ io _,. _.l.¸Il ¤í¸> _±lç.. li±¸ .
¸¸i.,çIl _ol¸. ,ç¡so ç± li¡º ¤,laII ,¡o .ºçIl _s. _º¸ isao ¿ç±çzIl . V :.iºl. l¸>|
e¸.l.o ¸,c ¤s,¸L. elci..l. ,çs. çiIl ..l :.îI ,lL.Il _.º _o ç¸>. .çI.l. elci..l ,.,
¤IliII :oli>..l UV> _o DispatchNessage() . îz, UV> _o e¸.l.o eiºl.Il l¸>| lci..l :.
¤IliIl lci..| GetWindowLong() eiºl.Il l¸>| _I| Uç±çII ¤Il.¸Il. ¤,.azIl eiºl.Il _.so _º .
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
WNDPROC fWndProc = (WNDPROC)GetWindowLong(Msg.hwnd, GWL_WNDPROC);
fWndProc(Msg.hwnd, Msg.message, Msg.wParam, Msg.lParam);
}
V Lls. :l.± i>ç. _îI ,,I. _î.. _zc¸ _.l.Il Ul.zIl ¿o >çîIl li± .,¸>.. .zº isI
,>¸.o ,li>..lí l¡Ilz±| .>, UnicodefANS! .IL >¸>¸ .ºçzIl ) callback ( ¸ :I> _I| lo .
¸..a, eiºl.Il l¸>| .IL _º ¸.l.zIl .çI.Vl _l¡..l c|º li¡I _ol.¸.Il _La. ..., iº li¡í _zc
l¡cl..l :,Ic ¤,>o¸. ¤I,.¸ _,I¸ ¤. ,çs. cl :I _.,¸>. _zc .
¤IliIl l.oi>..l l..l L>V GetWindowLong() eiºl.Il ¿o :¸..zIl eiºl.Il l¸>| _V>..V .
. V l>lzI lci..l. Lsº ,çs WndProc() iºlç.Il _í _c ¤I¸ç.o _.l.¸Il ¤sI> c| l..> e¸.l.o
iºlç.Il .ll¸>| l±,l _± l¡I _.Il¸ >¸.Il .la.¸o¸ ¸l¸¸Vlí l,.l _l¸>| _.a, li± l.>ol.¸. _º
..l.zIl eiºl.Il l¸>| _ci... l..l _o iíl.Il _I| _l.>. c>| l¡. ¤±l>Il . _o ¸.íl cl lz.¸ eiºl.
¸.ol¸l. U¸l c|º eiºl.Il l¸>| _s. _º :l¸..Vl l¡.îz, ) eiºl.Il _.so ( _c l¸>\l ¸l.>\ ,i>..,
¤I.¸zIl ¤Il.¸Il. ¤,.azIl eiºl.Il
,l ],|e|| W|11I k|| ]:|a,|| is|l L|,e|
www.c4arab.com www.winprog.org 25
_.l.¸Il ¤sI> _,. _.l.¸Il U>l.. ¤,Izc _º ¤.º¸ ,Lao _±s, :s,.L. c|º L>V. lzí
I l>lo _îI _za. ¤ol¸iIl _s..¸ eiºl.Il l¸>|¸ ,i>... l..l lz. ¤Izc _¡., cl _ol.¸. _o .>¸l ç
¤sI> while() ¤IliIl .>lcl l>|º GetNessage() ¤z,sIl FALSE ) çl 0 ( i>.¸ l¡Izc _¡.. ¤sI>Il
_ol.¸.Il _º ¤,.,.¸Il ¤IliIl ¤,l¡. ,lol l..s.l WinNain() . ¤IliIl l¡. ,çs. lo li±¸
PostQuitNessage() . ¿±. .,> WN_QU!T L _º c|º ¤.>ço ¤z,º e>lc| _o Vi.¸ _.l.¸Il ¸ç.l
GetNessage() ¤Il.¸Il _î,± Vz.. ) Nsg ( ¤z,sIl i,a.¸ 0 .
¿±çzIl li± _º wParam ¤IliIl _I| l±¸¸z.. _.Il ¤z,sIl çç>, ¤Il.¸Il. _l>Il
PostQuitNessage() _I| l±i,a. cl ¸l l¡Ilz±| :.îz, _.Il¸ WinNain() >çîí l¡oi>... _.Il
_zaIl Ulz.íl ia. ¤,l¡.Il .
¤z¡o ¤L>Vo : GetNessage() ¤z,sIl i,a.. - 1 lL>l l¡.º>l± lo l>| . _o liíl.o _í c>|
Lls.Il _a. _º :Izc _La., cl _z.>, ¤.V li± _... _I :.l ... cl ,c¸ GetNessage() ,.
lz,º i,a. l¡.l _Ic l¡s,¸a. ¤,.l,Iç. ) true 8 false ( cl ¸l..cl _Ic BOOL _l.l _Ic ¤º ¸ao _±
U!NT ) e¸l.| ¸,c _o _,>± >ic .(
while(GetMessage(&Msg, NULL, 0, 0))
while(GetMessage(&Msg, NULL, 0, 0) != 0)
while(GetMessage(&Msg, NULL, 0, 0) == TRUE)
¤.Ll> l¡Ií eVcl >lçíVl !!!
çîIl .oi>..l isI L>V. lzí _s.¸ _,IiIl li± ¿o ¤sº¸zIl ¤,s,.L.Il UlzcVl _º U¸Vl >
¤IliIl .ol>lo _za, GetNessage() cl,>Vl _o ¸,.í _º :¡,... .Iscl isI _,ºl¸c ¤,l .¸a. ,I
¤IliIl cl¸ cl,>Vl .Ilc _º _Il± ¸,c cçî,. :>çí c|º :I> _.zI :oli>..l. :.l GetNessage()
Lls.Il _a. _º _.s.. . l. :I> ¸,.s.. ls>V ,çº . _o l±a. .Iz±l c| _.o .±a. Vº
l¡.,.. ¸l .lL>VzIl .
while(GetMessage(&Msg, NULL, 0, 0) > 0)
>çîIl _o .çI.Vl li± ,i>... cl lz.l> _.>.., .
Vº :I> ,., ,I c| lol ¸¸i.,çIl _.l.¸ ¤sI> ,ç¡so _c ¿.s.l iº .l.±Il cçî, cl _.z.l
çoVl cV _Is. .ºçIl ¿o l>l±.l >l>¸.. ¸ .
,l ],|e|| W|11I k|| e,|,|| ,|e±:a|
www.c4arab.com www.winprog.org 26
v! ¸¸[q][ ¡[¸l.æ[ .
Uç> .loçIazIl _o i,¸zI _¸¸iIl ei± ¸>l _º >ç>çzIl _>IzIl ¤aIlLo ¿,L... >¸lçzIl
_. Uç>,sIl _º ++ _. i.V¸ç.Il¸ .++
_,çIl cli,o _º ¸.íl _za.Il _.º 32 l _o Vi. >¸lçzIl ¿ç±ço ¤,La. .I±º l¡..l.í e>lc|. ,çº
_,IiIl li± U籺 _o _±º _í _º .
_± >¸lçzIl .l.. _o .l.l,.Il ) data ( _î. _Ic ¤.¸>o¸ ls..o ¤º ¸ao _.l.. ) binary (
çi,s..Il :sIo _>l> .
.,¸î. _º >¸lço l..| :.îz, ¿.ç. ¸> .Io 籸 >¸lçzIl . " .rc ." .lº¸±zIl .Icl
_o l,.l,. >¸lço l..| _o :.îz, ¸,>Vl li± _.¸o >¸lço ¸¸>o _Ic ¸ºç.. ¸ç.Il _º ¤±¸¸azIl
e¸>lsIl ei,>çIl ¤I,.çIl _.l.Il ¸l,>Il ¸..a, l.l,>l _îI l,¸i, ¤,>o¸. ¸L.l _,¸i. _I| ç>IIl c¸>
í l>| ¤±l> :I> _,s>. _Ic _Ic ¸is, V ¤.l _.a, iº lo li±¸ >¸lço ¸¸>o _Ic ¸ºç., V :º¸±o cl
¤,I| _a.. çiIl _,ºiIl _zaIl ,c> .
li±l> _zcl. li¡I >¸lçzIl .lsIzI l¡.>Ilao _º .I.>. .lº¸±zIl .I.>o c|º ..VI
¤olc ¤s±. >¸lço _,s>.I _îzo .V.>l _.>l¸ l¡.,. lcç,. Lls.Il ¸.íl ¸l¸.\ .
l ¸¸>o _. Uç>,sIl ¿o _º¸zIl >¸lçzI ++ l,¸i, >¸lçzIl _,ia. ¤,Izc _a>, ) >çîIl ¤.l.î.
l,¸i, ( .zº lo l>| .IzIl .I., ¸¸>zIl li± ¸,>Vl _º¸ l¡,Ic l.,ao Vî. _¸s,¸ ¤.a± ¤,Izc
l,¸i, e>çí ...í loia. ¤Ls>. .
.Io l..| _îz, V ¤olc ¤s±. .rc _îI >çîIl UV> _o ¸s±Il _o li. _,ia. .çI.l ¤º¸ao
l,.l.l l¸ol ¸..a, l,¸i, :I> .
_. Uç>,º cl 籸 _c¸o ¸>l _. ++ ,±l¸.ºl lz.l _La, l ) default ( _.l¸Il .IzII
>¸çzII ) resource.h ( l.. lzí ,.Vl i,i>. _º ..c¸ l>| V| . ¿ç±çzIl li± L,... _>l _o _îI
¤,±l¸.ºVl ¸çoVl. _.ºl. _.|º ) default ( ,çºl.¸ ¤s,¸L _,±ç.. .¸±zIl. _l>Il _>IzIl _º
:I> _,ia. .
¤.çs,l ¿o L,.. >¸ço ..,¸î. i>l. l.c> V¸l ) icon ( ei>l¸ .
#include "resource.h"
IDI_MYICON ICON "my_icon.ico"
.IzIl _º i>ç, lo _í li± . !D!_NY!CON >¸çzIl .¸ao ç± !CON ¿ç.Il ç±
¸ " my_icon.ico " l .IzIl ,.l ç± ¤.çs,Vl ei± çç>, çiIl _>¸l>I . .Icl _Ic li± _za, cl .>,
.lº¸±zIl .
_l¸>\l ¸L. _.a, l>lo cVl #include "resource.h" ¤s,¸L _I| _l.>, :>ol.¸. l..>
.¸ao _,±>. UV> _o _± :IiI ¤s,¸L _.>l¸ ¤.çs,Vl .,¸a. l¡.o ¸is, ) !D ( i,>¸ ) l.Il.o _º
,l ],|e|| W|11I k|| e,|,|| ,|e±:a|
www.c4arab.com www.winprog.org 27
!D!_NY!CON .( Il l..îz, _l¸ .Io l..| UV> _o :Ii. ,l,s " resource.h " _o _í _º ¤>l¸>|¸
..,¸î. >¸çzIl ¸ ¸i±zIl .Io . _.Vl ¸L.Il çç>, l.Il.o _º >¸çzIl. _l>Il _l¸Il .Izº :
#define IDI_MYICON 101
l _I| l.i..l isI c¸. lzí .¸azI !D!_NY!CON ¤z,sIl 101 . .¸azIl li± Ulz±| l..îz,
¤z,sIl. e¸.l.o ¤±,ça.¸ 101 _îI :I> _I| ¤,º _l.>. ¿±ço çl _º ¤.çs,Vl _I| e¸l.\I
!D!_NY!CON ,lº¸Vl l¡ao ¸.î. _.Il¸ >¸lçzIl e¸.í i.c ¤±l>¸ ¤,zº¸Il ¤z,sIl _o l>籸 ¸.íl ¸..a, .
_I| ¤z.lº ¤ºl±| >ç. cVl >¸çzIl .Io :
#include "resource.h"
IDI_MYICON ICON "my_icon.ico"
IDR_MYMENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", ID_FILE_EXIT
END
END
c¸>l e¸o !DR_NYNENU ¸ >¸çzIl ,.l ç± NENU ¤cç. ç± . L>V ¤z¡o ¤Ls. :l.± cVl
_,>l.szIl BEG!N ¸ END . Il _a. _,>l.szIl _,i± _o Vi. .l.±l>Il ,i>... .lº¸±z ) _c V,i.
BEG!N ¸ ¦ _c V,i. END . Lsº lz¡,l ¸l,.>l _º ¸> ..lº _,.çI.l Ví ,ci, :º¸±o clí çI lol
:I> _o iíl. .
i,i> .¸ao ¤ºl±|. l±,l l.zº !D_F!LE_EX!T _.Il ¤z,sIl¸ .¸azIl li± ¤ºl±\ _l.>. c>|
.Io _º ¤,¸l.. _I| >ça. >¸çzIl _l>Il _l¸Il resource.h _.Vl ¤,º ..î.¸ :
#define IDI_MYICON 101
#define ID_FILE_EXIT 4001
.Icl c|º li¡I c¸.îIl ¿,¸l.zIl _º l,.,.¸¸ l¸ol ¸,±, .lº ¸azIl ei± ¸l.l ¤a.l.o¸ i,Iç. c|
_.¸zIl >¸çzIl ¸¸>o cçoi>.., _,>o¸.zIl ) visual resource editor ( ¤ºi. ¤z¡zIl ei± ¸>., çiIl .
.lc¸s. .l>¸ e¸,.í >ç.. ¤ºl±| _o :i>çI ¸is.¸ ¸ls>\l _s, .,¸>.Il e¸.í¸ .ºçIl ¿o
>¸çzIl .Io _º ¤z.lsIl. _,¸±.Il .çI.l _s. _Ic :I> _º liz.ao ¤sI.>o .
:>ol.¸. _º >¸çzIl ,li>..l ¤s,¸L _¸a, Ul.o li±¸ .
HICON hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
,l ],|e|| W|11I k|| e,|,|| ,|e±:a|
www.c4arab.com www.winprog.org 28
¤IliII U¸Vl ¸.ol¸l.Il Load!con() _.so ç± >¸çzIl Ulza..l Ul¸> ¤,s.í¸ _,.zIl _Il>Il
) I el.,Lcl çiIl WinNain() ¤IliIl _±s. ¤,Ic Uç±>Il lz.l> _îz, çiIl¸ GetNoduleHandle() lzí
_º ¤>,±ç. ,. _.l.Il _±sIl ( . >¸çzIl .¸ao 硺 _.l.Il ¸.ol¸l.Il lol .
¤IliIl >ç>çI .¸a..o :IaI NAKE!NTRESOURCE() _o ¸.ol¸l. >ç>çI .¸a..o l±,l :IaI¸
¿ç. LPCTSTR _o Vi. U!NT ¤IliIl _º Load!con() .¸azIl l±¸,¸z.. l.zº lzI ) !D .(
¡o ¤IliIl ¤z NAKE!NTRESOURCE() ,çs. l¡.l ç± ç¸.sIl _,ç>.Il. ) casting ( >iaIl _o
_,>±Il ) l±l.oi>..l _.Il .lº ¸azIl ¿ç. 籸 ( _I| LPCTSTR ¤IliIl ¤.º¸.. çiIl¸ Load!con() . li±
.Il¸ >¸lçzIl .,¸a. _º eiz.azIl ¤,.l.Il ¤s,¸LIl _I| l.>çs, ¿ç. _o cçî. _ .¸¸> ¤I.I. . i>l V
_za... ,I l>| _îI li± ,i>.., cVl #define >¸çzIl ,.|º c>| :>¸lçzI ¤,>ic ¤z,º >l..\
_î.Il li± _Ic :>ol.¸. _º ¤,I| ¸l.,.¸ .¸¸> ¤I.I. _I| ¤.z>¸. ,.,. :
HICON hMyIcon = LoadIcon(hInstance, "MYICON");
¤IliIl c| Load!con() Il Ul¸> ¤,s.¸ AP! ¤>,>± ¤z,º _,. ¸,,z.Il l¡.îz, >¸lçzIl _,z>.I
) integer ( l,IaIl ¤zIîIl _º _,ºi.Il UV> _o .¸¸> ¤I.I. _Ic ¸.ço ¸l ) High Word ( ei¡I
¤IliII e¸¸zzIl ¤z,sIl . ..lí l>| 0 ) ., ¸l _ºl ¤z,º .l> ¤>,>±Il >licVl _a. ¤Il> _±¸ ç¸l
65535 ( >¸ço .¸ao l±¸..a. l¡.|º ) !D .( _o _ºl .lº ¸ao ,li>..V :>¸lço >i>, Ul>Il ¤a,.L. li±¸
65535 _íl.o ¤,l _I>, V :I> c|º >iaIl ¤I.l± ..,I :>¸lço .ol>lo¸ . l,IaIl ¤zIîIl ..lí çI lol
Ul¸iI e¸¸zzIl ¤z,sII AP! l¸.ço l±¸..a. Ul¸iIl ei± c|º ¸s±Il _c .I.>. ¸l..cVl _º i>l..¸
,.Vl ..> >¸lçzIl . Il _Ic li.l iz.a. V AP! _.l.çIl _º l±i,i>. ,. l>| V| :I> _zc _>l _o
¤sº¸zIl .
i..Ilí ¤z.lsIl >ç..I ¤...Il. _za, V li± Ul.zí !D_F!LE_EX!T cl V| l¡.îz, V ¤.l .,>
_,>± ¿ç. _o cçî. .
,l ],|e|| W|11I k|| .|:,s,X|, ,:|,s||
www.c4arab.com www.winprog.org 29
v!! ¸|iqa¿g[¡ ¡s[qai[ .
Il Ul.zIl _º¸z : menu_one
,.lçº ¤ºl±| ¤s,¸L :,Ic _¸a, ¸±.>o _±º li±
:.iºl. _I| ¤L,.. . ¸±>o .±. ¤z.lº >¸ço ,i>... e>lc .
.Io _º cçî, >¸çzIl li± .rc .IzIl. ¤L.¸¸ ¤s,¸±. ,.,¸
çi,s..Il .exe
¤,¸l>.Il .lº¸±zIl _îI .lº¸±zIl _a. _>, li± çç>. l..| ¤,.lîo| :I _,., >¸ço ¸¸>o
º .IzIl >çí _¸cl. Ul.zIl li± _º _îI ¤±l>Il :.z.l .rc l,¸i, ¤.ºl±| :.îz, c>| . _º _..l lzí
_.l¸ .Io ,i>..l e>laIl .h ¤z,Ia.Il UV> _o ¤>¸>l çiIl¸ #include ¸i±zIl .Io _o _í _º .c
>¸çzIl .Io¸ . .rc .lzî>.Il .lº ¸ao çç>, .IzIl li± ) controls ( ¤z.lsIl >ç..¸ ... _I| .
_.l.Il Ul.zIl _º ¸ºç.zIl eiºl.Il >çí UV> _o i.Il :.îz, Ul.zIl li± _º
simple_window _¸¸ao ç± lzí _.Vl >çîIl :I> ia. ¤,I| .±l¸ .
.IzIl _º V¸l .h _z., .IzIl li± e>lc¸ " resource .h "
#define IDR_MYMENU 101
#define IDI_MYICON 201
#define ID_FILE_EXIT 9001
#define ID_STUFF_GO 9002
¤,laII ¤L,.. cçî.. l.± l..z.lº _îI ¸,.îIl _.Il. _,I . Ul.zIl li± _º ,,sIl¸ lz.Vl
..,I ¤,ol¸I| l.. lo ¸l,.>l :.îz, _. .
>¸çzIl .Io cVl ..î.. ) .rc (
#include "resource.h"
IDR_MYMENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", ID_FILE_EXIT
END
POPUP "&Stuff"
BEGIN
MENUITEM "&Go", ID_STUFF_GO
MENUITEM "G&o somewhere else", 0, GRAYED
END
END
IDI_MYICON ICON "menu_one.ico"
,l ],|e|| W|11I k|| .|:,s,X|, ,:|,s||
www.c4arab.com www.winprog.org 30
.Io ¤ºl±|. .IlLo ..l ,. .rc :c¸¸.o _I| :.l lzí >¸çzIl .Io _l¸>|. l±,l .IlLo
resource.h º ¸i±zIl .Io _ ) .c ( ¤z,Ia.Il UV> _o #include l±>¸lço¸ ¤z.lsIl >ç.. .,¸a.I li±¸ .
. ,çs. lzI l±>i>. cl ç± eiºl.Il. ¤.çs,Vl¸ ¤z.lsIl _±çI ¤s,¸L L..l .,¸a. eiºl.Il ¤.º
) window class ( _î.Il li± _Ic :
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
wc.hIcon = LoadIcon(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDI_MYICON));
wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDI_MYICON),
IMAGE_ICON, 16, 16, 0);
,c ¤>,..Il L>V¸ ¸L.Vl ei± ¸ . l> ¤z.lº¸ .Io _Ic ¸ºç.. cl _a.., cVl :.iºl. ¤sº¸o eio
_s.Vl _º ¤s.±o >ç... . >¸çzIl .Io cl _.a, li± .rc _l>.. ¤L.¸¸ ¤s,¸±. ,. .
e¸,a±Il ¤.çs,VI _a.., ) 16 * 16 ( _º l±,l¸ eiºl.Il _o ¸.,Vl ççIaIl _í¸Il _º ¸¡L. cl
_Ic La±. lzI¸ ,l¡zIl L,¸. Alt+Tab ¤.çs,Vl _o ¸,.îIl ¸li±\l c|º ) 32 * 32 ( ¤>.V _º ¸¡L,.
.ls,.L.Il .
¤IliIl .oi>..l isI Load!con() ei± cV _sL.o _. li±¸ e¸,.îIl ¤.çs,Vl _,z>.I
¤,±l¸.ºVl .l.l,sIl. ¤.çs,Vl _z>. ¤IliIl ) default ( Lsº ) 32 * 32 ( ¤.çs,Vl _,z>.I _zaIl lo c>|
> _o li±¸ e¸ç± l¡.l _l.l _Ic l¡I,z>.I ¤Il>Il ei± _º c¸¸L±o _>. e¸,a±Il ¤IliIl UV
Load!mage() . _º lol lao ¸ç± eic l.l,>l çç>. iº .l.çs,Vl .lsIo¸ >¸lço cl _o l¸i> _í Lsº
Lsº _,.¸ç± çç>, ¤.çs,Vl .Io c|º ¤.sº¸l çiIl Ul.zIl .
_.l.Il Ul.zIl : menu_two
.i¡Il i,s..Il l..l ¤z.lº l..| ç± ¤z.lsIl >¸ço ,li>..l l¸¸ _o . _a. _ci.., li± >çîIl
.Vl>Il _a. _º l,¸¸¸± ¸..a, ¤.îI¸ _ºl±\l .
,. ¤I±s.o .lsIzí ¤.çs,Vl Ls>. .,> >¸lçzí ¤.¸>o ¸,aIl .l.çs,Vl ,li>..l :Iií :.îz,
i,s..Il .º¸ l..l l¡I,z>.. ,çs. . UV> _o ¤>l¸o _Ic .l.çs,l ¸l,.>l ¤,.lîo| ,i>..zII _,., li±
ç>ç, ¸>l _. ¸l ¸lç> .la.¸o ¤z¡zIl _s. .
. c¸>l e¸o li.| simple_window ¤ºl±| c¸> _o .h ¸l .rc ¤Il.¸ Ls.I.. cVl¸
WN_CREATE l..iºl. _I| ¤z.lº .,±.¸ .
#define ID_FILE_EXIT 9001
#define ID_STUFF_GO 9002
,l ],|e|| W|11I k|| .|:,s,X|, ,:|,s||
www.c4arab.com www.winprog.org 31
çi,s..Il :sIo ¤oiso _º _,¸L.Il _,i± ¿± .c .lz,Ia. _s.l #include ) :Iz. V l..V
¸ .Io _l .h >¸ço ¸l .rc .(
¤Il.¸ l±ia. .±l WN_CREATE _.Vl >çîIl ¤,º ..íl¸ eiºl.Il l¸>| _I| :
case WM_CREATE:
{
HMENU hMenu, hSubMenu;
HICON hIcon, hIconSm;
hMenu = CreateMenu();
hSubMenu = CreatePopupMenu();
AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "E&xit");
AppendMenu(hMenu, MF_STRING | MF_POPUP,(UINT)hSubMenu,"&File");
hSubMenu = CreatePopupMenu();
AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Go");
AppendMenu(hMenu, MF_STRING|MF_POPUP,(UINT)hSubMenu, "&Stuff");
SetMenu(hwnd, hMenu);
hIcon = LoadImage(NULL, "menu_two.ico", IMAGE_ICON,
32, 32, LR_LOADFROMFILE);
if(hIcon)
SendMessage(hwnd, WM_SETICON, ICON_BIG,(LPARAM)hIcon);
else
MessageBox(hwnd, "Could not load large icon!",
"Error", MB_OK | MB_ICONERROR);
hIconSm = LoadImage(NULL, "menu_two.ico", IMAGE_ICON,
16, 16, LR_LOADFROMFILE);
if(hIconSm)
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
else
MessageBox(hwnd, "Could not load small icon!", "Error",
MB_OK | MB_ICONERROR);
}
break;
e¸¸îzIl .lz,Ia.Il _o ¸,.îIl i>..¸ ¤,º ¸L.Il _aol Lsº >çîIl li± ¤ol>±I _Is. V V¸l .
l..iºl.. ¤I±ç. ,çs, ,. >¸çzIl ,li>..l. el.l..l çiIl _.o lolz. ¤z.lº _.., >çîIl li±
l ¤,Izc _o li.l _Is. _Iº c>| _ol.¸.Il ¤,l¡. ia. e¸.l.o ¤ºi> ,., ,.lçsIl _o ¿ç.Il li± _I>.I
.,Lç.. l±i.c _,o¸Io cçî.. l..|º :.II l¸> l,¸i, :I> _zc i,¸. l.í çI lol ¤z.lsIl ei± _o
GetNenu() ¸ DestroyNenu() .
¤IliIl lci..l. ,çs. .,> ¤Ll..Il _º ¤,lc .l.çs,Vl. _l>Il >çîIl Load!mage() _,.¸o
,>>. ¤.çs,Vl _,z>.I 16 * 16 ,>>. ¤,.l. e¸o¸ 32 * 32 . ¤IliIl ,li>..l l..îz, V Load!con() V
.IzIl _z>. V¸ >¸lçzIl _z>. ¤Il>Il ei± _º l¡.V ¸,.îII V¸ ¸,a±Il ,>>II . ¤z,sIl l.>i> l..l lzí
NULL ¸.ol¸l.I _.so _,.zIl ) !nstance Handle ( .. ,çs. V l..V _o >¸çzIl _,z> ¤,Lz.Il l..i>¸ )
Nodule ( .¸ao ¸,¸z. _o Vi.¸ ) !D ( ¤I,z>. i,¸. çiIl ¤.çs,Vl .Io ,.l l.¸¸o l..|º ¤.çs,Vl .
¸,¸z.. l.zº lol.> ¤,l¸Il LR_LOADFRONF!LE . cl ¤IliIl _o i,¸. l..l _I| e¸l.\I ¿o _ola.
>¸ço ,.l _,I¸ .Io ,.l l¡.l _Ic l¡I l±l.,Lcl _.Il .¸¸>Il ¤I.I. .
,l ],|e|| W|11I k|| .|:,s,X|, ,:|,s||
www.c4arab.com www.winprog.org 32
_,¸L _c l..iºl. _I| ¤.çs,Vl _.so i.... l..|º lci..l _í _Iºl l>| WN_SET!CON
¿.¸o _¸a, _ol.¸.Il c|º ¤.çs,Vl .Io lci..l _.º c|¸ ¸lç> .i> iº lo lL> cl. l.¸.>, .
¤L>Vo : ¤IliIl Load!mage() _s. _º ¤.çs,Vl .Io i>lç., ,I l>| l¡Izc _º _.s. iº
_Il>Il _,.L.Il. _l>Il iI>zIl . _. Uç>,sIl _za... ..í l>| ++ ¤¡>lçIl _o _ol.¸.Il is.. :.l¸
¿¸¸.zIl .Io ¤,º i>lç., çiIl :l> cçî,. _Il>Il _zaIl iI>o c|º ¤,>o¸.Il . is.. ..í çI lol
iI>o _o _ol.¸.Il Debug l ¸ Release _I| ¤.çs,Vl .Io _... .IlLo :.|º ¸¸i.,¸ ..î..o _o
¿Vº\l i.c _ol.¸.Il ¤,Ic ¸.a, cl _º Vol iI>zIl :l> . _olí >i>. cl V| :,Ic lzº :I> _í _.º l>|
¤.çs,Vl .Io ¸l.o " c:\\path\\to\\icon.ico ."
lo Ll... ,çs. cl i,¸.¸ l..z.lº _Ic ¸ºç.. cVl l..> . ± ç± ¤,I| _l.>. lo _í L,.. li
¤Il.¸Il _.so Lls.Il WN_CONNAND . ¤ao _ola.Il ¤,s,í¸ ¸oVl ¿ç. i,i>. _I| _l.>. lzí .
eiºl.Il l¸>| c>| ) window procedure ( ei± _Ic l¸>\l li± cçî,.¸ :I> lç.>l ¤o¸I, l.. _l>Il
¤Iíl.Il :
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam,
LPARAM lParam)
{
switch(Message)
{
case WM_CREATE:
{
HMENU hMenu, hSubMenu;
hMenu = CreateMenu();
hSubMenu = CreatePopupMenu();
AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT,"E&xit");
AppendMenu(hMenu, MF_STRING | MF_POPUP,(UINT)hSubMenu,
"&File");
hSubMenu = CreatePopupMenu();
AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Go");
AppendMenu(hMenu, MF_STRING | MF_POPUP,(UINT)hSubMenu,
"&Stuff");
SetMenu(hwnd, hMenu);
hIcon = LoadImage(NULL, "menu_two.ico", IMAGE_ICON,
32, 32, LR_LOADFROMFILE);
if(hIcon)
SendMessage(hwnd, WM_SETICON, ICON_BIG,
(LPARAM)hIcon);
else
MessageBox(hwnd, "Could not load large icon!",
"Error", MB_OK | MB_ICONERROR);
hIconSm = LoadImage(NULL, "menu_two.ico", IMAGE_ICON,
16, 16, LR_LOADFROMFILE);
if(hIconSm)
SendMessage(hwnd, WM_SETICON, ICON_SMALL,
,l ],|e|| W|11I k|| .|:,s,X|, ,:|,s||
www.c4arab.com www.winprog.org 33
(LPARAM)hIconSm);
else
MessageBox(hwnd, "Could not load small icon!",
"Error", MB_OK | MB_ICONERROR);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILE_EXIT:
break;
case ID_STUFF_GO:
break;
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
l.,iI ¤.|º c¸. lzí WN_CONNAND _.Il¸ l.. _l>Il ¤sI> l¡I>li. çç>. switch ¤,c¸º
¸.ol¸l.II l,.iIl ¤zIîIl _Ic iz.a. e¸,>Vl ei± wParam ) l,.iIl ¤zIîIl LOWORD = 16 .. (
,î>.Il ¸l ¤z.lsIl .¸ao çç>. ,Ia. lzí _.Il¸ ¤..l.zIl ¤Il>Il ¸l,.>l l¡IV> _o ,., ¤z,sí
) control ( Il ¤Il.¸Il _.¸l çi .
i..Il _o ¤>l¸± i,¸. cVl Exit _.szIl >çí c>| _ol.¸.Il _¡., cl !D_F!LE_EX!T ¿.l.Il
.>. cç.azIl ¸l,.>VI WN_CONNAND _î.Il li± _Ic ¸,±, :
PostMessage(hwnd, WM_CLOSE, 0, 0);
¤,c¸sIl ¤sI>Il >çí ¸,±, ¤.o¸ switch ¤Il.¸II ¤a.l.Il WN_CONNAND liî± :
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);//.... .¸:.
break;
,l ],|e|| W|11I k|| .|:,s,X|, ,:|,s||
www.c4arab.com www.winprog.org 34
case ID_STUFF_GO:
break;
}
break;
l :¸.l :I _ºl.I . ¤z.lsIl >ç.. ¤,s. _I| ¤L..l¸ _.l.¸ ¤ºl±|. ,º ) !D_STUFF_GO V.o .(
¿,IipII uI, 4igíjÌ :
.IzIl cl .L>V :IaI menu_one.exe lol >¸çzí l±l.s±l _.Il ¤.çs,Vl _î. _Ic _¸a,
.IzIl menu_two.exe _>¸l> .Io _,z>.. l.zº l..l lz. ¤.çs,Vl _î.. _¸a, Vº . ¤Ll... ,çs,
_I¸Vl ¤.çs,Vl _¸a. ¸¸i.,çIl ..î..o ) .lº ¸azIl ,,º¸. _Ic l>lz.cl ( _ol.¸.Il .lsIo >¸lço _º
l¡±¸c ,. li¡I ei>l¸ ¤.çs,l V| :Iz. V _>. c>| . çi,s..Il :>ol.¸. _¸a, cl i,¸. ..í l>| c>|
.,¸a. ,º¸. l±>¸¸¸ >¸çzIl _I| l¡.ºl±|. ,sº ¤.çs,l _î. _Ic ) !D ( ¸> ,º¸Ilí l,.> ¤z,º 1 V.o .
.l.çs,Vl _o i,iaIl _,z>. :.îz, lzí _ol.¸.Il _º .IzIl _I| e¸l.\I l¸L±o ..I
:I> .¸.>l l>| ¤sI.>zIl .
,l ],|e|| Win32 API .|,|,l|
www.c4arab.com www.winprog.org 35
v!!! ¸[¸[q3[ .
_º¸zIl Ul.zIl : dlg_one
,., V _.Il _ol¸.Il ,ia.. >lî.
Lsº ¸lç>Il .la.¸o Ulza..l l¡,º
¸.>| File->Open ¸>l i.. çl ¸l l>|¸
ei± ¸,zo ¸lç> ¿.¸o ¤>lç. :.
¸l,.>l _o :.îz. _.Il ¤I,.çIl
V.o ¤>.º >l¸zIl .IzIl .
¸lç>Il .la.¸o ) .l¸lç>Il
l¸l±.>l ( l¡.o ei,¸. lo :I ç>ç. cl l¡.îz, _. ¤,.l,sIl .lsIzIl _.s. ¤sIa.zIl :I.. e>i>o ..,I .
Il ¸±.>. l¡.l ç± .l¸lç>II l..i>, çiIl ,¡zIl _.Il ¤¡>l¸ l..|¸ ,,L.. _>l _o _,¸L
¤,oç.¸Il ,i>..zIl GU! ) Graphic User !nterface ( l..îz, l¡IV> _o _.Il ,l¡zIl _o i,iaIl¸
¤..l.í .çILzIl >çîIl _o _.l¡Il ,îIl _o _,Is.Il .
iºlç. V| _± lo .l¸lç>Il cl ç± e¸íi.. cl :,Ic .>, çiIl ,¡zIl _.Il . çiIl _.Il
¸lç>Il ¸,z, V.o .l¸lç>Il _ç±>. ¤,ºl±\l ,l¡zIl _a. ç¸>, ,lL.Il cl ç± ¤,>laIl iºlç.Il _c .l
¸ l..|í li..l .lzî>.Il i,i>.¸ _.so ) handle ( ¤I¸i>Il .,.¸.I ) tab order .( l.,¸s. Il iºlç. _í
AP! _,>± _îaIl¸ .l¸lç>í _zaIl ¤Ll... l¡.îz, ¤,>laIl iºlç.Il _î,± _s. _Ic iz.a. _.Il .
¸lç> ¿.¸o _... .,í
¸lç>Il >¸ço l..| _± :I> _asI eçL> U¸l . >¸lçzIl ¤,s.í¸ .I.>, :I> _,s>. .çI.l
.¸±o _o ) compiler ( ¸>V . .IzIl _º cçî, cl _a.., lzí ¸lç>Il _. Lsº :,Ic _¸cl. l.± .rc
:c¸¸.o _º ¤>l¸>| ¤z¡o :I :¸.l¸ .
IDD_ABOUT DIALOG DISCARDABLE 0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "My About Box"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "&OK",IDOK,174,18,50,14
PUSHBUTTON "&Cancel",IDCANCEL,174,35,50,14
GROUPBOX "About this program..",IDC_STATIC,7,7,225,52
CTEXT "An example program showing how to use Dialog
Boxes\r\n\r\nby theForger",IDC_STATIC,16,18,144,33
END
>çîIl li± _.a, l>lo
U¸Vl ¸L.Il _º !DD_ABOUTDLG >¸çzIl .¸ao ç± . D!ALOG >¸çzIl ¿ç. ç± ) _.o lolz.
¤.çs,Vl .,¸a. ( ¸l.,Il .l,.li>| _¡º ¤a.¸Vl ,lº¸Vl lol ) Left ( _IcVl ) Top ( _¸aIl ) Width (
,l ],|e|| Win32 API .|,|,l|
www.c4arab.com www.winprog.org 36
¿ls.¸\l¸ ) Height ( .,.¸.Il _Ic . >ç. _. _.î.Il ei>ç. ..,I ,,sIl ei±¸ _.Il¸ ¸lç>Il ¿.¸o ei
,lL.Il _.º _o ,i>..zIl L>Il ,>> _Ic iz.a. ) ,i>..zIl _.º _o e¸l.>zIl¸ .( iº ..í l>|º
cçî,. ¸lç>Il c|º ls,º¸ lL> .¸.>l lo l>|¸ :Iií lî,z. cçî,. ¸lç>Il c|º :,z. L> .¸.>l
:Iií . .lzî>.II _,., ¤.V ,¡o li± ) ç>Il ¿.¸o _Ic e>ç>çzIl .l..lîIl ¸l ( ,>>Il. l¡±ç±. _¸a. cl
ç¸l>Il . ¤IliIl UV> _o i,s..Il .º¸ l..l _.î.Il _I| ¸lç>Il ei>¸ _,ç>. :.îz, NapDialogRect() .
>çîIl _. _I| ¿>¸. . D!SCARDABLE ¤Il> _º _¸sIl. >¸çzIl e¸íl> Ui., cl. ,lL.Il ¸.>.
,lL.Il >¸lço Ls>I li±¸ l¡oli>..l ,ic .
li., _.l.Il ¸L.Il _IL±zIl. STYLE ) Lz. ( ¸lç>Il l..| _º ¤oi>..zIl eiºl.Il Lz.. ¿..,¸ .
.l. _º l¡>¸. ,¸I.., ei± CreateWindow() :,iI e¸ºç.zIl eicl.zIl .lsIo _º . ¤Il> _º
_l¸Il .Io _l¸>|. ,¸Io :.|º ls..o ¤º¸ao ..lç. ,li>..l " windows.h " ¤z,Ia.Il _±s. #include
:,iI >¸çzIl .Io _º .rc .IzIl ¸l winres.h .IzIl ¸l afxres.h Uç>,sII :Ilza..l ¤Il> _º
_. .++ l,Il l¡>l¸>| ,.,. ¤Il>o V .lsIzIl ei± c|º >¸çzIl ¸¸>o ,i>... çI .
¸L. ¤,z..Il ) caption ( ¤.s.. ¤.s. _¸., cl i.V ...
i,¸. çiIl L>Il ,.l¸ ,>> >i>, L>Il ¸L. ç¸lç>Il ¿.¸zIl li¡I ¤oli>..l . ,., V li±
LçL>Il _o ¤sI.>o lclç.l cçIza.., lo l¸,.í _,oi>..zIl cl ¸l..cl _Ic .,.lç>Il _í _º lolz.
,>>Il _º ¤.¸ls.o¸ . ¤.l.. _Is. Vº :l..¸VI çci, V li± _îI .
l.,iI cVl ¤>.V ) list ( >, .lzî>.Il _o ç¸lç>Il ¿.¸zIl _Ic l±l..| . :
DEFPUSHBUTTON "&OK",IDOK,174,18,50,14
¸¸Il ¸L. ç± li± OK ¸o¸Il lol 8 ¸¸Il ¤,z.. _o ¸L.zIl .¸>Il _.a,º ¤Il>Il ei± _º ) O
( _Ic La±Il. _sî, çiIl¸ Alt+O ¸¸Il _Ic ¸s.Il ¤,Izc _,s>. ,.,I ) ¿o ¤Iza..zIl :I.í lolz.
¤z.lsIl >ç.. .( !DOK cl lz.¸ ,î>.Il .¸ao ç± !DOK ,li>..l l.o¸I, V ¤.|º ls..o .¸ao ç±
¸¸ílzIl #define . ¸lç>Il ei>ç. l¡Ií¸ ¿ls.¸Vl¸ _¸aIl _IcVl ¸l.,Il _¡º ¤a.¸Vl ,lº¸Vl lol
) _.î.Il _,I¸ .(
¸lç> l..\ >¸çzIl ¸¸>o ,i>... lz.l> :.Vº ¤,i,Is. cçî. cl _a.., ¤oçIazIl ei± .l
_.¸o >¸ço ¸¸>o _Ic ¸ºç.. _î. ,I l>| ¤±l>¸ l¡. _l>Il >çîIl ¤º¸azI l¸L±o cçî. l.l,>l :.|º .
¿ç. _o .¸ao clîIz, cl..l clzî>. !DC_STAT!C ) ç± çiIl - 1 ( _Ic ¤IViII ,i>.., li±
.¸ao çl _I| cl>l.>, V lz± c>| lz¡,I| _±. cl li.l i,¸. V l..l . .¸ao ¤ºl±| _îI ) !D ( lz¡.o çV
¤,Il e¸ç±. :I> _as, iº >¸çzIl ¸¸>o cl lzí l.l.. _ol.¸.Il. ¸±, V .
" \r\n " ¤sI.>o .l,a±¸ _º ¸L.Il ¸l _.Il _¸aI .
>¸çzIl .Io _I| :I> ¤ºl±| c>| .rc ¤.l.îI _l.>. l..l _.a, l¸>| ¤>Ilaz. ,çs, çiIl ¸lç>Il
Il li± ¤Il.¸ ç¸lç>Il ¿.¸z . l..iºl. l¸>|. ¤,.. ç± l,Izc i,i>Il _.Il. _,I li± _Is. V
¤,.l.Vl ) lolz. _,I ¤.îI ( l¡. _l>Il eiºl.Il l¸>| l¡I eiºl. _í .¸¸ao ç± lzí¸ ¤.V .
BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam,
LPARAM lParam)
,l ],|e|| Win32 API .|,|,l|
www.c4arab.com www.winprog.org 37
{
switch(Message)
{
case WM_INITDIALOG:
//¸¸. _,¸. ^...¸ ... ^.., ..¸... ^¸,¸
return TRUE;
case WM_COMMAND:
//.¸... ¯..:. _.. ..... ¯... ¸.¸.>¸
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hwnd, IDOK);
break;
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
.lºV.>Vl _a. i>ç. ¤.l V| ¤,.l.Vl l..iºl. l¸>|. li> ¤,.. ¸lç>Il ¿.¸o l¸>| cl L>V.
¤L,..Il .
¤IliIl .IL cl ç± V¸l DefWindowProc() l _.l.¸II ¤...Il. l¡Lls.Il _º .c¸. V _.I
¸,c ¤IliIl ei± .IL c| .Iº _¸.so .çI.l. l¡.>Ilao ¤z¡z. ,çs. ls.l. l.¸í> lzí _.Il¸
¤,Il e¸ç±. ,., li± .l¸lç>Il ¿o ¤.V L¸¸.o ) ¤±l> ¸çol _aº _º ..c¸ l>| V| .(
¤z,sIl i,a. ..l .IlaIl _º l,.l. FALSE l¡>Ila. ,I _.Il _.l.¸II ¤...Il. ¤z,sIl¸ TRUE
e>çaIl i.c ¤±l> ¤z,º i,i>. ,. l>| V| l¡>Ila. _.Il _.l.¸II . ¤. l.zº lo li± cl L>V . _zaIl
¤z,sIl e>lc|¸ _. çl. ,l,sIl ,ic ç± _¸.szIl FALSE _zc _±s. l¡Ls.I. _.Il _.l.¸Il lz.,.
¤sI>Il switch ¤z,sIl i,a.¸ TRUE .
¤IliIl .IL. V ..l l.Il. DestroyWindow() ¤IliIl .IL. lz.|¸ ¸lç>Il ¸Vc\ EndDialog() .
.IL ia. e>lazIl ¤z,sIl ç± _.l.Il ¸.ol¸l.Il¸ DialogBox() .
¤Il.¸Il _.so Lls.Il _o Vi.¸ ¸,>l WN_CREATE _.so Ls.I. :.|º WN_!N!TD!ALOG
¸lç>Il ¿.¸o ¸ç¡L _.º .l,IzaIl _a. l¸>\ . ¤z,sIl e>lc| ,. TRUE _>V _º _,.lszIl ¤>çI ¿±¸
_±l¸.ºVl ,î>.Il ¿±¸ ) . ¤Il.¸Il _.so Lls.Il l,Il> :.îz, WN_CREATE ,., ¤Il.¸Il ei± _îI
l¡,I| >ls.Il .ºçIl :I> _º :.îz, V c>| ,î>. çl l..| _.º l¡Il.¸| . ¤Il.¸Il _îc _Ic
WN_!N!TD!ALOG .lzî>.Il l..| ia. l¡Il.¸| ,., _.Il .(
,sIl _o _sî, :I> _... l.c> UlsIl¸ _ :
case WM_COMMAND:
,l ],|e|| Win32 API .|,|,l|
www.c4arab.com www.winprog.org 38
switch(LOWORD(wParam))
{
case ID_HELP_ABOUT:
{
//..¸.. ¯.¸. L., ¸¸>. .., ¸,¸...
int ret = DialogBox(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
//..¸.. ¯.¸. _.. ..... ¯,.... ¯... ¸.¸.>¸
if(ret == IDOK)
{
. MessageBox(hwnd, "Dialog exited with IDOK.", "Notice",
MB_OK | MB_ICONINFORMATION);
}
else if(ret == IDCANCEL)
{
MessageBox(hwnd, "Dialog exited with IDCANCEL.",
"Notice", MB_OK | MB_ICONINFORMATION);
}
else if(ret == -1)
{
MessageBox(hwnd, "Dialog failed!", "Error",
MB_OK | MB_ICONINFORMATION);
}
}
break;
// Other menu commands...
}
break;
¸lç>Il ¿.¸o l..\ ¤.oi>..l çiIl >çîIl ç± li± AboutBox >çîIl li± cl _,z>. :.îz,
¤Il.¸Il _.so _º cçî,. WN_CONNAND ¤a>l¸zI ¸o¸Il li± _Ic La±lº :I> .cç... ,I l>|
_.l.Il _¸iIl .
¸lç>Il ¿.¸o .¸ao !D_HELP_ABOUT i.. .¸ao ç± ¤z.lsIl Help->About ) _s. _.a,
¤>,>±Il ¤z,sIl (
,çs.. i,íl.Il.º ¸lç>Il ¿.¸o l.I _... cl ¤,.,.¸Il eiºl.II ¤a.l.Il ¤z.lsIl _o i,¸. l..l lz.
_º >çîIl _l¸>|. WndProc() _º _,I¸ ¤,.,.¸Il l..iºl. _º WndProc ¸lç>Il. ¤±l>Il ) ¿.¸z.
¸lç>Il .(
aIl ¤z,º Ls>. l.zº cVl e¸.í i.c l¡.,z±l ¸¡L. _.Il¸ ¸lç>Il ¿.¸o _o e>ç .lzî>.Il _º
Ll..Il lo¸ ,i>..zIl ¤,Ic La± çiIl ¸¸Il ç± lo .¸a. .,í Lsº _, ¸¸ i>ç, l.Il.o _º ¸lç>Il
¸¸Il. ¸.l.zIl " _ " ¸¸Il ¸l " ¿ " lo .lzî>. eic l.i.c clí çI l>lo¸ .¸¸> ç± ,i>..zIl ¸l,.>l l¸| l
e>çaIl ¤z,º UV> _o :I> _í _º ,î>.Il Lsº _îz, ) return value ( ¸lç>Il l¸>| _o .
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd,
AboutDlgProc);
,l ],|e|| Win32 API .|,|,l|
www.c4arab.com www.winprog.org 39
¤IliIl ei± _c ¤>.l.Il e>çaIl ¤z,º DialogBox() >±Il ¸,a.zIl _º l¡Ls> ,. _, ret ç± li±¸
¸lç>Il .IL ,., .,> :>ol.¸. _o ¿±ço çl _º ¤a±¸ :.îz,¸ ,ç,Il l..¸> _º ,l¡Il ¸>Il .
!DD_ABOUT ¸lç>Il >¸ço .¸ao ç± . Hwnd ¸lç>II .Vl eiºl.Il _.so ç± ) l..iºl. _± çiIl
¤,.l.Vl .( AboutDlgProc() ,î>.II ,i>..zIl ¸lç>Il l¸>| _± ,çIao ç± lzí ) co ntrol ( _º
¸lç>Il ¿.¸o .
Ul.. ¤.l¸ i. V _Ls.zIl _o¸.zIl : .ol>lo DialogBox() ¿.¸o ¸Vc| ia. V| ¤z,º ¤,l i,a. V
cl e¸íi. .>lçIl _.l.Vl _.Il l..> _ç.so ç¸lç>Il ¿.¸zIl¸ _.l.¸Il _Ila. .î,º ¸lç>Il
DialogBox() _.l.¸Il ¤sI> :Iz, ¤.l> i> _º ) _.l.¸Il ¤ol ¸> ( ¿.¸o ¸ç¡L i.c ¤.l .,> ¤. ¤±l>Il
lzo ¸¸i.,¸ U¸l..o _º l¡±.so ¸,±,¸ ¤s.l.Il ¤sI>Il _La. ¤. ¤±l>Il _.l.¸Il ¤sI> c|º ¸lç>Il
¤.z>¸. ,.,. eiºl.Il ei¡. _Ia., Ll.. çl cl _.a, ) ¤,±l¸.ºVl _.l.¸Il .Icl ¤z>¸. ) default (
¸lç>Il ¿.¸z. ¤sIa.zIl ( çl ¿o ¸íiIl l.sI.l lzí ¤,.l,º eiºl. .
ei,¸. lo li±¸ ¸lç>Il ¸Vc| ,., _.> ¤,.,.¸Il eiºl.Il UlL.| ,.,. ¸lç>Il _,as. i.c c>|
_,.iºl.Il Ví _º ¸>.. cl i,¸. l.l,>lº lz.l> ei,¸. V l..îI l.Ilc ) ¸lç>Il ¿.¸o¸ ¤,.,.¸Il eiºl.Il ( lzí
,îº V.o .loç.¸Il ¤>Ilao _ol.¸. iºlç. ¿o Ul>Il ç± ,>lsIl l.I±º ¿ç±ço ç± li± _>Il cçî,. . .
,l ],|e|| Win32 API ,||s ï: .|,|,l
www.c4arab.com www.winprog.org 40
!X _i|g g, ¸[¸[ql .
_º¸zIl Ul.zIl : dlg_two
¤IliIl _Ic .¸a... cVl CreateDialog() _.Il¸
¤IliIl ¤s,s. ¸..a. DialogBox() _¸iIl _º l±l.,l¸ _.Il
_.l.Il . ,çs. lzI ¤.l ç± _,.IliIl _,. 縱ç>Il ¸¸sIl
¤IliIl DialogBox() ... l¡. ¤±l>Il _.l.¸Il ¤sI> i,s
¤IliIl _îc _Ic ¸lç>Il ¸Vc| ia. V| >ça. V l¡.|º CreateDialog() eiºl.í ,lL.Il ¿o _ola.. _.Il
¤IliIl. l±l..| ,. CreateWindowEx() ,.,¸ ¤,.,.¸Il eiºl.Il _I| _zaIl _.so i,a. l¡.l .,>
¤,.l,sIl ¸¸i.,¸ iºlç. _o eiºl.í l¡ao _ola.Il . .Ilº V. ¤.,z.. _Ic _IL±, ¸lç>Il _o ¿ç.Il li± )
Nodeless ( ¤IliIl ,çs. _,> _º DialogBox() .Ilº .l> .l¸lç> l..|. ) Nodal ( .
¸lç>Il >¸ço l..| :.îz, Uia. cl :.îz, lzí _.l.Il _¸iIl .lçL> _s. _Ic liz.ao
_º " Tool Window " ¤,±l>Il ¸l.>. .,>. " Lz.Il ¿.çzIl " ¤,z.. ¸a±l clç.aIl L,¸.I lLc\
¤.îzo .
_I, lzí ç± ¤.l..l çiIl ¸lç>Il >¸ço :
IDD_TOOLBAR DIALOGEX 0, 0, 98, 52
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "My Dialog Toolbar"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "&Press This Button",IDC_PRESS,7,7,84,14
PUSHBUTTON "&Or This One",IDC_OTHER,7,31,84,14
END
cl .L>V :.l¸ i.V ¸¸>o >¸çzIl _,ça.. ,lº iº D!ALOG . D!ALOGEX i,¸. l..l _.a, lzo
¿±¸ EXSTYLE ) ¿.çzIl Lz.Il ( ¸lç>Il _º ) ¸lç>Il ¿.¸o _º çl .(
_.,.¸Il l.>ol.¸. i,s.. l..l ¸lç>Il _... eia. . _>Il c>| _,>Il _º l¸±lL cçî, cl .>¸l
¤Il.¸Il _.so _º :I> ¿±ç. ç± WN_CREATE . l..zIl eiºl.Il _.so Ls.I. cl i,¸. lzí ¤IliIl. e
CreateDialog() ¤Iza.... çiIl¸ _.szIl li± Ls>, _ol. ¸,a.z. _,¸±.Il. l.zº :I> _asI c>|
ls>V .
¤L>Vo : DialogBox() ) _.l.Il l.Il.o _º ( ç¸lç>Il ¿.¸zIl ,i± ia. V| eiºl.Il _.so i,a. V
_îc _Ic l,.l¡. CreateDialog() ei ,.o _s..¸ _.szIl i,a. _.Il .
HWND g_hToolbar = NULL;
,l ],|e|| Win32 API ,||s ï: .|,|,l
www.c4arab.com www.winprog.org 41
case WM_CREATE:
g_hToolbar = CreateDialog(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_TOOLBAR), hwnd, ToolDlgProc);
if(g_hToolbar != NULL)
{
ShowWindow(g_hToolbar, SW_SHOW);
}
Else
{
MessageBox(hwnd, "CreateDialog returned NULL", "Warning!",
MB_OK | MB_ICONINFORMATION);
}
break;
¤z,I. ¤z,sIl ei± ..lí l>|º li,> Vzc ¸..a, li± e>lazIl ¤z,sIl _>s.. ,çs. ) !NULL (
¤IliIl. eiºl.Il ¸l¡L|. ,çs. l..|º ShowWindow() . ¤IliIl ¿o DialogBox() 縸¸± ¸,c ¸oVl ¸..a,
¤IliIl _ci..,¸ l.c ¤z¡zIl. ,çs, ,lL.Il cV l>lzI ShowWindow() ei>çI .
l.Il cVl _zaIl li± ç>ç.. c>| l¡.o _.l.¸Il Lls.Il. ,s. ,I _za. V l¡.îI l¡±¸c ,. eiº
¸lç>Il l¸>| UV> _o ) l¡. _l>Il l±l¸>| eiºl. _îI ( el.,z.l çiIl l.¸lç>. _l>Il ToolBar :
BOOL CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam,
LPARAM lParam)
{
switch(Message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_PRESS:
MessageBox(hwnd, "Hi!", "This is a message",
MB_OK | MB_ICONEXCLAMATION);
break;
case IDC_OTHER:
MessageBox(hwnd, "Bye!", "This is also a message",
MB_OK | MB_ICONEXCLAMATION);
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
¤IliIl ¿o eiz.azIl _.l.¸Il _.lso ¿o ¤s.LzIl iclçsIl .Icl cl .L>V :.l¸ i.V
CreateDialog() ¤IliIl ¿o l¡. UçzazIl :I. _± DialogBox() ¤IliIl .IL. ,s. V
,l ],|e|| Win32 API ,||s ï: .|,|,l
www.c4arab.com www.winprog.org 42
DefWindowProc() ¤z,sIl icl lz.|¸ TRUE ¤z,sIl¸ l¡Lls.Il i,¸. _.Il _.l.¸II FALSE V _.Il :.I
¡Lls.Il i,¸. l .
¤IliIl _ci... V l..l 籸 _.l.Il Ul.zIl _c .,sL ¸,,a. EndDialog() .Ilº V. .l¸lç>I
¤IliIl lci..l :I> Ui. l..îz, DestroyWindow() ¤,.l,sIl ¸¸i.,¸ iºlç. ¿o :I> l.Iaº lzí lolz. .
¤,.,.¸Il eiºl.Il ,i± ,. lzI ¸lç>Il ,i¡. l.zº ¤Il>Il ei± _º . .>, ¤.l _.a, li± _º :Ii. _,¸±.Il
¤,.,.¸Il eiºl.Il l¸>| . .V,ia.Il ei± ç¸>. ¤,.,.¸Il eiºl.Il l¸>| _º c>| .
case WM_DESTROY:
DestroyWindow(g_hToolbar);
PostQuitMessage(0);
break;
¸lç>Il ls>|¸ ¸l¡L| _Ic _,¸>lº cçî. cl >ç. l¸,>l ) ToolBar ( li¡I :I> i,¸. .º¸ çl _º
>|. .zº ¤z.lsIl _I| _,..l _,¸ol _l¸ ) menu ( lz¡.,La.. .zº¸ _.l.Il _¸iIl _º l¡.l..l _.Il
¤Il.¸Il _.sz. WN_CONNAND :
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_DIALOG_SHOW:
ShowWindow(g_hToolbar, SW_SHOW);
break;
case ID_DIALOG_HIDE:
ShowWindow(g_hToolbar, SW_HIDE);
break;
//¯..... .¸., ¸,... ¯¸.,
}
break;
l,¸i, ¸l >¸çzIl ¸¸>o :I> _º loi>..o ¤±l>Il :.z.lº l..| _Ic l¸>lº cçî. cl .>,
) >çîIl ¤.l.î. ( _¸iIl li¡I _ºlçzIl Ul.zIl _Ic ¿VL\l :.îz,º :I> :,Ic _. c| _îI ) dlg_two (
Il li± ¿o ¸ºç.zIl _,Ii .
_,.iºl.Il _o _í _I| Uç±çIl _Ic l¸>lº cçî.. :.|º _ol.¸.Il i,s... cVl ,çs. lzI : eiºl.Il
¸lç>Il ¿.¸o¸ ¤,.,.¸Il .
V¸l lz¡... ¤º¸ao ,¡, _,¸ol L>V.. :.|º :>ol.¸. .is. lo l>| ¤Ls.Il ei± i.c : lzI
¸¸Il _Ic La±. Tab a.. V ¸lç>Il ¸l¸¸l ¸l,.>l ¤,IzaIl c|º ¸l.>zIl ç± U¸Vl ¸¸Il lz.l> _s.,¸ ¸,
_Ic La±Il. :.l ç± _.l.Il _.Il¸ Alt+O ¸l Alt+P _za. V ¸¸ çl _Ic ¸s.Il ¤,Ic i,s.. c|º ) .¸>
,¡s.I .( ¤IliIl ¿o _.l.Il Ul.zIl _º :I> ,. _,> _º _za. V l>lzI DialogBox() . ¤IliIl cV
.¸Il ¤sI> _º l,Il l¡Iza. ,çs. e¸,>Vl Lls.Il. ,çs.¸ l¡. ¤±l>Il _.l .li>Vl ¤,±l¸.ºl ¤s±.
) default ( ¤IliIl lol CreateDialog() :I> _as. Vº . lci..l UV> _o l..s.l. :Ii. ,çs.. li¡I
¤IliIl !sDialogNessage() l.I _¸.szIl _zaIl. ,çs.. _.Il _.l.¸Il ¤sI> _º .
,l ],|e|| Win32 API ,||s ï: .|,|,l
www.c4arab.com www.winprog.org 43
while(GetMessage(&Msg, NULL, 0, 0))
{
if(!IsDialogMessage(g_hToolbar, &Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
¤IliIl _I| ¤Il.¸Il ¸,¸z.. l.zº eVcl >çîIl _º !sDialogNessage() ¤Il.¸Il ..lí l>|º
¸lç>Il _I| ¤¡>ço ToolBar ) _.so UV> _o ¤,I| ¸l.o ¤IliIl ei± _I| el.¸¸o çiIl ¸lç>Il ( c|º
¤z,sIl i,a,¸ _±l¸.º\l _zaIl ç¸>,. ,lL.Il TRUE . c>| _.sz. ¤sº¸o ¤Il.¸Il ¤Il>Il ei± _º
Ul¸iIl _ci... _I TranslateNessage() V¸ DispatchNessage() . ¤¡>ço ¤Il.¸Il ..lí l>| lol
>l.azIlí l¡>Ila. l..|º c¸>l eiºl. _I| .
i>. ¤IliIl Ulza..l l..îz, ¤.l _I| e¸l.\l ¸ !sDialogNessage() _.Il iºlç.Il ¿o l±,l
¸lç>Il :çI. :I.. l¡Ia> _º ¤.c¸Il ¤Il> _º li±¸ ¸lç> ¿ç. _o ..,I . ç± ¸lç> _í cl ¸íi. Lsº
.Icl cl¸ eiºl. ) _í _î. ,I c| ( Il .l¸lç> AP! iºlç.Il _í _Ic _za. .
V. .l¸lç>Il _>, ,,º li± ¤.sIl _s. _o _..o ¸>l ¸lç> l.i.c clí çI l>lo _îI .Ilº
) ¿ç. _o cl¸lç> ToolBar ¸.íl ¸l ( ¤,Izc l¡,Ic l¸>|¸ .l¸lç>Il _.lso ¤>.V _Ic ¸ºç.. cl ç± _>Il
_.lszIl ¸¸z.¸ V.o ¤L¸¸.o ¤sI> ,li>..l. .>. ) ¤>.V _.lszIl ( ¤IliIl _I|
!sDialogNessage() e>l.azIl ¤>IlazIl ¤z... ,çs. l..|º V|¸ _,>±Il _.szIl i>. _.> . ¸..a, li±
_,çIl _Ic Lsº ¸±.s. V¸ ¤olc ¤,>o¸. ¤I±ao 32 C¸lsII _,.L.í :I> ¸l..cl _îz,¸ .
,l ],|e|| Win32 API i,a|,s|| .|,Ll:|| · .|n:,. .|,,,l ,|,)|
www.c4arab.com www.winprog.org 44
X J¿æ|¿ai[ ¸|,@l.i[ . ¸¸æ ¸|o,¸, .¸[¸¿¸l .¸[¸¸| .
º¸zIl Ul.zIl _ : ctl_one
,li>..l. .zº iº _..l _I| e¸l.\l >¸l
>ça.. cl .>, li¡I ¤s.l.Il ¤I.oVl _º ¸l¸¸Vl
_¸iIl li± _º l¡>l¸>|. l±,l .zº _..V l¡,Ic
.lzî>.Il ¤,s. ¤sº¸ .
LI¸5niII :
cl ç± e¸íi. .>, ,¡o _. .lzî>.Il
o lolz. iºlç. V| _± lo iºlç.Il ¤,s. _.
¸ l¡. _l>Il eiºl.Il l¸>| l¡I ¤,.l,sIl ¤.º
eiºl.Il ) window class ¸ls..Vl l¡.o ,., _.Il
.V,.zIl ( _.º _o l¡I,>.. ,., _.Il¸
,lL.Il . .îz, _. çl .lzî>.Il ¿o ¤Izc :.îz, ¤,>laIl iºlç.Il ¿o ¤Izc : .
_IIm¡II :
_±lç., ¸¸i.,¸ cl _I| l.¸.l isIº _.l.¸Il ¤sI> Uç> ¤s.l.Il l...ºl.o ¸íi. ..í l>|
_.l.¸Il Vza..o .. .i>Il Uç±> i.c¸ .li>Vl _.>.I ,î>.Il Uç> ,lL.Il _I| ¤Il.¸ _.¸.
) event ( l c|º ,î>.Il li¡. _Ia.zIl :Ii. l.¸a.. ¤Il.¸ _.¸, ,lL.I . ¤,.l,sIl .lzî>.II ¤...Il.
c|º ¸la.\l ¿ç. _o cçî, WN_CONNAND ¤...Il. lol ¸l¸¸Vl¸ ,.lçsIl ¿o ls.l. :I> l.,l¸ lzí
.lzî>.II ¤a.l.Il l.¸Il c|º ls>V l¡I¸l..l. _.Il¸ ¿ç. _o cçî.. _. WN_NOT!FY .
¤.I,î.. ¤I ,î>. _í¸ ¸>V ,î>. _o lo i> _I| _¸l¸.. l¡Il.¸|. ,çs. _.Il _.l.¸Il
_.l.¸Il _o ¤±l>Il . ¤sI>Il _I. lz.,> _îI while _o ¿ç. _o ¸.íV _za... iº ¤Il.¸Il _s. c|º
¤I .zz± çiIl ,î>.Il _Ic _.l.¸Il _za. ¤olc _îI .lzî>.Il . li± _.l.¸ ¿o l±ç±> _c¸o
>¸.Il ¿.¸o ) listbox ( ¤Ii..zIl ¤z.lsIl¸ ) combobox ( ¿ç. _o _.l.¸Il çl ) LB_* ¸ CB_* ( _.Il¸
,>..l¸ l¡>¸z. ¤ºi± .zº isI¸ ¤I>l..o ..,I l¡.îI¸ ¤I.lz.o cçî. >lî. ,l¡zI l±i,s... ¸,z..
.c¸l ..í lzo ¸.íl :I> .
_.o ei IçzIl _.l.¸Il ¸>l ..l> _o WN_SETTEXT _í .¸L _o l.,¸s. ¤Iç.so _±
¤±l> ¤a.± .l> iºlç. V| _± lo .lzî>.Ilº .lzî>.Il .
Il ¤Il> ,li>..l. _.l.¸Il Ul.¸| :.îz, AP! SendNessage() ¤IliIl ,i>...¸
GetDlg!tem() ¤IliIl ,i>... ¸l ,î>.Il _.so _Ic Uç±>II SendDlg!temNessage() e¸.l.o
. ,çs. _.Il¸ lao _,IzaIl . ¤>,..Il _s. _La. _,.s,¸LIl Ví .
,l ],|e|| Win32 API i,a|,s|| .|,Ll:|| · .|n:,. .|,,,l ,|,)|
www.c4arab.com www.winprog.org 45
LI¡j¡niII ! Edits :\
,i>..zIl _,îz.I .Lç . >| ¸¸i.,çIl ¤.,. _º ¤oi>..zIl .lzî>.Il ¸.íl _o ¸,¸>.Il ¸..a,
¤,Ic ¤sI.>zIl .l,IzaIl _o ¤Iz> l¸>| ¸l ¤I,ia. ¸l _.Il Ul>>| _o . e¸îso eiºl. _± V.o ¸¸i.,¸
¸,¸>. ,î>. çç>. ¤z,iº¸ ¤,>lc ) Edit ( l¡I>l> _º .
¸,¸>. ,î>. ¿o _±lç.II ,i>.., _.Vl >çîIl :
SetDlgItemText(hwnd, IDC_TEXT, "This is a string");
,î>.Il _º >ç>çzIl _.Il ¸,,a. _Ic _za. ¤IliIl ei± ) . _za... ei± .lzî>.Il ¿o e¸.î
.lzî>.Ilí l¡.çz±o _º _. çç>. _.Il ¤.íl.Il l¸> ,I±¸ ¸l¸¸Vl (... .
_¡. _zc ,î>.Il _o _.Il ¿l>¸..l .
int len = GetWindowTextLength(GetDlgItem(hwnd, IDC_TEXT));
if(len > 0)
{
int i;
char* buf;
buf = (char*)GlobalAlloc(GPTR, len + 1);
GetDlgItemText(hwnd, IDC_TEXT, buf, len + 1);
//... do stuff with text ...
GlobalFree((HANDLE)buf);
}
_l.>. V¸l ¸>>I ç¸íl> ¿ºço ) allocation ( c¸>. .¸¸>Il ¤I.I. ,º _Ic _±>. cl i,¸.¸ ¤
e¸íliIl _º e>ç>çzIl ¤,¸o¸Il ¤I.I.Il _Ic ¸.çzIl . e¸íliIl ,>> V¸l .¸a. cl .>, :I> _zaI
e¸>> .>lçIl . i>ç, V GetDlg!temTextLength() i>ç, _îI¸ GetWindowTextLength() _í c>|
¤IliIl Ulza..l UV> _o ,î>.Il _.so _Ic Uç±>Il ç± ¤Iaº .>, lo GetDlg!tem() .
..l.zIl e¸íliIl ,>> ¸>> l..îz, _.Il UçL _Ic l.Iç±>.¸ cVl . _,s>. ¤,Izc .s±l l.±
_zaIl _I±Vl _o _,I ¤.V ¤,Ic _zaII _.Il _a. çç>. .¸¸>Il ¤I.I. ..lí l>| lo ¤º¸azI
¤c¸lº ¤I.I. _Ic ... , li± _îI ¿,L... l.l,>l :. _Ia. .
¤IliIl _ci... c>| l¡ao _ola... .¸¸> ¤I.I. >ç>¸ _l¸.ºl _Ic GlobalAlloc() ¸>>I
e¸íliIl _a. . ¤IliIl GlobalAlloc() ¤IliII ¤.ºlîo _± l.± calloc() _¸iIl ¤.,. _º f _î,.ç, . >|
e¸íliIl _a. ¸>>. ,çs. li..l ) initializing ( ¤o¸iazIl ¤z,sIl. l±lç.>o 0 li± _Ic ¸.ço i,a.¸
ç¸íliIl ¿ºçzIl . :I> _z., .,>. ¤IliII ¸.ol¸l. U¸lí l±¸,¸z. :.îz, _.Il .l,l¸Il _o i,iaIl i>ç,
li>l¸ lcç. ¸¡L , l>¡. .îI. _,IiIl li± _º _îI¸ .li±Vl .V.>l. ¤sI.>o .líçI. :I.. cl.
,li>..Vl _o .
,l ],|e|| Win32 API i,a|,s|| .|,Ll:|| · .|n:,. .|,,,l ,|,)|
www.c4arab.com www.winprog.org 46
º _..l _I| ¤...l ¤ºl±|. .z 1 ¤IliIl l..> :IiI _cliIl lo _,a±ço _º UçLIl _I|
GetWindowTextLength() i>l c¸> _o _îI ,î>. _º e>ç>çzIl ¸ço¸Il >ic i,a. _Il>Il .,l.Il
¸l..cVl _,a. . l±| c¸> _o ¤,¸o¸Il ¤I.I.II ç¸íl> ¿ºço ¸>>. l.zº çI ¤.l _.a, li± ¤º 1 _.Il c|º
_±>zIl ,>>Il cia., ¤I.I.Il ¸>l _º _Il>Il .,l.Il _îI e¸íliIl _º i>lç.Il _º _>., iº
.l.l,.Il .,¸>. _º ...., iº¸ ) data ( l...o l,íl¡..l l>ls. ¤.çc¸o ¸,c c¸>l .l,Izc ¸l . cl .>,
>l ¿o :Iola. l..l l¸i> cçî. Il Ul¸> _a.º ¸¸i.,çIl _º ¤,¸o¸Il _.V.Il ,l> AP! _.l.¸Il _a.¸
_.l.çIl ¤aIlLo lz.l> _.>.., li¡I V ¸>Vl _a.Il¸ _.Il UçL _º _Il>Il .,l.Il _l¸>| iz.a.
Ul¸iIl ei¡. ¤±l>Il .
cl :I _.>..,º :I> i,¸. ..í l>|º ¤,¸o¸Il _.V.Il ¤,.l.Vl .l¸,zzII ¸¸L.l ,I
¿IlL. _.Il ¤aI .l,.l.l _c ,Iî.. ..¸..| ¿ºlço ¸l l..í .
¤IliIl lci..l ¿,L... l¸,>l GetDlg!temText() _º >ç>çzIl ,î>.Il cç.>o ¿l>¸..V
¸s,. ) buffer ( l±¸>>. l.zº _.Il e¸íliIl . _Il>Il .,l.Il _l¸>| ¿o ¸s,.Il ,>> iz.a, lci..Vl li± .
¤z,sIl _Il>Il .,l.Il c¸> _o _îI ¤>ç..zIl ¸ço¸Il >ic _± l.± l±l.Iz±l _.Il e>lazIl ...
l.±. ¿o i,¸. lo l.¸>.l iº¸ cVl ) _,Iº i.o ¤,Ic l.I±> çiIl ( e¸íliIl ¸,¸>. c>| .>,
¤,¸í¸zIl ¤>IlazIl ei>¸ _zc _L..¸ e¸íliIl _s.. V _.> _.º _o e¸ç>>zIl . l.,sî, :I> _,s>.I
º ¤IliIl .IL Ls GlobalFree() l¡I l.¸.ço ¸,¸z.¸ .
Il Ul¸> _o ¤,.l.Il ¤cçz>zIl. _.s..zIl _º ¸l ls..o ,Ic _Ic cçî. iº AP! . ¤º¸¸azIl¸
LocalAlloc() LocalFree() ... ¿ç. _o iºlç.Il _>. ¤cçz>zIl ei± _I| 16 .. .
_,çIl ¤.,. _º 32 ¿ç. _o e¸íliIl Ul¸> ¸..a. Local* ¸ Gloabl* ¤I.lz.o ) _s. ç>ç.
¤z¡zIl .(
¸IõjyI ¿, LI¡j¡n :
¤z¡o ei± ,lº¸l Ul>>| ,i>..zIl >l¸l çI l>lo _îI _,z>¸ L,.. _zc ç± _.Il Ul>>|
Il _îI ¤olc cçî. >lî. AP! ,,sIl _,ç>.¸ _î,ol.,iIl ¸>>Il _Iç.. _¡º l¸,., ¸,.aIl _a>.
_,>± >ic _I| .¸¸> ¤I.I. _o ¤I>izIl ) integer .(
BOOL bSuccess;
int nTimes = GetDlgItemInt(hwnd, IDC_NUMBER, &bSuccess, FALSE);
¤IliIl ¤z¡o GetDlg!tem!nt() ¤s.l.Il ¤IliIl ¤z¡o l¡.s. _± GetDlg!tem() Vi.¸ ¤.l V|
¸s,.Il _I| ¤,¸o¸Il ¤I.I.Il _.. _o ) buffer ( ¤>,>± ¤z,º _I| l,I>l> l¡Iç>. l¡.|º ) integer (
:,I| ¤z,sIl i,a.¸ . ¤,.l,Iç. ¤z,º ç>. l¸.ço i>., 籸 l,¸l,.>l ¸..a, .Il.Il ¸.ol¸l.Il ) bool .( cl lz.º
¤z,sIl i,a. ¤IliIl 0 .I.º _.Il _± ¤IliIl ..lí l>| lo >i>, _,I> çl i>ç, V ¤.|º _.sIl ¤Il>
¤z,sIl .>lcl¸ 0 ¤z,sIl ei± _>>l çiIl ç± ,i>..zIl cl ¸l . e>lazIl ¤z,sIl ei¡I _l.¸. ..í l>|
:.Il li± _,¸, ¤oli>..l c|º V|¸ c>| ¸.ol¸l.Il li± Ulz±|. ,sº _.sIl ¤Il> .
_±¸ ¤ol± c¸>l ¤I,.¸ Lz.Il _.º _o iz.azIl ES_NUNBER _.Il¸ .lzî>.Il ¸,¸>.I
_o >licVl Ul>>|. _z.. 0 _I| 9 Lsº . i,> li± ,,º _Ic Uç±>Il _º Lsº :..c¸ ¤Il> _º li>
,,º _Ic Uç±>Il _Ic ¤.c¸Il ¤Il> _º l,i>o :I> ¸..a, V ¸>l ..l> _o _îI¸ ¤.>ço ¤>,>±
¤,¸.aIl ¤I±lsIl ¸l _ºl.Il e¸l.| çç>. ) ¤,¸.aIl ¤Ls.Il .(
,l ],|e|| Win32 API i,a|,s|| .|,Ll:|| · .|n:,. .|,,,l ,|,)|
www.c4arab.com www.winprog.org 47
.¡mII LIr;¡, :
籸 i,so ¸>l ,î>. >¸.Il ¿.¸o . ± _.l,º ,î>. ¸>l li ) standard control ( ¤I _¸a.l.
cVl .
_¸J, s±l±|
>ç.. ¤ºl±| ç± >¸.Il ¿.¸o ¿o ¤. ,çs. _zc U¸l ¤,I| .
int index = SendDlgItemMessage(hwnd, IDC_LIST, LB_ADDSTRING, 0,
(LPARAM)"Hi there!");
¤L,.. i> ¤z¡o ei± c¸. lzí . l,¡o >¸.Il ¿.¸o clí l>| Lz. _Ic LBS_SORT ) LBS==
ListBoxStyle ( i..Il c|º :I> ¸,c lol çi>.Vl .,.¸.Il ..> ¤.ºl±| ,.,. i,i>Il i..Il c|º
) item ( ¤z.lsIl ¸>l _º .l±,. .
i,a.. ¤Il.¸Il ei± _¸¡º i,i>Il i..Il ) item index ( Ulza..l l..îz,¸ ¤.s± ..lí lz¡o
I :I> .l.l,.Il _a. e>l..|í i,i>Il i..Il _ç±>. c¸>l ,l¡o _,s>. . l¡.l.o cçî, li± e>lc
lº ¸ao cçî, ¸l .loçIazIl _o i,iaIl çç>, _î,± _Ic ¸.çzI ) !D ( i..Il .,¸a.I ¤oi>... .,>. .
:,Ic ¸±.s, li± .
SendDlgItemMessage(hwnd, IDC_LIST, LB_SETITEMDATA, (WPARAM)index,
(LPARAM)nTimes);
.1¸l±.|1
¤z.lsIl _o >ç.. ¸l,.>l _o ,i>..zIl _,îz. ç± ,.lçsIl ¸¸i.±I ,laIl .i¡Il . V l.l,>l _îI
¸¸Il i>l. Ul.zîº ,i>..zIl ¤. ,çs, lz. _Il.. Remove ,lº _.o ¤º¸azI _l.>. V _>.º
¸¸Il _,as.. ,lº _.o _îI¸ .l¸,,a.Il .li>|. ,i>..zIl .
i,¸. l.l,>l ¸l .I.>o _î.. .l.l,.Il _¸c V.o _,>Il _º l,.l _aº _Ic l¸>lº cçî. cl
¸l.>zIl i..Il _Ic ¸î.¸. .loçIao .,i>. . _.l.¸ _.lso Lls.IV _l.>. :I> _asI ¸la.\l _.Il
,.lçsIl ¸¸i.± l.I l¡I.¸, . ¸la.\l. ,.¡.. l..|º ¤Il>Il ei± _º LBN_SELCHANGE ) LBN==
ListBoxNotification ( ,i>..zIl _.º _o l±¸,,a. ,. iº ¸l,.>Vl ¤,Izc cl. l.¸.>, _.Il¸ . ¸la.Vl
LBN_SELCHANGE _.º _o ¤Il.¸| ,., WN_CONNAND _.lszIl :I. _c .I.>, _.sz. _îI
¤z.lsIl >ç..¸ ¸l¸¸Vl ¿o l±l.,l¸ _.Il¸ ¸s.II .,>... _.Il . l ¸¸i.± c>| _.¸, ,.lçsI
WN_CONNAND l.o ¤.IL. çiIl .ILIl i,i>.I _.l. _,ºi.I _l.>. _>.¸ .l..l eiaI .
l,Ic ¤zIîí e¸,¸z. ,., ¸la.\l >çí ) H!WORD ( ¸.ol¸l.II wParam _o _.l.Il .±.Il
,î>.Il .¸ao l.,La, çiIl ¸.ol¸l.Il ) control !D ( _º _I¸Vl ¤..¸zIl .
,l ],|e|| Win32 API i,a|,s|| .|,Ll:|| · .|n:,. .|,,,l ,|,)|
www.c4arab.com www.winprog.org 48
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_LIST:
// ¸.... .¸± _¸.... [.., ¸.. ,.¸.. _¸... ..
switch(HIWORD(wParam))
{
case LBN_SELCHANGE:
// ¸.¸.>, _,..., ... ,.¸, ,.¸...
break;
}
break;
// ... ...:>.. ¯¸.,
}
break;
.¡mII ¿;¡, _, LIiI,; _Ir _gnnI
_o ¸l,.>Vl _Ic Uç±>II _l.>. l¡I,ia. ,. iº ¸l,.>Vl ¤,Izc cl l.º¸c cVl >¸.Il ¿.¸o
¤,Ic lo _zc l¸>|¸ .
_.a, >¸.Il ¿.¸o _º >ia.zIl ¸l,.>Vl .oi>..l li± l.Il.o _º ¤>.V _Ic Uç±>Il ) list (
¤L,.. ¤ci> cçî,. e¸l.>zIl >ç..Il çç>. . cl :IiI _sî,º >¸.Il ¿.¸o _º i,>¸ ¸l,.>l clí l>|º
Ul.¸|. ,çs. LB_GETCURSEL _Ic Uç±>II _¸¡º i..Il .
.>zIl >ç..Il >ic _Ic Uç±>II _l.>. V¸l ¸>>.. c>| e¸l ¸s,. ) buffer ( Ls>, e¸íliIl _º
_¸l¡sIl li± .
HWND hList = GetDlgItem(hwnd, IDC_LIST);
int count = SendMessage(hList, LB_GETSELCOUNT, 0, 0);
¸s,. ¸>>. .ºçIl _s. _º ) buffer ( _.¸, ,. e¸l.>zIl >ç..Il >ic _I| i...,
LB_GETSEL!TENS ¤ºçs±zIl _º l¡.IzI ) array .(
int *buf = GlobalAlloc(GPTR, sizeof(int) * count);
SendMessage(hList, LB_GETSELITEMS, (WPARAM)count,(LPARAM)buf);
//.....¸.¸.> . ¸¸.¸.. _. ..¸.... ¸.,, ,.¸..
GlobalFree(buf);
Ul.zIl li± _º buf[0| Il ç± _¸l¡sIl ¤,s. ¿o li U¸Vl _¸¡s buf[count-1| .
,l ],|e|| Win32 API i,a|,s|| .|,Ll:|| · .|n:,. .|,,,l ,|,)|
www.c4arab.com www.winprog.org 49
.l.l,.Il >l>,| ç± l¡. ,l,sIl l.Ilc i,¸. _.Il ,¡zIl _,. _o ) e¸l.>zIl ,,sIl çl ( _í ¿o ¤sº¸zIl
.l,IzaIl _a. l¡,Ic l¸>|¸ _¸¡º . c¸>l ¤Il.¸ Ul.¸| Lsº l.o¸I, ¤,i,Is.¸ ¤L,.. ¤z¡o ei± .
int data = SendMessage(hList, LB_GETITEMDATA, (WPARAM)index, 0);
¸>l ¿ç. _o ¤z,º .l> l¡,Ic _±>zIl .l.l,.Il ..lí l>| ) ,>>. _. çl 32 .. ( :,Ic .>,
l¸>| Lsº ç¸.sIl _,ç>.Il ) casting ( >i>zIl ¿ç.Il _I| .l.l,.II . Ls>. .zº l>| Ul.zí HB!TNAPS
,>±Il ¿ç.Il _o Vi. _ .
HBITMAP hData = (HBITMAP) SendMessage(hList, LB_GETITEMDATA,
(WPARAM)index,0);
4i5ImII LI¸5niII :
¸l ¤Iol. _¸¸iIl ei± cçî. cl .l. _o _îI .IlaIl _º ¤ol± ¸..a. V ¤.íl.Il .lzî>.Il
l.± l¡>l¸>|. .zº iº _.|º ¤.,ao c¸>l _l¸cV . l¡.V ¤.íl. l¡.l. .s±¸ _ç±.Il _¸a. V| ,çs. V
,i>..zII . i,>¸ .¸ao l±>l..| UV> _o loli>..l ¸.íl l¡Ia>. cl ¿,L... :I> ¿o ) unique !D
( ) _. Uç>,sIl ++ .¸azIl l±¸º l¡I i.., !CD_STAT!C ¤z,sIl ¤.l> i> _º ç± çiIl¸ - 1 çl
_.a. l¡.l " .¸ao V - No !D ( " i,s..Il .º¸ _.Il _a> _Il.Il.¸ ) at RunTime ( .l.l,.Il _¸a,
,i>..zII ¤,î,ol.,iIl .
l¸..ao ,.lçsIl ¸¸i.± _o ¸l.>zIl i..Il .l.l,. _¸aI l±li>| .oi>..l _.Vl Ul.zIl _º
e¸l,.>l ,. Lsº i,>¸ i.. >¸>o ¤.l :I> _º .
SetDlgItemInt(hwnd, IDC_SHOWCOUNT, data, FALSE);
,l ],|e|| W|11I k|| |:,,a i|:aX| ,ìL|
www.c4arab.com www.winprog.org 50
X! ¸[q3[ [|s Q J|.æg[ ¸î@|
|¿q¿æ .Q
_º¸zIl Ul.zIl three - dlg
ei.lsIl ,a.I l.± l¡>l¸>| .,l.¸l li¡I ¿ç±çzIl li¡. _Ia.. ¤I..l .>¸L lo l¸,.í .
_IgIyI p,ri :
,. lo l>| :>ol.¸. cV _.lzo _. çl ¸l ¸lç>Il ¿.¸o _º ¤I±¸ ¿±. cl i,¸. ¤olc ¤s±.
Ul.zIl .a±¸ l.,. ¸,±,. ¤.|º clçIVl _o ¤ºl.. ¤ºlº¸| ¿.z, ,I li± _îI _,oi>..zIl _,cl _º
¤Iç.so ¿ºl¸> :I> _º ,¡I¸ :Ii. ,l,sIl _o _,>o¸.zIl _o i,iaIl .
:.iºl. l¸>| _I| clçIVl. ¤sIa.zIl _.l.¸Il _o ¤cçz>o Ul.¸|. ¸¸i.,¸ ,çs, :Lls.Il.¸
_îz.. iº :.|º _.l.¸Il ei± _.lszI ¤±¸¸azIl l,.Vl clçIl ¸,,a. _o . ¿.¸o cçI ¸,,a.I Ul.zí
¤Il.¸Il Lls.Il :.îz, ¤.|º ¤.s. ¸lç>Il WN_CTLCOLORDLG ,î>. cçI ¸,,a. i,¸. ..í çI lol
¤Il.¸Il Lls.Il. .IlLo :.|º _íl. WN_CTLCOLORSTAT!C l¸> ,I±¸ ...
VI l¡Ls>. ,. ¤,sI>Il _,çI.I el.¸º l..| :.îz, V¸l ls>V Ulza.. . ¤Il.¸Il
WN_CTLCOLORDLG _o ¸,.í _º _ol.¸.Il _zc l..l l±lci..l ,., l¡. ¤sIa.zIl _.l.¸Il ¤,s.¸
_o ¿ç.Il li¡. l¡ºl¸c| ,.,. e¸íliIl c|º ¤,Izc _í i.c el.¸º l..|. .zº lo l>|¸ cl,>Vl
.l¸,a.zIl . >ol.¸. _º ¸.íl ,î>... l..|º U¸Vl .çI.VI l.>l¡..l. ,., lzI el.¸sIl .i> l..îz,¸ l.
.ºçIl :I> _º l¡>l.>. _I l..l .,> ¸lç>Il ,i± .
HBRUSH g_hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
case WM_CTLCOLORDLG:
return (LONG)g_hbrBackground;
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC)wParam;
SetTextColor(hdcStatic, RGB(255, 255, 255));
SetBkMode(hdcStatic, TRANSPARENT);
return (LONG)g_hbrBackground;
}
break;
.ls. _î. _º ¤,sI>Il _a>, çiIl ¸L.Il _I| ¤...l ... c|º ¸L.Il li± Uçaso .IL.l l>|
s, lzI _îI ..l l±>i>. _.Il el.¸sIl. l¡.Io ,.,. ¤,sI>Il ¤..î,. ¤.|º _.Il ¤.l.î. ,î>.Il ,ç
,l ],|e|| W|11I k|| |:,,a i|:aX| ,ìL|
www.c4arab.com www.winprog.org 51
¤,sI>Il cçI. ... ¤,Ilî.\l ei± _>, .ls.Il ¿±çIl _º ..î, _.Il _a> c>| . ç± ¸>Vl ¸l,.>Vl
¤,sI>Il cçI _za. ,l,sIl SetBkColor() ¸.íl _>Il li± _±ºl _..îI el.¸sIl cçI _s.. .
_s.. c¸>, c¸>Vl ¤,.l,sIl .lzî>.Il .IcV clçIVl ¸,,a. ¤Il.¸Il _I| ¸L.l Lsº e¸,.çIl
¿ç. _o WN_CTLCOLOR* _,çIl _,I> _º 32 . cl L>V ¸,¸>.Il ,î>. ) edit ( ¿ç. _o ¤Il.¸ _.¸,
WN_COLORSTAT!C Lsº el¸sII clí l>| ) Read Only ( ¿ç. _o¸ WN_CTLCOLORED!T _î, ,I l>|
:Iií .
º ¤.çI ¸,,a. >ç. çiIl¸ _íl. ,î>. _o ¸.íl :,iI clí l>| .¸azIl _º _,ºi.Il. .IlLo :.| )
!D ( :.l .,> .¸azIl li± _Ic l>lz.cl ¤.çI ¸,,a.. ,çs.. :.V ¤Il.¸II ¤Il.¸| l..l ¤. _l>Il
¸¸z. HWND ¸.ol¸l.Il _º ,î>.Il. _l>Il lParam ,li>..l UV> _o ,î>.Il .¸ao _Ic _±>.¸
¤IliII GetDlgCtrl!D() . ¤.íl.Il .lzî>.Il cl _... V .¸azIl. l±¸º l¡s,¸a. ,., !DC_STAT!C
) ¤z,sIl çl - 1 ( >¸çzIl ¸¸>o _.º _o ..lº _a. _c l¡±a. .,.±. _º .c¸. ..í l>| c>|
ei,>¸¸ ei,i> .lº ¸ao l¡I _±>. cl. ¤Il>Il ei± _º .IlLo .
4igíjÌ; jIgnI ijgji
_l.>. li> ¤L,.. ¤z¡o ¤Il.¸Il Ul.¸\ Lsº WN_SET!CON :¸lç>I . ¸¸i.,¸ cl lz.
_º ¤±¸¸azIl e¸,a±Il ¤.çs,VI ei>l¸ _,.¸o lz±lci..l. ,¸Io ..l c>| lao _,..çs,l _za..,
_Ic La±Il ,., lzI ¸¡L. _.Il e¸,.îIl ¤.çs,VI c¸>l¸ ççIaIl ¸.,Vl _í¸Il Alt+Tab . Lsº :.îz,
¡.o _îI _.szIl _s. Ul.¸| ,>>Il _º _,.sI.>o _,..çs,l _Ic :¸ºç. ¤Il> _º V| lz .
¤.çs,l >lic\ ) icon ( ¤,±l¸.ºVl _ol.¸.Il ) default ( _.Vl >çîIl Ulza..l :.lîo|. ¤.|º Lsº :
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,
MAKEINTRESOURCE(IDI_APPLICATION)));
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL,
MAKEINTRESOURCE(IDI_APPLICATION)));
¸.ol¸l.Il ¸,a. cl. _... Vº ¤,±l¸.ºl cçî.I :..çs,l >¸ço Ui.. lzI H!NSTANCE ¤IliII
Load!con() _.sz. ) handle ( :. _l>Il _,.L.Il ) ¤IliII :.lci..l. ¤,Ic Uç±>Il :.îz, çiIl¸
GetNoduleHandle(NULL) ¤IliIl _º l¡Ls>. ,s. ,I l>| WinNain() .(
IøiÌmiÌ _íII 4Iimi¸I 4¸IIíII _¸ri y I.I¸ °
_l¸>|. cçoçs, _,iIl _,>o¸.zIl .Icl _,. ¤a.l. ¤Iî.o ¤Ii..o ,.lçº ,¡.l¸lç> _º
_s.Vl _I| ¸,.zIl ,¡.Il _Ic c¸¸s., lzI .l,ç.>zIl _¸a. V l¡.l. c¸l>ls., ,¡.îI ) .Vº\l ¸¸ .(
l,.i> lLl.. _,I _>Il cl lz. ¤oç¡so ¤Iî.zIl ei± .
. lzI ¤Ii..o ¤z.lº _.. ) combo box ( _La. :Ii. :.|º ¤. _l>Il ¿ls.¸Vl i,i>.. ,çs.¸
_c _.l.Il cç.>zIl ¤,º lz. ¿.¸zIl _îI lcls.¸l drop - down ¤ºl.L| ,., lzI ,î>.Il ¿ls.¸l _,I¸
,i>..zIl L>Il ,>> ¸l..cVl _º li>l ,lL.Il _.º _o ei,i>. ,., çiIl¸ .
,l ],|e|| W|11I k|| |:,,a i|:aX| ,ìL|
www.c4arab.com www.winprog.org 52
I lLc|. .zº çI Ul.zí ¸is. lcls.¸l ,î>.I 100 ¤.s. ,î>.Il ,>>, ,lL.Il c|º _.î.
¤,±l¸.ºVl ¤z,sIl. ) _s.I 30 ¤Il>Il ei± _º ( ¤>.VIl c|º _Is.Il ¸¡.Il _Ic ¸s.Il. ,çs. lzI¸
,>>. cçî.. ¤Ii..zIl 70 ¿ls.¸Vl _±l> cçî, çl _.î. 30 + 70 = 100 _.î. .
sIl. _l>Il >¸lçzIl ¸¸>o ,i>... ..í l>| _. Uç>, ++ >¸. ¿.¸o ¿±çI ) list box ( _º
l,>çzc ¤z,>>. _Ic :.¸iº ,ia. :oVc| ,.,. ¤.|º ¸lç>Il ) l,Içºl. .( ,¡.Il _Ic .¸s. l>| V|
,,>>.. ,çs. :.l _I| ¸,.,I _,L..zIl ¸ç>o ¸,a.,.¸ ¸¸>zIl _º ¤>.VIl :.îz,¸ ¤Ii..zIl
Vl .... cl. l¡.l..l i,¸. _l,º çl. ¿ls.¸ .
°_¡nyI LI¸5niII 4,í; _gnµ I.I,
.i>¸ li± _>V _îI ,î>. _í _c Ul.o lLc|. ,çºl cl _Ic .>, clí NSDN ¸ Petzold
¸l _,IiIl li± l¸>l _o l±a. el¸º i,a. cl :I _.>.., ¤.|º l¡oli>..l ¤s,¸L .cç... ,I l>|
¤Ií ) _.>Vl ç± li±¸ ( Ic _±>. cl ¸l l¡>¸. _º _za.. ..í _ .
¤..îo _º ¿ç±ço _í clç.a. :>¸¸l cl _.>Vl _o clí NSDN _a. ¸,a.I l¸L. _îI
¤..îzII _z.¸Il ¿ºçzII :¡,>ç.. _s.íl _..|º l.l,>l l¡±a. .ºç.I l¸L.¸ l,¸¸> .l,ç.>zIl MSDN
Windows Controls - .>.Il .,Il.l. ¸.íl lzIo cçî. cl .>, Lsº ¿ºçzIl _º ¸l>.\l :.îz, ¤,º¸
,i>..zIl ¤¡>l¸ .loi>í .l.,ç..Il UV> _o l±,l¸ ¿,±lçzIl _c User !nterface Services
¸¸i.,çIl .lzî>.¸ Windows Controls .Ilc _l.> _º l Platform SDK .
,l ],|e|| Win32 AP! |,Ll .|a:| æ,s::|| .s, .
www.c4arab.com www.winprog.org 53
¦,,, _,,L. .l|.[
! Q¡g[ .¸3[ . ¸¿ni.i[ ¸g¡ ¸|,@l .|æi[
_º¸zIl Ul.zIl : app_one
_.Il¸ _I¸Vl l..çL> _La.. ¤>s±Il ei±
¸,¸>. ,î>.¸ eiºl. l..| ¤,Izc ¤Ll... cçî.. ) Edit
control ( . ¸í¸o _º cçî,. çiIl l..iºl .
L,.. _,.L.I ¸l,.>l. l.>ol.¸. ¿o l..,li. cçî..
¤z,Ia.Il ¤.oiso _º çç>, #define .¸az. _,¸±.II
l.zî>. ) control !D ( ,., _,.Il.¸ _±.szI _l¸>|.¸
eiºl.Il l¸>| cç..o _Ic lz¡a±¸ .
#define IDC_MAIN_EDIT 101
case WM_CREATE:
{
HFONT hfDefault;
HWND hEdit;
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL|
ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT,
GetModuleHandle(NULL), NULL);
if(hEdit == NULL)
MessageBox(hwnd, "Could not create edit box.", "Error",
MB_OK | MB_ICONERROR);
hfDefault = GetStockObject(DEFAULT_GUI_FONT);
SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault,
MAKELPARAM(FALSE, 0));
}
break;
case WM_SIZE:
{
HWND hEdit;
RECT rcClient;
GetClientRect(hwnd, &rcClient);
,l ],|e|| Win32 AP! |,Ll .|a:| æ,s::|| .s, .
www.c4arab.com www.winprog.org 54
hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
SetWindowPos(hEdit, NULL, 0, 0, rcClient.right,
rcClient.bottom, SWP_NOZORDER);
}
break;
LI¸5n .Imi| :
,Izc ¸,.í i> _I| ¤... .lzî>.Il l..| ¤,Izc ¤IliIl ,li>..lº iºlç.Il l..| ¤
CreateWindowEx() ¤Il>Il ei± _º >¸l¸ . ¤.º cçî.. li± l.Il.o _º ls..o ¤I>.zIl l...º ¸¸z.
) class ( ¸,¸>.Il ,î>. ) ED!T ( ¤,.l,º ¸,¸>. ,î>. eiºl. _Ic _±>..¸ . .l¸lç>Il ,i>... loi.c
.Il _o ¤Iz> ..î. ¤s,s>Il _º _>.º l..lzî>. l..\ ¤IliIl _ci... ,. l±l..| .>lçIl .lzî>
DialogBox() ¸l CreateDialog() _Il.Il.¸ ¸lç>Il >¸ço _º .lzî>.Il ¤>.V el¸s. ,lL.Il ,çs,º
¤IliIl _ci.., CreateWindowEx() ¸ ¿ºçzIl _Ic ¤Lºl>zIl ¿o ,î>. _îI Lz.Il ,. çiIl
_º lz¡. _,¸±.Il >¸çzIl .
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
WS_HSCROLL | ES_MULTILINE |ES_AUTOVSCROLL |
ES_AUTOHSCROLL,0, 0, 100, 100, hwnd,
(HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL),
NULL);
if(hEdit == NULL)
MessageBox(hwnd, "Could not create edit box.","Error",
MB_OK | MB_ICONERROR);
¤IliII lci..Vl li± cl .L>V :IaI CreateWindowEx() ¤.l¸ Llz.Vl _o i,iaIl. l¡±> iº
¤±l>¸ :I> _o ¸.íl >i>. cl l.,¸c _,I ¤a.l.Il .lzî>.II .l¸l,.>Vl¸ Llz.Vl. ¤,.aIl . Llz.Vl
¤a.¸Vl WS_* ,Vl l..iºl.I _.l ¤.l _l.l _Ic l.zî>. l..|. ,çs. _>.º ¤>±l¸ cçî. cl .>,
ç>çzc¸ _sºl ¸,¸z. _L,¸. :Iz,¸ l¸±lL cçî, cl ei,¸. _>.º .
.lzî>.I ¤±±>o Llz.l ¤.V. ED!T ) ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL (
,î>. _Ic .>, l.Il.o _º ,î>.Il ¤.,± .±. _.Il¸ ED!T ¿o e>ia.o _ç±. ¸L.l çç>, cl
,î>.Il cç.>o _Ic l>lz.c| ¤,Il ¤s±. ç>çzaIl¸ _sºVl ¸,¸z.Il _L,¸. ¸l¡L| .
¤,.l,sIl eiºl.Il Llz.l ) WS_* ( l±i>. l.± ¤a.çzIl eiºl.Il Llz.l¸ ) WS_EX_* ( l±l¸.
¿>¸zIl _s.l () CreateWindowEx Il ¤..îo _º NSDN ç>. .V±¸ i>.. :Iií ¿ºçzIl li± _º¸
,î>. _î. ¤±l> Llz.l ) ES_* ¸,¸>.Il .lzî>.. _Ia.. l.Il.o _º .(
.l ¤.l. l..iºl. _.so l.s±¸ isI ) parent ( ¿ç. _o .¸ao ¤I l.i..l¸ el.l..l çiIl ,î>.II
!DC_NA!N_ED!T . ,î>.Il _I| e¸l.\I ls>V ¤oi>.... çiIl¸ .zº :.l çI .i>, lzí lolz
¸lç>Il _º ,î>.Il li± l..|. ) ¸lç>Il ¿.¸o .( l..V .ºçIl li± _º l.z¡. V ,>>Il¸ ¿ºçzIl .l¸.ol¸l.
¤Il.¸Il ¸.c l,î,ol.,> :I> i,i>.. ,çs.. WN_S!ZE ¿o l..iºl. .,,î.. e¸z..o e¸ç±. ,çs. _.Il¸
i.l.Il ¿±çIl .
,l ],|e|| Win32 AP! |,Ll .|a:| æ,s::|| .s, .
www.c4arab.com www.winprog.org 55
,5,,Iij. ñÌmi¸I LI¸5niII u,ini _µnI Lmn I
>çí _l¸>\ l¸L±o cçî.. ¤Il>Il ei± _º :.|º ,>>Il _,ia.I ¤I.lº :.iºl. ..lí l>| ¤olc
l¡.>l.o _Ic ¤L...zIl .lzî>.Il ,l>>l _,ia.. _z., .
GetClientRect(hwnd, &rcClient);
hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
SetWindowPos(hEdit, NULL, 0, 0, rcClient.right,
rcClient.bottom, SWP_NOZORDER);
e¸,., lo lcç. cçî.. ¤z¡zIl c|º Lsº li>l¸ lzî>. :Iz. l..l lz. . ¤IliIl :IiI ,i>....
GetClientRect() l..iºl.I _,zaIl ¤sL.o >la.l. l.>¸¸.. _.Il ) c¸> _o eiºl.Il. ¤±l>Il ¤>l.zIl
_.lç>Il¸ .l,z..Il¸ ,.lçsIl _l¸>| ( i± .l.l,.Il Vz.. ¤IliIl e ) data ( _º _î,¡Il RECT cl.z,sIl
left ¸ top lz.l> cl,ç>.. 0 cl.z,sIl cçî.. _,> _º lz¡I±l>. _îz, li¡I right ¸ bottom
_,zaIl ¤sL.o ¿ls.¸l¸ _¸a. _,.>¸¸o .
l.zî>. _.so _I>... l±ia. ) ,î>. edit ( liIl UV> _o ¤I GetDlg!tem() _za. _.Il¸
¤IliIl _ci... ,. .l¸lç>Il ¿o ¸l ¤,.l,sIl iºlç.Il ¿o lç. _.Il _s. SetWindowPos()
_,zaIl ¤sL.o _olí ..l., _.> ,î>.Il ,,>>.¸ :,¸>.I ) Client Area .( ,,sIl ¸,,a. :.îz, la.L
¤IliIl _I| e¸¸zzIl SetWindowPos() ¤>l.zIl .±. Lsº ¸>> _o V.o _îz.II ) .±. ¸¸z. loi.c
¿ls.¸Vl ¤z,º ( V.o c¸>l .lzî>. ¤ºl±\ ¤,.l.Il ¤>l.zIl UVa..l l..îz, _.> .
í,íiiII Lõg _¡nÌ LI¸5n .Imi|
¸ ¸l¸¸Vlí l,î,ol.,> c¸>l .lzî>. l..| ¤,s,îI ¤I.ol ,,is.. ¤Il>Il ei± _º ,çºl _I .la.¸o
>¸. ... lo l>| _îI ¸,¸>.Il ,î>. ¿o l±l.a..l _.Il .lçL>Il _s. _Ic iz.a.. ¤Ll...¸ ¤.V
Il ¤..îz. ¤±l>Il¸ ls.l. l¡,I| .¸.l _.Il ¤I±çIl .a>l¸ NSDN Ul¸i. ¤±l>Il ¿>l¸zIl _º _.> ¸l
_,çIl 32 ¤o¸VIl .loçIazIl _Ic _±>.. ¤Il>o V :.|º ¤,.l,sIl .lzî>.Il _o ¤Iz> l..\ .
¿o ¤,IzaIl _s. _I| _,,.Vl _,I±sIl _º ¸¸L... ¤a.l.Il .lzî>.Il ) common
controls ( l¡º>l±.. _.Il ¤I.oVl _,.L.I lia..o _í c>| .
,l ],|e|| Win32 AP! in:|a|| .|,|,l|, .|s||| ,|e±:a|
www.c4arab.com www.winprog.org 56
!! Jos|æi[ ¸[¸[q3[¡ ¸|n|][ ¡[¸l.æ[ .
_º¸zIl Ul.zIl : app_two
4rIImII LIíI¸I LIjIgn
ç± lo .Io Ls> ¸l _.sI _I¸Vl eçL>Il
¤oli>..l >l¸zIl .IzIl ,.l _Ic Uç±>Il ...
>çí _z± e¸.l.o ,.Vl _l¸>| _îz, la.L
e¸.î. _za..o ¸,c ¿ºlçIl _º li± _îI _ol.¸.Il
¤.¸¸o _ºl ¤Ia>,¸ _ol.¸.Il ¤z,º _o _Is, ¤.l lzí .
. >lî. ¤z¡zIl ei± cl lz. ¤í¸..o cçî
_îz. ls..o ¤º¸ao .l¸lç> .i>¸ ¤.|º
¤I çI>, çiIl .IzIl ,.l ¸l,.>l _o ,i>..zIl . _.s. ¤sIa.zIl :I. _± e¸ç¡.zIl .l¸lç>Il .Icl
_,.IliIl UV> _o l¡,I| Uç±çIl _îz,¸ .lsIzIl Ls>¸ GetOpenFileName() ¸ GetSaveFileName()
i>.. _,.IliIl l.Ií .,.¸.Il _Ic _î,¡Il OPENF!LENANE l¡I ¸.ol¸l.í .
OPENFILENAME ofn;
char szFileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn); // SEE NOTE BELOW
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "Text Files(*.txt)\0*.txt\0All Files(*.*)\
0*.*\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrDefExt = "txt";
if(GetOpenFileName(&ofn))
{
// Do something usefull with the filename stored in szFileName
}
¤IliIl lci..l. l.zº l..l L>V ZeroNemory() li..Vl _>l _o ) UV¡..Vl ( ¤z,sIl. 0 . li±
Il Ul¸> .Icl _c .¸¸ao ç± lzí ¤.V e>lz.cl. _±.,¸ i,> _>o¸. .çI.l AP! el>.l ¤s,º> l¡.l
¤o¸iazIl ¤z,sIl. ¤.i..o ¸,aIl _íl,¡Il l±cl ) 0 ( ..l. ,¸Io ¸,c cçî. .çI.Vl li¡.º _î,¡Il ,,º li
ci> _Ic _í .
_í i±so ¤º¸azI eicl.zIl .lsIo ¸l _.l.çIl ¤aIlLo :.îz, ç±c ) member ( l±cl _o
_î,¡Il . ç±aIlº lpstrFilter _Ic ¸.ç, .¸¸> ¤I.I. _¡... _Il> .,l.. l±o ¤L>Vo :.îz,¸ .c
_o i,iaIl i>lç. UV> _o Ul.zIl _º :I> ` \0 ´ l¡.,l¡. :I> _º lz. ¤I.I.Il _o ¸> _í _º ...
l±ia. ,çs, .¸±zIl ) compiler ( _í ¿o :Ii. ,çs, lzí ¤I.I.Il ¤,l¡. _º ¸>l _Il> .,l. _l¸>|.
,l ],|e|| Win32 AP! in:|a|| .|,|,l|, .|s||| ,|e±:a|
www.c4arab.com www.winprog.org 57
¤..l.Il UV.Il ) \ l¸L±o ..I _.Il¸ :.s.. l¡,I| _Il>Il .,l.Il ¤ºl± .( ei± _º ¤,Il>Il .l.,l.Il
_º ,l.ºl _I| l¡z.s. ¤I.I.Il .l>.¸zIl ) Filters .( U¸Vl ¸>Il _,l¸> _o .í¸o ,.º _í¸
.IzIl .±¸ _.z, " : Text Files (*.txt) )" _>l _o _. lL¸¸.o _,I .±çIl li± _º ¿.ç.Il cl L>V
_,±ç.Il _a. ¤ºl±| ( Il. :Iií ¤.çz., çiIl¸ ¿ç.Il li± ¿.ç. _>, 硺 _.l.Il ¸>Il lol wildcard
l.Iza..l U¸Vl _,.¸.IIº " *.txt ." l....l ¿o _îI _.l.Il _,.¸.Il ¿o _zaIl _s.. l.zº :Iií
.lsIzIl ¿lç.l _í _>, ¿.ç.Il cl 籸 L,.. . Il ¿o _îI c¸>l .l>.¸o ¤ºl±| :.îz, _Ic ¤Lºl>z
l¡..l.í .çI.l .
¸.çzIl lpstrFile _Ic ¸.ç, ¸s,.Il ) buffer ( çiIl el.¸>> cl lz.¸ .IzIl ,.l ¤,º Ls>.I
¸liso cia., cl ¤I _îz, V ¸,>Vl li± NAX_PATH zIl li± c|º ¤oli>..l. l.zº çiIl ç± ¸lis
ç¸íliIl ¸>>Il l..l ) dynamic allocation .(
.l,l¸Il ¤.îz, V¸ ls> e>ç>çzIl .lsIzIl _.s, cl. ,i>..zII Lsº _z., ¸lç>Il cl _.a.
¿±¸ _º e>ç>çzIl .lsIzIl cl lzí ei,i> .lsIo l..| Lsº el¸sIl l±ls>| ,.,. _ola.. _I l..V
l¡ao . .¸azIl ¿.ç.Il ¸,¡>.. ,çs. l¸,>l l±¸º ,.Vl ¤.l.î. V.o ,i>..zIl ,lº l>|º " Test " ,I¸
.IzIl _c _ol.¸.Il .>., l±ia.¸ l±¸º .¸azIl ¿.ç.Il _l¸>| ,.,. ¤.|º l>ç>ço _î, " Test.txt ."
V ,., Lsº V.lzo cçî, >lî, :IiI _o¸.zIl >çîIl c|º ¤>.º _o Ui. .Io Ls> ¤,Izc ¸l,.>
¤IliIl .IL GetSaveFileName() ¤,l¸Il _,ia. _I| _l.>. lzí ) flag ( ¸.íl .l¸l,.>l _Ic Uç±>II
_.º _o .IzIl i>lç. L¸.., V clí Ls>Il ¤,IzaI ¤oVo .
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT;
_Ic _,¸ºç.o cçî. cl _Ic _,¸.>o ¸,c _>.º Ls>Il ¤,Izc _>. _.Il¸ ¤Il>Il ei± _º
.IzIl. _l>Il ¸l.o _Ic ¸ºç.Il _Ic _,¸.>o l..îI _.sIl ¤,Izc ¿o Ul>Il clí lzí _.º _o .Io
..|. ,s. ,I çiIl¸ iI>o ¸>l ¤,º lz. _.º _o ¤.l . ¸l,.>l. ,lº lo l>| ,i>..zIl .>... l..l lzí
¤ºçº ¤.l.îIl ¤,Izc ,.. _.> ls..o >ç>ço .Io ) OverWriting ( ..
LIíI, 4;Ii5g ñ.I¡õ
..> li±¸ l¡,º ¤.l.îIl¸ .lsIzIl _o el¸sIl .l¸,o _o i,iaIl i>.. ¸¸i.,çIl ,lL. ¿o
.IzII l.>l¸>|.º ¤oi>..zIl ¤..îzIl " io.h " ,li>..l :.îz, read() ¸ write() .IzII :>l¸>|. lol
" stdio.h " Ul¸iIl .,Lç. _Ic l¸>lº cçî.. :.|º fopen() fread() ¸ fwrite() _za. ..í çI lol
_.Il Ll.. _Ic ++ .IzIl _º e¸ºç.zIl Ul¸iIl ,li>..l l±i.c :.îz,º " iostream.h " .
_,çIl ¤.,. _º _í _Ic 32 lci..l :.îz, e¸ºç.zIl Ul¸iIl. _zaIl. ,çs. cl ¸l Ul¸iIl ei±
¤..>zIl¸ . ¤IliIl ,li>..l :.îz, .Io _.sIº OpenFile() ¤IliIl ¸l CreateFile() . e¸,>Vl ¤IliIl
lo .Io _.º _>V .lzî>.Il. ¤,.c¸ ¸.íl ¤ºçs.o .
ñ.I¡íII
¤IliIl Vza..o .IzIl _.º ¤,.lîo| ,i>..zII .,Lcl :.l V.o _¸s.I
GetOpenFileNAme()
,l ],|e|| Win32 AP! in:|a|| .|,|,l|, .|s||| ,|e±:a|
www.c4arab.com www.winprog.org 58
BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
Hfile= CreateFile(pszFileName, GENERIC_READ,FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
LPSTR pszFileText;
PszFileText = GlobalAlloc(GPTR, dwFileSize +1);
if(pszFileText != NULL)
{
DWORD dwRead;
if(ReadFile(hFile, pszFileText, dwFileSize,
&dwRead, NULL))
{
// Add null terminator
pszFileText[dwFileSize] = 0;
if(SetWindowText(hEdit, pszFileText))
bSuccess = TRUE;//It worked!
}
GlobalFree(pszFileText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}
¸,¸>. ,î>. _º _±. .Io el¸sI ¤Iolí ¤Il> i>ç, ) Edit .( ,î>. _.so l¡I .l¸.o¸l.í i>..¸
¤.l¸º >l¸zIl .IzIl ,.l¸ ¸,¸>.Il . ¤,Izc¸ lL>Vl _º _,ºi.II V,z> l.çI.l :I.z. ¤IliIl ei±
l¡>,I±.¸ lL>Vl ¤,cç. ¤º¸azº li¡I _,¡Il _.Il. _,I lo .Io .l.l,. ¤.l.í ¸l el¸º _º ¸ol ç±
¤,z±Vl ¤,lc .
¤L>Vo : ¸,a.zIl dwRead ¤IliIl cV V| ¤Iza... ,I ReadFile() ¤.¸> _o¸ e>ç>¸ L¸...
¤IliIl ei± lci..l _.s,. .
¸,a.zIl GENER!C_READ ¤IliII l..lci..l _º CreateFiel() _I| Uç±çIl Lsº i,¸. l..l _.a,
el¸sIl ¤,Izc . F!LE_SHARE_READ ¤.l _.a. l..l .IzIl _s. _º c¸>l _ol¸. ¤í¸l.o l..îz,
¤,Izc _¸lz. _>. cçî. lzI ¤.l.îIl ¤,Iza. ,çs. cl _ol¸.Il ei± _o i,¸. V¸ Lsº el¸sIl ¤,Izc
el¸sIl . ¸ OPEN_EX!ST!NG l>| el..| :Ii. ,., _I¸ l>ç>ço clí l>| Lsº .IzIl _.º ,., ¤.l _.a.
_î, ,I .
,l ],|e|| Win32 AP! in:|a|| .|,|,l|, .|s||| ,|e±:a|
www.c4arab.com www.winprog.org 59
sIl ¤,Iza. l.ol,º ia. ¤IliIl cl _o l.iíl.¸ _. CreateFile() _ºi.. l..|º l¡.z¡o _º .>>.
.IzIl ,>> _º ¸>>.I ¤aº> .IzIl cç.>o _olí el¸º _º .c¸. isº ¤I _sî. ¤,¸íl> ¤>l.o
ei>l¸ . ,. _l>.. .z. ¸>>Il ¤,Izc cl _o iíl... lzí e¸íliIl ¸>> ¤,Iza. ,çs. c>| _ci...
¤IliIl l±ia. ReadFile() ç¸íliIl ¸s,.Il _I| _¸sIl _o .IzIl cç.>o _,z>.I ) buffer ( çiIl
:IiI el.±±> .
Il Ul¸> AP! ¸L. el¸s. ,çs. _I _¡º ¤,±.Il .lsIzIl Uç> e¸îº l¡I _,I .lsIzIl. ¤±l>Il
¤ºl±| ¸l _.Il _o _Il>Il .,l.Il ¡. _º ¤,l ¤,¸o¸Il ¤I.I.Il . _ºl±| .,l. ¸>>. l.zº ...Il li¡I
¸,¸z. :Ii. l..îz, c>| l..s.l. _Il>Il .,l.Il _l¸>|. l.zº .IzII l..l¸º ia.¸ ¸s,.Il ¤IliIl _I|
SetWindowText() ¤.l _Ic I. .¸¸> ¤I. .
¤z,sIl >l..|. ,çs. l..|º _. _í _>. l>| TRUE ¸,a.zII bSeccess e¸íliIl ¸¸>. ,.
l..lci..l. .olº _.Il ¤IliIl _I| >ça. cl _.º _ç.szIl .IzIl _Ia.¸ e¸>.>zIl .
4;Ii5II
BOOL SaveTextFileFromEdit(HWND hEdit, LPCTSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwTextLength;
dwTextLength = GetWindowTextLength(hEdit);
// No need to bother if there's no text.
if(dwTextLength > 0)
{
LPSTR pszText;
DWORD dwBufferSize = dwTextLength + 1;
pszText = GlobalAlloc(GPTR, dwBufferSize);
if(pszText != NULL)
{
if(GetWindowText(hEdit, pszText, dwBufferSize))
{
DWORD dwWritten;
if(WriteFile(hFile, pszText, dwTextLength,
&dwWritten, NULL))
bSuccess = TRUE;
}
GlobalFree(pszText);
}
}
CloseHandle(hFile);
,l ],|e|| Win32 AP! in:|a|| .|,|,l|, .|s||| ,|e±:a|
www.c4arab.com www.winprog.org 60
}
return bSuccess;
}
.lsIzIl _º ¤.l.îIl ¤Il> el¸sIl ¤,Izc _º iz.azIl _.l.Il l.>çîI ,lz. _.lzo >çîIl li±
.V,ia.Il _a. çç>. . ¤IliII lci..l. ,çs. lzI _. _í _.º CreateFile() i,¸. l..l _.a. l..|º
li,i> ¸,±,. .IzIl cl :I> _.a,¸ .IzIl _º ¤.l.îIl ) ç>o ,.,.º ls..o >ç>ço clí l>|¸ elç.>o (
¤,>lc _.l±>.¸ _,>Il _º el..| ,.,. ¤.|º _.º _o l>ç>ço _î, ,I l>|º .
¸s,.Il UçLI _l.>. ,. ) buffer ( e¸l..cl. ¸,¸>.Il ,î>. _.º _o .l.l,.Il Ls>I ¸>>,. çiIl
.IzIl _º l¡I,>.. .>lçIl .l.l,.Il ¸i±o . .¸¸>Il ¤I.I. _I>... l..|º ç¸íliIl ¸s,.Il ¸>>. lzI
î>. _o ¤IliIl :I> _º _,oi>..o ¸,¸>.Il , GetWindowText() _,¸L _c .IzIl _º l¡..î. ,.
¤IliIl WriteFile() . ¤,Izc .l¸o >ic i,a, çiIl ¸.ol¸l.Il c|º el¸sIl ¤,Izc ¿o ,. lzí¸ c¸>l e¸o
¤oi>... ,I l..l ,c¸ .l¸.ol¸l.Il ¤z.lº _z± l>ç>ço cçî, cl .>, ¤.l.îIl .
,l ],|e|| Win32 AP! i||l| L,,a, .|,eX| L,,a
www.c4arab.com www.winprog.org 61
!!! ¡i|îi[ .¸3[ . Ji|3[ ]¿¸æ¡ ¸[¡¸g[ ]¿¸æ
_º¸zIl Ul.zIl : app_three
LI¸5niII _gn 4¸ø, 4hny,
4rIImII
_í ¿o _as. lzí ¤a.l.Il .lzî>.Il .>,
¤IliIl lci..l lz.l> !nitCommonControls() _.º
l¡oli>..l ¤I¸l>o . .Io _l¸>|. ,çs. cl .>,
_l¸Il > commctrl.h < ei± Ulza..l _o _îz.II
¤o¸VIl .l>,¸±.Il¸ Ul¸iIl _Ic Uç±>II¸ ¤IliIl
¤a.l.Il .lzî>.Il. ¤sIa.zIl¸ . _l.>.. :.l lzí
.IzIl _l¸>\ :Iií comctl32.lib L.l¸Il .l¸l,> _I|
) Linker Settings ( e>i>o _î. ,I l>| . lz.l> ¸íi.
¤IliIl cl !nitCommonControls() ¤Il> _± AP!
,li>..l :.îz, .lzî>.Il ¤,.IcV¸ ¤z,iº !nitCommonControlsEx() _.º _o e¸.î. ¤.çILzIl¸
¤.,i>Il .lzî>.Il .Icl . _º _za..l. _..|º ¤ois.o _.l±> ,i>..l ,I _..l lz. _í _Ic
¤IliIl _.I.ol !nitCommonControls() l¡.,lsí¸ l¡.Ll..I .
LIg.yI 4h¡mÌ
>l L,¸. l..| :.îz, ¤IliIl UV> _o .l¸ CreateToolbarEx() :I> >lz.cl ,¸.cl V _..îI
_,iz.ao L,¸.Il li± _.... l..|º ¤±l> e¸,o .l> eiºl. .l¸>Vl L,¸. ¸l..cl.º c>| _Il.o _º
Ul.zIl li± _Ic :
hTool = CreateWindowEx (0, TOOLBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,
hwnd, (HMENU)IDC_MAIN_TOOL,
GetModuleHandle(NULL), NULL);
¤IliIl .l¸.ol¸l. _Ic ¿I L. l.c> cVl .l¸>l L,¸. l..\ _sî, li± ¤Ll...
CreateWindowEx() ¸.ol¸l.Ilº TOOLBARCLASSNANE _Vl .lsIo _º .¸ao ..l. ç±
) hea der ( ¤a.l.Il .lzî>.II . hwnd ,Vl eiºl.Il _.so ç± L,¸. l¡,Ic ¿±ç.,. _.Il
.l¸>Vl . !DC_NA!N_TOOL _Ic Uç±>II V.s..o ¤,I| _l.>. iº :.V L,¸.Il li± .¸ao ç±
,li>..l. :I>¸ L,¸.Il _.so ¤IliII GetDlg!tem() :I> _º ..c¸ lo l>| .
// Send the TB_BUTTONSTRUCTSIZE message, which is required for
//backward compatibility.
SendMessage( hTool , TB_BUTTONSTRUCTSIZE,
(WPARAM)sizeof(TBBUTTON), 0);
,l ],|e|| Win32 AP! i||l| L,,a, .|,eX| L,,a
www.c4arab.com www.winprog.org 62
¤Il.¸Il TB_BUTTONSTRUCTS!ZE ) ¿ç. _o _.l.¸Il _c .I.>. l¡.l L>V WN_* ( ¤,¸¸¸±
¤..îo ¸li±| i,i>. _o ,lL.Il _,îz.I ¤a.l.Il .lzî>.Il l¡oi>... _.Il . .l¸li±\l ¸>l cl lz.
_.l..Il _¸c l¡.îz, .çILzIl ,>>II :.lLc|. :.|º _î,¡II ei,i> l,.l .,±. c¸> _o :I ¤.s.¸zIl
_íl.o .
LIg.yI hj¡m jIjjÌ
.l> ¸l¸¸Vl .lz.,.Il ¸ç± ¤,.l,º ¸l¸¸l _,.I,î.. _Ic _.l. ¤,.l.Vl .l¸>Vl ¤L¸.l _º
_o ¤oiso comctl32 :.s.. l¡.... _.Il :I. çl ,i>..zIl _o ¤º¸ao ¸l¸¸l¸ . cl _I| ¤...l
l ¸ç±¸ ¸l¸¸Vl ¤I±s.o .l¸>Vl ¤L¸.l _I| .l±. .lz.,.I ) ci> _Ic _í ... ( _o ¤>.V .,±. V¸l
¤I ¤sºlçzIl e¸ç±Il ¸¸ _îI >i>. ,. ¸l¸¸Vl _o l¡.îI c¸>l ¤>.V .,±. ,. l¡Ilza..l _>V ¸ç±Il .
4,mI,õ jIjjÌ 4sIo|
¤,I| ¸l¸¸Vl _o ¤ºl. ¤ºl±\ _l.>. .l¸>Vl L,¸. l.l..l iº¸ cVl . ¸.íl lcç,. .lz.,.Il ¸ç±
¤a.l.Il .lzî>.Il ¤..îo _º e¸ºç.o l±i>. ) common controls ( e>lc| _Ic _,¸.>o cçî. _I c>|
l¡oi>.., iº çi,s.. .Io çV l¡.ºl±| V¸ l¡.l..| .
. _¸±. V¸l TBBUTTON ¸ TBADDB!TNAP
TBBUTTON tbb[3];// .¸.. L,¸.. ¸¸¸´ ¯..:, ¸,¸...
TBADDBITMAP tbab;
¤z.lsII Ulza..l ia. li±¸ .l¸>Vl L,¸. _I| ¤,.l,sIl .lz.,.Il ¸ç± ¤ºl±|. ,çs. ,.
¤a.l.Il .lzî>.Il ¤..îo _º ls..o ¤º¸azIl ...
tbab.hInst = HINST_COMMCTRL;
tbab.nID = IDB_STD_SMALL_COLOR;
SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab);
l..l lz. l¡Iza.... _.Il ¸l¸¸Vl ¤ºl±| cVl l..îz,º l.¸ç± l.Iz> cVl .
ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = STD_FILENEW;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].idCommand = ID_FILE_NEW;
tbb[1].iBitmap = STD_FILEOPEN;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].idCommand = ID_FILE_OPEN;
,l ],|e|| Win32 AP! i||l| L,,a, .|,eX| L,,a
www.c4arab.com www.winprog.org 63
tbb[2].iBitmap = STD_FILESAVE;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = TBSTYLE_BUTTON;
tbb[2].idCommand = ID_FILE_SAVEAS;
SendMessage(hTool, TB_ADDBUTTONS,
sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb);
¤,.Vl ¸l¸¸Vl l.s±l isI : ¤º¸azIl .lz.,.Il ¸ç± ¤>.V l¡I l.i..l lzí Ls> ¸ _.º i,i>
,¡.,. l,¡,i. l.,. ¸l±¸ _,>o¸.zIl .Icl ¤,Ic >l.cl _,z> .çI.l li±¸ ls..o .
_¸¡º ) index ( ¤,Ls. e¸ç± _í ) bitmap ( _º ¤>.V _l¸Il .lsIo _º ls..o .¸ao ¸ç±Il
Il _º e>ç>ço l¡.l lzí ¤a.l.Il .lzî>.II NSDN
¸¸ _îI l.i..l isI .¸ao ) !D_F!LE_NEW ... _I| ( ¤±l>Il :I. _.lz. .lº¸azIl ei± >ç...
¤z.lsIl . ¿ç. _o _.l.¸ iIç.. ¸l¸¸Vl ei± WN_CONNAN ¤z.lsIl _o eiIçzIl :I. _.lL.
i.. ¤I i>ç, V ¸¸ _l¸>|. l.zº çI lol ei,i> .l,IzaI _l.>. _I c>| ) item ( l..|º ¤z.lsIl _º ¤sºlç,
º¸ao ¤I i.... ¤Il>Il ei± _º ¤I.l.¸ _.lso Ls.I.¸ li,i> l .
>ç>¸ _o l.±i.o ..í l>| wParam _I| e¸,¸z.. .zº çiIl¸ .,>zIl TB_ADDBUTTON
¤ºçs±o _º ei>lç.zIl ¸l¸¸VI ic ¤,Izc l¸>|. _z.. l¡.l ç± ...Il ) array ( tbb _l.>. _I c>|
:I> _,s>.I isao >çîI . >iaIl ¤.l.î. .zº çI 3 >çîIl c|º :I> Ui. .zº lo l>| _îI l>,>± cçî,.
¤.l.îI ¸L±l. _..|º li,i> l¸¸ .s±l¸ + ¸l 5 ¸l .. l.,. l¸ol ¸..a, ¤>o¸.Il ,Ilc _º li±¸ .
clí l>| sizeof(TBBUTTON) ,>>. 16 .,l. ) ..> .I.>, _s,s>Il ,>>Il cV Lsº Ul.o
_zaIl ¤±.o ( :Iz. l..l lz.¸ 3 ,>> c|º ¸l¸¸l sizeof(tbb) cçî,. 3 * 16 = +8 .,l. . l.,La,. ¤.o¸
_.l. +8 ÷ 16 e>ç>çzIl ¸l¸¸Vl >ic .
4IInI 4h¡mÌ
e>ç>çzIl ¤I,çLIl eiºl.Il :I. l¡. i±s. _.Il¸ ¤Il> ¤L¸.l çç>. .ls,.L.Il i>. lo l¸,.í
_,.L.Il ¤,cç. .V.>l. .I.>. .loçIao _¸a. ,çs. .,>. ¤,.,.¸Il _ol.¸.Il eiºl. _s.l . _±
za..Vl ¤L,.. l¡.l..|. ,º Lsº Ul .
hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0,
hwnd, (HMENU)IDC_MAIN_STATUS, GetModuleHandle(NULL), NULL);
,º ,. ) l,¸l,.>l ( :I> _º ..c¸ lo l>| l¸>Vl >ic .,.... . o _º l¡.o çl .,.... ,ºl ,I _Il.
¤IliIl UV> _o _.Il el¸º¸ ¤.l.í :.îz, lzí L,¸.Il _olí _¸a. i>l¸ ¸> l.,iI cçî,.
SetWindowText() .lzî>.Il ¤,s. ¿o Ul>Il ç± lzí . eia. .l¸>l L,¸. l..\ _a.. ..í çI lol
_za... ,. ¸> _í _¸c i,i>.I çcio ..l ¤Il>Il ei± _sº l¸>l SB_SETTEXT _.Il ¤.l.îI
i>l¸ _í _º .
,l ],|e|| Win32 AP! i||l| L,,a, .|,eX| L,,a
www.c4arab.com www.winprog.org 64
¤ºçs±z. _¸±.. l..|º ¸> _í _¸c _,,a.I ) array ( _í cçî. .,>. ¤>,>±Il >licVl _o
lo ¸> _¸c _.z. ¤z,º . _Ic _¸aIl ¤z,º ... ¤Il>Il ei± _sº li>l¸ l¸> i,¸. ..í çI¸ - 1 .
int statwidths[] = {100, -1};
SendMessage(hStatus, SB_SETPARTS,
sizeof(statwidths)/sizeof(int), (LPARAM)statwidths);
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Hi there :)");
¸.ol¸l.Il :º>l±, c¸>l e¸o wParam >ic .l.>I el.Iza..l l±,l l.± ¸±l.aIl e>ç>çzIl
¤ºçs±zIl _º . lzI ¸±.c U¸l ¤z,º Ci... l..|º ¤,ºl±| l¸>l _¸i. ) element ( . ¤ºçs±zIl _o 0 .
4¸Iy, LImI,õ
_îc _Ic ,.lçsIl _>l> _... ¤I±s.o .lzî>. ¸..a. ¤Il>Il ¤L¸.l¸ .l¸>Vl ¤L¸.l c|º
,Vl eiºl.II ,i>..zIl ¤sL.o . ¤Il.¸Il >çí :¸.. l.zº l>|º li¡I WN_S!ZE c|º _.º _o clí lzí
_.º _o el.s±l çiIl ¸,¸>.Il ,î>. _o l¸> _La.. ¤L¸.Vl ei± . ¤Ll... _îz, ¤Iî.o ei±
l¡I> ... ¤Il.¸Il. _l>Il >çîIl ¿Lso _º WN_S!ZE eiºl.Il l¸>| _º e>ç>çzIl ) window
procedure ( lz¡,aºço _I| ¤Il>Il L,¸.¸ .l¸>Vl L,¸. _o _í :,¸>.. ,çs.. ¤z,º _¸L. ,.
¸,¸>.Il ,î>. :,¸>.. l.I _z., lzo _,zaIl ¤sL.o ¿ls.¸l¸ _¸c _.z,º _o lz¡,cls.¸l¸ lz¡,±¸c
_s..zIl ,>>Il ..l., _.> ¤.l.l,º _,ia.¸ ...
HWND hTool;
RECT rcTool;
int iToolHeight;
HWND hStatus;
RECT rcStatus;
int iStatusHeight;
HWND hEdit;
int iEditHeight;
RECT rcClient;
// Size toolbar and get height
hTool = GetDlgItem(hwnd, IDC_MAIN_TOOL);
SendMessage(hTool, TB_AUTOSIZE, 0, 0);
GetWindowRect(hTool, &rcTool);
iToolHeight = rcTool.bottom - rcTool.top;
// Size status bar and get height
hStatus = GetDlgItem(hwnd, IDC_MAIN_STATUS);
SendMessage(hStatus, WM_SIZE, 0, 0);
,l ],|e|| Win32 AP! i||l| L,,a, .|,eX| L,,a
www.c4arab.com www.winprog.org 65
GetWindowRect(hStatus, &rcStatus);
iStatusHeight = rcStatus.bottom - rcStatus.top;
// Calculate remaining height and size edit
GetClientRect(hwnd, &rcClient);
iEditHeight = rcClient.bottom - iToolHeight - iStatusHeight;
hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
SetWindowPos(hEdit, NULL, 0, iToolHeight, rcClient.right,
iEditHeight, SWP_NOZORDER);
L,.. ¤s,s>Il _º ¤.îI _,çL lo lcç. >çîIl _o ¿LszIl li± cçî, iº ... .l¸>Vl ¤L¸.l
¤Il.¸Il l¡I _.¸. lzI ¤,Il e¸ç±. l¡aºlço _,ia.. ,çs.. TB_AUTOS!ZE ,çs.. ¤Il>Il ¤L¸.l¸
¤Il.¸Il l¡I _.¸. lzI _.Il _s.. WN_S!ZE ) .l..îo lzî>.Il ¤a.l.Il . _.lL.Il. ¤º¸¸ao ¸,c .(
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 66
!v µ,[¸i[ .¸3[ . ¸[¸i.æ][ J¸¸o., Jal[¡ ND!
_º¸zIl Ul.zIl : app_four
.II _r ñí;i MDl
_îI cl _± l¡.o _IL.. _.Il ¤,.l.Vl eiclsIl
.Icl ,çs. .,> l.± l¡. ¤±l> _,zc ¤sL.o eiºl.
l¡.lzî>. ,,L... l¡.loç.¸ ,,z±.. _ol¸.Il ... _I|
o _± l¡.s. eiºl.Il _c ¤I±s.o ..,I _,zaIl ¤sL.
eiºl.Il _>lç. _o e¸,zo ¤,>l. ¤Ll... . cçî. iº l.l,>l
l.l,>l¸ l¡z>l¸, _. V¸ _,zc ¤sL.o l¡Ií eiºl.Il
,.lçsII _ílol :¸.I e¸,a± cçî. _,zaIl ¤sL.o ¤L¸.l
.l¸>Vl ¤Il>Il ¤L¸.l ¸,¸z.Il ¤L¸.l ... _I| .
Il _çolº _º ND! ¤,.l.Vl eiºl.Il _z..
¸lL\l eiºl.. (Frame Window) l¸l±.>l¸ _lb$l; Uç±>Il :.îz, _.Il ei,>çIl eiºl.Il cçî. iº ei±
Il _ol¸. _Ic _zaIl ¤Il> _º l¡,Ic SD! ) Single Document !nterface .(
Il _º ND! .li...zIl e>ia.zIl ¤¡>lçII _,zaIl eiºl.. _ci. ¤,ºl±| eiºl. i>ç. ) ND!
Client Window ( Il _çolº _º¸ ND! ¸lL\l eiºl. _,I.. _ci. ) Child of the Frame Window (
l¸l±.>l¸ _,l.ìl; . s.o ¸,c l¡.l _I| l.¸.l _.Il _,zaIl ¤sL.o _îc _Ic¸ ,Vl eiºl.Il _c ¤I±
¤. ¤±l>Il _,zaIl ¤sL.o _,I.Il :Iz, ¸lL\l _c ¤I±s.o¸ ¤Iolí eiºl. ç± _,I.Il c|º ) L>V
_î.Il ( ¤,.l>Il _o _,Iº¸ . Il _,zaI _.l.¸ Lls.Il :.îz, V ND! _±s. ,.. _± lz.| e¸.l.o
¤.sIl ) class ( ls..o ¤º¸azIl " ND!CL!ENT ." c _zaIl¸ _±lç.Il :.îz, _,zaIl eiºl. _o _í _I
_.l.¸Il ¸.c l¡I ¤a.l.Il iºlç.Il¸ .
:.îz, ¤.|º :>ol.¸. ¤±¸a, _. çl ¸l i...zIl _¸a. ,çs, çiIl ¸¸i.,çIl _I| _±. lzI
Il _,zc _I| ¤Il.¸ Ul.¸| ND! ¤.>i> çiIl ¿ç.Il _o eiºl. _.., cl. ¤..IlLzI . ei,i>Il eiºl.Il
_.| l¡.l _l.l _Ic l±l..| ,., Il _,zaI ND! eiºl.Il ¸lL\ _.|í _,I¸ . ei,i>Il eiºl.Il ei±
¿ç. _o _,I. _± ND! ¸lL\I _.| l±,l ç± ¸,>Vl li± _,zaII _.| _¡º l.Iº lzí¸ ) _î.Il L>V .(
Il _,I.I _îz, ¤.|º ¸.íl ,¡sIl i,sa.I¸ ND! ¤I ¤a.l. c¸>l e¸,a± iºlç. l±,l çç>, cl . Ul.zí¸
L,.. : l ,î>. ¸,¸>.I ) Edit ( _.l.Il _¸iIl _º el.,l¸ çiIl ) Il _,I.I l..| cçî, cl ¤.îz, ND! ( .
_,..l _,.iºl. _.l¸>| ¤.l.í _c U¸ç.o ..l ) ¸.íl ¸l .( :.iºl.I _¸¸iIl ¤,s.í lolz. i>l¸
,Vl ) ¸lL\l .( Il _,I.I ¸>Vl¸ ND! . _º >¸l¸ li±¸ _,I.Il _o l¸,lao lcç. :Iz. cl :Iií :.îz,
> ¿ç. _îI eiºl.Il l¸>| _±º _º :..c¸ ¤Il .
,ç¡so _.l,. ,,z±. _º isazIl l.oVí _¸a.., _.Vl _î.Il .
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 67
.II ¿, _¸rII 4jIi; MDl
Il _l.>. ND! cl :I _.>..,º li¡I _ol.¸.Il .lclLº _o ¸,.í _º ¤, i>Il .l¸,,a.Il _a.I
¸i>. _±sIl li± l¸s. ... ..l lo l>| lLçL>o cçî. iº ¸l :>ol.¸. .ºç., lz.,> lL>Vl .sa. .aL
l¡..l.î. .zº _.Il e>l.Il >lçíVl ¤º¸ao _Ic :icl., lzo l.,¸c lº¸±. .¸±., .
.11 __,± -_±lJ MDI
Il eiºl. _... cl _.º ND! ¤>Ilao _Ic .V,ia.Il _a.. ,l,sII _l.>. l..|º l.. ¤±l>Il
¤,±l¸.ºVl _.l.¸Il ) default ( ,.. _.Il¸ l..iºl. l¸>| cç..o _Ic ... eiºl.Il ¸lL| l.l..l l..l lz.º
Il _,zc _±.>,. çiIl ND! I lci..Vl _,ia.I _l.>. l..|º DefWindowProc() _I|
DefFrameProc() ¸lL\l iºlç.I ¸,zo ¤Il.¸ _.so .,±. _.Il¸ .
default:
return DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam);
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 68
Il _,zc eiºl. l..| ç± ¤,IlçzIl eçL>Il ND! l.¸lL| eiºl.I _,I. l±¸l..cl. . :Ii. ,çs..
_º WN_CREATE >l.ao ç± lzí ...
CLIENTCREATESTRUCT ccs;
ccs.hWindowMenu = GetSubMenu(GetMenu(hwnd), 2);
ccs.idFirstChild = ID_MDI_FIRSTCHILD;
g_hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE, "mdiclient", NULL,
WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hwnd, (HMENU)IDC_MAIN_MDI, GetModuleHandle(NULL), (LPVOID)&ccs);
¤z.lsIl _.so ) handle menu ( l¡,º ,çs,. _.Il ¤,º¸LIl ¤z.lsII _±>zIl _.szIl ç±
Il _,zc ND! ¸l,.>l. ,i>..zII :Ii. l>ol. l±l..| ,., eiºl. _í _I| e¸l.\I >ç.. ¤ºl±|.
ei± ¤,>l.I l.,¸º ¤o¸VIl .ll¸>\l ¤ºl±|. ,çs.. ¤z.lsIl UV> _o l¡L,... >ç, _.Il eiºl.Il
¤z¡zIl . Il li± _º ¤z.lsII eiºl.¸ ¸,¸>. ,î>. _l¸>|. .zº _..l lz. ¤,º¸L ¤z.lº .Il. cçî.. Ul.z
i..Il ia. File .
ccs.idFirstChild ¤z.lsI l¡.ºl±|. _,zaIl ,çs, _.Il >ç..II .¸azí e>l..| ,., ,º¸ ç±
eiºl.Il ... :.îz, ¤.|º :. ¤±l>Il ¤z.lsIl .lº¸ao _c ¸,,z.Il ¤I¡. cçî. cl i,¸. ..í l>| Lls.Il
I eiºl.Il ¤z.lº .lzî>. ¸,¸z.¸ ¤z.lsIl .lzî>. _.lso DefFrameProc() l¡.>Ilao ,..I . li± _º
¤z,s. .¸ao i,i>.. .zº Ul.zIl 50000 ¤.o ¸.íl _.z.lº .lº¸ao cçî. cl ¿ºç.l V .,>. .
.¸ _.szI ¤>IlazIl _a. ¤ºl±|. cço¸Io l..|º ,l>..l. _za. ¤z.lsIl ei± _a>I¸ cVl l..Il
WN_CONNAND .
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
// ... handle other regular IDs ...
// Handle MDI Window commands
default:
{
if(LOWORD(wParam) >= ID_MDI_FIRSTCHILD)
{
DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam);
}
else
{
HWND hChild = (HWND)SendMessage(g_hMDIClient,
WM_MDIGETACTIVE, 0,0);
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 69
if(hChild)
{
SendMessage(hChild, WM_COMMAND, wParam, lParam);
}
}
}
}
break;
¤Il>Il .s±l isI : default l¡.>Ilaz. ,ºl ,I _.Il .lzî>.Il _í Lls.Il. ,çs.. _.Il
ç¸l.. ¸l ¸.íl ¤z,sIl ..lí l>| lo ¤º¸azI _,ºi. ¤,Iza. ,çs. l¡.l lzí e¸.l.o
!D_ND!_F!RSTCH!LD . ¤z.lº >ç.. _o ei>l¸ _Ic ¸s.Il. ,lº iº ,i>..zIl c|º :Iií ..lí l>|º
_.¸. ,. eiºl.Il _I| ¤Il.¸Il DefFrameProc() l¡.>Ilao ,..I .
¤I i..l¸ _,I.Il eiºl. L,...I _.szIl Ls.Il _..|º eiºl.Il .lº¸ao _o ei>l¸ _î. ,I l>|
l¡.>Ilao ,..I ¤Il.¸Il . ¤L..Vl _a. ç>ç. _í _,I.Il iºlç.I ¤,I¸ç.zIl _,ç>.. :I _z., li±
.lzî>.Il Lls.Il. _,I.Il iºlç. .I.>zI _z..¸ ) controls ( :I> >ç. ..í lo l>| .,Il.l eic _º .
¸lLVl eiºl. l¸>\ ¤...Il. ¤Iol. l¡.l. .±ç. _.Il .lzî>.Il Lls.Il. Lsº .zº Ul.zIl li± _º
l¡.>Ilao ,..I l¡.s. _,I.Il eiºl. _I| _,I. eiºl. ¸l lo i...z. L..¸. _.Il .lzî>.Il Ul.¸|¸ .
>çí _.l.Il l.Il.o _º l.l..l isI lz.Vo cçî,. >çîIl li± ¸,¸>.Il ,î>. ,,>>.. ,çs, l
l>| .l¸>Vl¸ ¤Il>Il _L,¸. _o _í ¿ºço¸ ,>> cl..>Il _º i>l, çiIl¸ _,I.Il eiºl. ,,>>.I
Il _,zc eiºl. _º _>li.. _I ND! .
_.l.¸Il ¤sI> _Ic ¤s,sLIl .V,ia.Il _a. l¸>\ :Iií _l.>. ...
while(GetMessage(&Msg, NULL, 0, 0))
{
if (!TranslateMDISysAccel(g_hMDIClient, &Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
¤.,>c eçL> l.s±l isI : TranslateND!SysAccel() _,.lso _º _,ºi.Il. ,çs. ¤IliIl ei±
.Il ls..o ¤º¸azIl ¿,¸. Ctrl+F6 iºlç.Il _,. _,i..Il. ,çs. _.Il¸ Ctrl+F+ _,I.Il _Ia. _.Il
l¸> ,I±¸ ... ,ic UV> _o :>ol.¸. _oi>..o _c¸.. :.|º _,ºi.Il li± _º l¡.ºl±|. ,s. ,I l>|
l,¸i, l±>çí ¤ºl±|. ,çs.. :.l ¸l l¡. ,l,sIl l¸>l.cl _.Il .,Il.Vl. ,±i,¸¸. .
±lJ s:± __1.11 -_
¤,.,.¸Il _ol.¸.Il eiºl. _I| ¤ºl±\l. ) ¸lL\l eiºl. ( _îI ei,i> iºlç. .l.º l..\ _l.>. l..|º
l±i,¸. _.Il _,I.Il iºlç. _o ¿ç. . Ul.zí : _¸aI ei>l¸¸ _ç±.Il _¸aI ei>l¸ :I cçî. cl _îz,
¤,.l,.Il .loç.¸Il ¸l ¸ç±Il . ç. _o Lsº li>l¸ lcç. _.... Ul.zIl li± _º _.Il¸ _,I.Il iºl
_.l.Il Ul.zIl _º l..zIl ¸,¸>.Il _ol.¸.I ¤I.lzo cçî.. .
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 70
BOOL SetUpMDIChildWindowClass(HINSTANCE hInstance)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = MDIChildWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szChildClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(0, "Could Not Register Child Window", "Oh...",
MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
else
return TRUE;
}
.l,l¸ i>ç. V ¤,>l,.cVl ¸lL\l iºlç. ¿o eiz.azIl :I. l¡Iz>o _º _.lz. _,>..Il ¤,Izc
¿o l¡Ilza..l ,., ¤±l> ND! . ¤z,sIl _Ic ¤z.lsIl l.>icl isI NULL . eiºl.Il l¸>|¸ ç>. ¸.ç,
ls>V ¤..î.. çiIl¸ _,I.Il eiºl. l¸>| .
.11 __1. ±1¸±| MDI
Il eiºl. l¸>| ND! .ll....Vl _o _,Iº ¿o _îI ¸>l l¸>| çl ¤..,í¸. _º _.lz, . _í _.º
¤,±l¸.ºVl _.l.¸Il _. ) default ( _I| l±¸,¸z. ,., DefND!ChildProc() _o Vi.
DefWindowProc() .
l ei± _ç±>. l¡,I| _l.>. V lzI eiºl.Il ,.l纸 ¸,¸>.Il _o _í _,La. :Iií >ç. ¤Il>I ) Lsº
_,z> _,¸z. ¤.V ( ¤Il.¸Il Ls.I.. c>| WN_ND!ACT!vATE ¤s.l.Il .lzî>.Il _La. ¸l _as.¸
¤Il.¸Il ¤z,º _Ic l>lz.cl . .,> ¿±çzIl li± _º _,I.Il iºlç. _o ei,ic lclç.l :Iz. ..í l>|
_,ia. :.îz, ¤L..Vl _îa.. _í _ol.¸.Il ¤¡>l¸ Uli...l ¸l .l¸>Vl L,¸. ¸l ¤z.lsIl .l>lic|
¤I aszIl eiºl.Il _î. ..> e¸,z.zIl .lzî>.Il¸ .
¤z.lsIl çi.. _o _í UlL.| l..îz, ¸.íl ¤,IzaIl ,lz.\¸ File :Ii. i±s.¸ Close ¸ Save
,¸I, V _,i..Il _,i± c|º iºlç.Il _,as. ,ic ¿o .,> Vza, cl . Uçaso .IL.l iº ¤,±l¸.ºl ¤s±.
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 71
U¸V _ol.¸.Il i,s.. i.c ¤z¡zIl ei± ¤,>l.I i.l¸ >çí ¤ºl±\ _l.>l _I li¡I >¸çzIl _º >ç..Il ei± _í
e¸o .
LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM
wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
HFONT hfDefault;
HWND hEdit;
// Create Edit Control
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |
ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0, 0, 100, 100, hwnd, (HMENU)IDC_CHILD_EDIT,
GetModuleHandle(NULL), NULL);
if(hEdit == NULL)
MessageBox(hwnd, "Could not create edit box.",
"Error", MB_OK | MB_ICONERROR);
hfDefault = GetStockObject(DEFAULT_GUI_FONT);
SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault,
MAKELPARAM(FALSE, 0));
}
break;
case WM_MDIACTIVATE:
{
HMENU hMenu, hFileMenu;
UINT EnableFlag;
hMenu = GetMenu(g_hMainWindow);
if(hwnd == (HWND)lParam)
{ //being activated, enable the menus
EnableFlag = MF_ENABLED;
}
else
{ //being de-activated, gray the menus
EnableFlag = MF_GRAYED;
}
EnableMenuItem(hMenu, 1, MF_BYPOSITION | EnableFlag);
EnableMenuItem(hMenu, 2, MF_BYPOSITION | EnableFlag);
hFileMenu = GetSubMenu(hMenu, 0);
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 72
EnableMenuItem(hFileMenu, ID_FILE_SAVEAS,
MF_BYCOMMAND | EnableFlag);
EnableMenuItem(hFileMenu, ID_FILE_CLOSE,
MF_BYCOMMAND | EnableFlag);
EnableMenuItem(hFileMenu, ID_FILE_CLOSEALL,
MF_BYCOMMAND | EnableFlag);
DrawMenuBar(g_hMainWindow);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILE_OPEN:
DoFileOpen(hwnd);
break;
case ID_FILE_SAVEAS:
DoFileSave(hwnd);
break;
case ID_EDIT_CUT:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT,
WM_CUT, 0, 0);
break;
case ID_EDIT_COPY:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT,
WM_COPY, 0, 0);
break;
case ID_EDIT_PASTE:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT,
WM_PASTE, 0, 0);
break;
}
break;
case WM_SIZE:
{
HWND hEdit;
RECT rcClient;
// Calculate remaining height and size edit
GetClientRect(hwnd, &rcClient);
hEdit = GetDlgItem(hwnd, IDC_CHILD_EDIT);
SetWindowPos(hEdit, NULL, 0, 0, rcClient.right,
rcClient.bottom, SWP_NOZORDER);
}
return DefMDIChildProc(hwnd, msg, wParam, lParam);
default:
return DefMDIChildProc(hwnd, msg, wParam, lParam);
}
return 0;
}
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 73
_o Ví .Ia> isI File Open ¸ File Save .lzî>. _î. _Ic (controls) cl.IliIl
DoFileOpen() ¸ DoFileSave() .¸ao ¿o _.l.Il l.Il.o _º e>lz.cl ,. lzI lz¡Izc _º cl¡...
>l,¸ ¸,a.zIl ¸,¸>.Il ,î>. Il _,I. clç.c cl>¸i. lz¡.l _Ic e ND! .IzIl ,.l _º .
i,¸. lz. l¡..IlLo l.,sî, li¡I l¡.o ,ci. ....l l¡.V ¤L,.. ¸..a. ¸,¸>.Il .lzî>. .
l.,¸c :>ol.¸. ¸,±, ¸l l¡Ilz±| ,ic .>lçIl e¸,a±Il l,.Vl _a. >ç>¸ _I| .¸.l _..l ¸íi. .
¤IliIl .,ci..l _..l L>V DefND!ChildProc() ¤,l¡. _º WN_S!ZE ¤.c¸ ¤Il> _º ,¡o li±
_.l.¸II ¤,.liIl ¤>IlazIl _o .,±. _º ,lL.Il . ¤aIlLo :.îz, DefND!ChildProc() Il ¤..îo _º
NSDN _.l.¸Il _o ¿ç.Il li± ¸,¸z. _o ls.l¸ _í lz.l>¸ l¡.>Ilao _îzzIl _.l.¸Il ¤>.V ¤º¸azI
¤IliIl ei¡I .
_±1¸J11 ¿_±¸ ___..
. Il iºlç. _,I ND! ¤Il.¸ _.¸.. :I> _o Vi. e¸.l.o l±l..| ,., V
WN_ND!CREATE _o la.L li±¸ el..| >ç. iºlç.Il _o ¿ç. çl _c l±l,| _,¸.>o _,zaIl eiºl. _I|
_î,¡Il l±cl .l>lic| _º _,ia. UV> ND!CREATESTRUCT . _º l±cVl .I.>o ¤a>l¸o :.îz,
li¡. ¤±l>Il _.l.çIl _î,¡Il . ¤Il.¸Il _o e>lazIl ¤z,sIl WN_ND!CREATE eiºl.Il _.so _±
el..zIl ei,i>Il .
HWND CreateNewMDIChild(HWND hMDIClient)
{
MDICREATESTRUCT mcs;
HWND hChild;
mcs.szTitle = "[Untitled]";
mcs.szClass = g_szChildClassName;
mcs.hOwner = GetModuleHandle(NULL);
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
mcs.style = MDIS_ALLCHILDSTYLES;
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0,
(LONG)&mcs);
if(!hChild)
{
MessageBox(hMDIClient, "MDI Child creation failed.", "Oh.",
MB_ICONEXCLAMATION | MB_OK);
}
return hChild;
}
_î,¡Il l±cl i>l ND!CREATESTRUCT Vl Ulza..Vl ¸,.í ¤.l ,c¸ ¤oi>..l ,I çiIl¸
ç±aIl 籸 lParam . .l> ,,º Ul.¸\ ¤oli>..l _îz, li± 32 .. ) .l¸.çzIlí ( çiIl _,I.Il _I|
¤±l>Il .loçIazIl _a.. e>¸¸. cl _º Vol ¤.l..|. .zº . ¤Il.¸Il _.szI Lls.Il ¿ºço _º
WN_CREATE Il ¤z,º _,I.Il eiºl.. ¤±l> lParam ¤Il.¸Il. ¤±l>Il WN_CREATE _Ic ¸.ç..
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 74
_î,¡Il CREATESTRUCT . ç±aIl lpCreateParams _Ic ¸.ç,. _î,¡Il. _l>Il
ND!CREATESTRUCT ¿o ¤.I.¸l çiIl WN_ND!CREATE .
case WM_CREATE:
{
CREATESTRUCT* pCreateStruct;
MDICREATESTRUCT* pMDICreateStruct;
pCreateStruct = (CREATESTRUCT*)lParam;
pMDICreateStruct = (MDICREATESTRUCT*)
pCreateStruct->lpCreateParams;
/*
pMDICreateStruct now points to the same MDICREATESTRUCT
that you sent along with the WM_MDICREATE message and you
can use it to access the lParam.
*/
}
break;
_I| Uç±çIl :.lîo|. ¤.|º _,,ºl±\l _,¸.çzIl _,i¡. :.s. .a.. cl _º .c¸. ,I l>|
lParam _.Vl ¸,.a.Il UV> _o ei>l¸ ¤aº> :
((MDICREATESTRUCT*)((CREATESTRUCT*)lParam)->lpCreateParams)->lParam
¸ol¸l i,s.. l..îz, cVl File . ¤±l>Il ¸lL\l eiºl. l¸>| _º l..z.lº _º l. :
case ID_FILE_NEW:
CreateNewMDIChild(g_hMDIClient);
break;
case ID_FILE_OPEN:
{
HWND hChild = CreateNewMDIChild(g_hMDIClient);
if(hChild)
{
DoFileOpen(hChild);
}
}
break;
case ID_FILE_CLOSE:
{
HWND hChild = (HWND)SendMessage(g_hMDIClient,
WM_MDIGETACTIVE,0,0);
if(hChild)
,l ],|e|| Win32 AP! .|e::a|| 1een:. i\l|, ND!
www.c4arab.com www.winprog.org 75
{
SendMessage(hChild, WM_CLOSE, 0, 0);
}
}
break;
Iií l..îz, Il. ¤±l>Il ¤,±l¸.ºVl .l,IzaIl _a.. >¸¸.Il : ND! li±¸ ¸¸i.,çIl ¤.,. _º
Il cl lz.¸ l±l.l..l _.Il ¤z.lsIl _ç±>. ND! l.a± cçî, _I _zaIl c|º li± ¿o _ºlç.. .
case ID_WINDOW_TILE:
SendMessage(g_hMDIClient, WM_MDITILE, 0, 0);
break;
case ID_WINDOW_CASCADE:
SendMessage(g_hMDIClient, WM_MDICASCADE, 0, 0);
break;
,l ],|e|| Win32 AP! , )|\l| .|s|,a ,|,:,:|| BitBlt
www.c4arab.com www.winprog.org 76
j,.l,,lj .j.s±j j¡,j¸
! ¡ ¸|a3[ ¸|g|¿æ ._|,.¿,i[ BitBlt
_º¸zIl Ul.zIl : bmp_one
4,,gm¡II jIøµI 4øµIg GDl
_¸iIl _c .I.>, ¤.l ç± ¸¸i.,çIl _º 縱ç>Il _.Il
o :,Ic _¸s, çiIl çiIl ç,i,sIl >l.aIl _c .loçIazIl _a. ¤º¸a
.loç.¸Il _¸aI ¤Iza... . Il Ul¸> ¸ºç, ¸¸i.,çIl c|º :I> _o Vi. AP! ¸l¡>Il ¤¡>lç. .¸a.
¤,oç.¸Il (Graphics Device !nterface) l¸l±.>l¸ GD! .
II l¡oli>..l l..îz, _.Il¸ ¤,oç.¸Il .l..lîIl _o ¤cçz>o _za... ei± ¸l¡>Il ¤¡>l¸ ,.¸
¤a.lLIl _.> ¸l e¸íliIl ¸l ¤.l.Il _Ic .
jIøµI LIõI,m
¸l¡>Il ¸l,. _z., _.lí Uç> ,ç>. ¤,oç.¸Il ¸l¡>Il ¤¡>l¸ ) Device Context ( l¸l±.>l¸
DC ¿ç.Il _.º _o ¤z,is. ,., HDC ) ¸l¡>Il ¸l,. _.so çl .( ¸l¡>Il ¸l,. _.so HDC ¤Ll...
¤z.¸ l..îz, _. _í _.so ç± . l li± _îz, ¤sL.o eiºl.Il _í ¤.l.Il _í _.z, cl ,.¸I
eiºl.Il. ¤±l>Il _,zaIl ) window client area ( ¤,Ls. e¸ç± ) bitmap ( ¸l e¸íliIl _º ¤Lçs>o
¤a.lLIl . ¤Ll... l¡.V ¤,Ic ,.¸.. çiIl ¸l,.Il ¿ç. ¤º¸az. ,¸Io ..I :.l ç± _z>Vl _.Il
.a, li±¸ ,.¸Il l..l :I.zIl .l> l¡Ií :I.. ¤±l>Il :Il¸> ¤.l.í _º :..c¸ ¤Il> _º lz¡o l¸ol ¸.
¸l¡> _í _>l _o .V,ia. l¸>\ ¤>l>Il c¸> e¸¡>Vl ei± _í ¿o _ola... _.Il .
¸l¡>Il ¸l,. _.so HDC çl .Iao ¤.l .,> _o ¤,oç.¸Il ¸l¡>Il ¤¡>l¸ .l..lí _> ¤..,
e¸.l.o l±cVl .l.l,.Il _I| Uç±çIl :¸¸isz. _,I :.l ... Il Ul¸> _o i,iaIl ¸,¸z. :.îz, ¤.îI GD!
¤,¸±ç> .l¸,,a. .i>. :.l ¸l l¡I,ia.¸ l¡z,º _Ic Uç±>II ¸l lo _. ,.¸I ¸l l¡.>Ilao ,..I l¡I
¤.o¸. _.lîIl _Ic .
çiIl ¸l¡>Il ¸l,. _.so _Ic Uç±>Il :o¸I, V¸l eiºl. _Ic ,.¸Il i,¸. ..í l>| Ul.zí
eiºl.Il _.z, ) HDC ( ±s. li±¸ ¤IliIl _ GetDC() Il Ul¸> _o l,l Ulza..l :.îz, ,. GD! i>l. _.Il
Ilí ¸l¡>Il ¸l,. _.so BitBlt() ¤IliIl¸ e¸ç±Il ,.¸ _>l _o V.o TextOut() _.Il ,.¸. _.Il
¤IliIl¸ LineTo() :,Il¸> li LçL>Il ,.¸. _.Il .
LI¸i,;II jgo
.l lzí .l.çs,lí l¡I,z>. _îz, .lz.,.Il ¸ç± ¤IliIl i>ç. ls.l. :I> _I| l.¸ LoadBitmap()
¤IliIl¸ .lz.,.Il >¸ço _,z>. _º eiz.azIl Load!mage() .Io _o ¤,Ls. ¸ç± _,z>.I ¤oi>..zIl
*.bmp .l.çs,Vl ¿o Ul>Il ç± lzí lolz. .
,l ],|e|| Win32 AP! , )|\l| .|s|,a ,|,:,:|| BitBlt
www.c4arab.com www.winprog.org 77
¤,oç.¸Il ¸l¡>Il ¤¡>l¸ .l¸,o _o e¸,o ) Il GD! ( .lz.,.Il _º ,.¸Il _Ic :.¸iº ,ic ç±
) . _o ¿ç HB!TNAP ( e¸.l.o . c>| ¸l¡>Il ¸l,. _.º _o ¤,s>o _± ,.¸Il .l,Izc cl ¸íi.
_º ¸l¡>Il ¸l,. l..|. ,¸Io :.|º .lz.,.Il ¸ç± _Ic ei± ,.¸Il Ul¸> Ulza..l _o _îz.II
ls..l. ,çs. ,. e¸íliIl HB!TNAP ¤IliIl UV> _o ¤I>li. SelectObject() . ¸l,. cl _± ¤>,..Il
iIl ¸l¡>Il _.szIl ¤,Ic ¸.ç, ç HDC _.szIl li± _Ic _zaIl. ,çs. lzI¸ e¸íliIl _º .lz.,.Il ç±
.lz.,.Il _Ic cçî,. _.l.Il c|º . _zaII ¤oVo ¸.íVl ia, .çI.Vl li± c|º ls.l. .¸.l lzí¸
_.so _Ic ,.¸Il ¤.îz, >çí ¤.l.í :.îz, lzí .loç.¸Il _Ic HDC >çîIl li± _za... ,. lo
,. _Ic >çîIl _º _,ia. ¸l ¤Iî.o çl c¸> _o e¸íliIl ¸l¡> ¸l,. ¸l eiºl.Il ¸l¡> ¸l .
.l.l,.Il ¤>Ilao ¤,.lîo| _Ic ¸ºç.. ..l ) data ( e¸íliIl _º . ¸ç± _±s. :I> _zc :.îz,
¸l¡>II ¤Is..zIl .lz.,.Il ) Device !ndependent Bitmaps ( l¸l±.>l¸ D!B . _¸zIl :Iií :.îz, lzí
Il .l,IzaIl _,. ,.¸Il ¸l¡> ¤¡>l¸¸ ¤,¸i, (GD!) ¸l¡>II ¤Is..zIl .lz.,.Il ¸ç± ¿o ) D!B .( li± _îI
¸l¡>Il ¤¡>l¸ .ls,.L. _La.. l..|º li¡I _,.i..zII ¤¡>çzIl ei± l..¸¸> ¸lL| _c _¸>, ¿ç±çzIl
¤,oç.¸Il GD! l,>L. .
4,,gm¡II jIøµI 4øµIg uIjiimI ! GDl \
Il. _zaIl _o l¡..Vl ia. HDC |º e¸,¸>. _.>.., ¤. ) l..|º _.szIl l..|. l.zº lzí lolz.
ls>V :IiI ¸¸L...¸ e¸,¸>.. ,çs.. .( >iaIl e>¸i>o ¸l¡>Il ¤¡>l¸ .l..lí . ¤s.l.Il .l¸li±\l _º
¸¸i.,çII ) ¸¸i.,¸ _.º 95 ( _. Lsº e>¸i>o _î. ,I ,lº çI V.zº ,lL.Il _º ¤í¸l.o _ºl ..lí¸
Icl _a..l¸ ,.¸Il. _ol.¸. ,.¸Il. ,çs, cl ¸>l _ol.¸. çl ¸¸isz. cçî, _I ¤.|º ,lL.Il >¸lço . .
¸¸i.,çIl ¸li±| ia.¸ cVl l..> 2000 ¸ XP _. .i>, cl c¸> _o >¸lçzIl _o i,iaIl _,z>. :.îz,
¤,º .çc¸o ¸,c . Il .l..lí ¸,¸>. cl,.. _îz, lzí GD! _o :s,.L. i,s.. l¡.îz, e¸,>Vl ei± cV
_l¸>| c¸> ¸¸i.,çIl ¤.,. _º l¡I 9x .
Il >¸lço .¸.... cl .>, V l,¸L. GD! Il ¤zL.l _º NT (NTf2KfXP) _º .i>. iº l¡.îI¸
c籺 .Vl> .
¤,Ií .sºç. ¸l ¤.,L. ,.¸Il .l,Izc .¸l± ,. ei,> ¤s±. _.lºiIl _a.I :>ol.¸. is. l>|
Il >¸lço cl _Ic ¤>±l¸ e¸l.| :I> c|º GD! .º¸...l iº . Il .l..lí ..,I ¸l¡>Il .lºl,. _.lso
GD! _a. Ls> :.îz, ¤olc ¤s±. _îI¸ l±¸,¸>. ¤,.lîo| _ç±>. ¸i>Il :o¸I, _.Il ei,>çIl
_l.>. e¸o _í _º l¡I,z>. e>lc| ,. l±¸,¸>. Ui. _ol.¸.Il el,> ¤I,L LçL>Il¸ .lz.,.Il ¸ç±í l,.Vl
l¡,I| .
¸l¡>Il ¸l,. _.so :Iií (HDC) >l ¤.îz, _,ao .º¸ _º .l..lîIl _o Lsº i>l¸ ¿ç. lç.
) ,Iº L> ¤,Ls. e¸ç± (... ¤,Ic ¸.ç,. çiIl ç± _.szIl li¡I e>l..| ,. ¿ç. ¸>l cl çl . c>| _îº
L.±Il. _.lîIl li± ¿o :Iola. l..l l¸i> . e¸íliIl _iî,.¸ ¿,±,. ¤.|º l,.l¡. .I±l>. lo l>|
Il _º .l¸...l Vî.o GD! . .| ,., lzI ¸l¡>Il ¸l,. _.so l. ) HDC ( ¿o e]l..| ,.,. ¤.|º
l±¸º ¤I ei..zIl .l..lîIl _a. ) by default ( . .loçIazIl ei± Ls>. ,çs. cl ei,> e¸îº _± c>|
Il ,li>..l. ,.¸Il ,.. loia. ,. :,I| l¡.>lc| ,., lzI HDC U¸Vl l¡a±¸ _I| l¡a>¸. . ,çs, V li±
l _o :.l..lí _a. .i>. Lsº I HDC ) li,> Vzc ¸..a, çiIl¸ ( .l..lîIl _a>. l±,l ,çs,. _.
¤,±l¸.ºVl ) default ( Il ¸,¸>. ¸l ,i± _º .c¸. _,> e¸±l> HDC ) >ç>l Vzc ¸..a, çiIl¸ .(
¤b>Vo : Il _.º _o ¤,±l¸.ºl .l¸l,.>l l¡I .l..lîIl _í _,I HDC Il ¤..îo ¤a>l¸o :.îz,¸
NSDN ,aIl :I. _Ic ¿VL\I ¤,.ao ¸ . ¸ç± _.lso _o çl _ç±>. _.º _o iíl.o ¸,c ..í .,>
.lz.,.Il HB!TNAP _Ic l¡. ¤±l>Il _.l.çIl ¸¡L. .,> ¤,.ao ¸,aIl .l..lîIl ¤cçz>o _z± _o clí
¤,.l¡. ..,I l¡.l . ¤,±l¸.ºVl .lz.,.Il l¡Iz>o _º _z¡. .ºç.¸¸î,lo _.º _o ¤±¸¸azIl ¤I.oVl¸ )
,l ],|e|| Win32 AP! , )|\l| .|s|,a ,|,:,:|| BitBlt
www.c4arab.com www.winprog.org 78
default bitmap .( .,> ,lº Shaun !vory .ºç.¸¸î,lo ¤í¸.. .l,>o¸.Il _.i.¡o i>l 籸
¤,Ls. e¸ç± ¸,¸>. .>, ¤.l _.l.Il _,IiIl _º _oVc|. ) bitmap ( ¤,±l¸.ºl .
>ç>¸ l,I> ¸¡L, lzí _>o¸. _I> ) bug ( _º ¤.l.Il ¤Lºl> ) screen saver ( _.Il l¡.>..l
_º¸ l¡oi± ¸l l¡±,ça. ,., ,I ¤,±l¸.ºVl .lz.,.Il cl ç± ...Il¸ l¡I,i.. ,.¸ .ºç.¸¸î,lo
Il >¸lço >l¡>|. .olº ¸,>Vl GD! . ¤Iç¡.. ¤,º ¿çºçIl _îz, li¡í lL> cV l¸i> _í c>| .
LI¸i,;II jgo _¡r
_zaIl _I| >ça. cVl . .i>. eiºl.Il _Ic ¤L,..Il ,.¸Il ¤,Izc ¤Il.¸ Lls.Il. WN_PA!NT
c|º c¸>l eiºl. _.º _o l¡.,La. ia. ¸l l±¸,a±. ia. l¡.>lc| ¸l e¸o U¸V :.iºl. _¸c ,., lzIº
¤Il.¸ Ul.¸|. ,çs, ¸¸i.,¸ WN_PA!NT l¡.s. ,,z±. e>lc|. ,çs. cl. l¡,º l¸.>o l..iºl. _I| . lzI¸
. ¤z.l> e¸ç±. ,., V :I> c|º eiºl.Il _Ic l.,. ,.¸. _sI.. lzI ¤z,z±. e>lc\ l¸L±o cçî.. _
¤Il.¸ WN_PA!NT _,a..Il ,lL. _o .
HBITMAP g_hbmBall = NULL;
case WM_CREATE:
g_hbmBall = LoadBitmap(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDB_BALL));
if(g_hbmBall == NULL)
MessageBox(hwnd, "Could not load IDB_BALL!", "Error",
MB_OK | MB_ICONEXCLAMATION);
break;
>¸ço UV> _o li> ¤L,.. ¤,IzaIl ei± .lz.,.Il _,z>. _± la.L _I¸Vl eçL>Il
>¸lçzIl _o c¸>l ¿lç.l _,z>. _ç±>. ¸,.í .V.>l çl i>ç, V¸ .lz.,.Il . ,.¸Il l..îz, :I> ia. ...
case WM_PAINT:
{
BITMAP bm;
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = SelectObject(hdcMem, g_hbmBall);
GetObject(g_hbmBall, sizeof(bm), &bm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem,
0, 0,SRCCOPY);
,l ],|e|| Win32 AP! , )|\l| .|s|,a ,|,:,:|| BitBlt
www.c4arab.com www.winprog.org 79
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
EndPaint(hwnd, &ps);
}
break;
_Ir _gnnI jIøµ ¿I,m ñísIiII
l¡,I| _l.>.. _.Il .l¸,a.zIl _o ¤cçz>z. _,¸±.Il. ,çs. ¤,li.Il _º . ç± l¡I¸l cl _I| ¤...|
¤,Ls. e¸ç± B!TNAP e¸ç±Il _.so _,I¸ HB!TNAP _± .lz.,.Ilº _î,± ) structure ( Ls>,
_>. .loçIao HB!TNAP Il .l..lí _o _.lí ¤.l> _º ç± çiIl GD! .
Il _¸c¸ ¿ls.¸l _Ic l¡. _±>. ¤s,¸LI _l.>. HB!TNAP ¤IliIl _ci.... c>|
GetObject() _îI¸ _.lîIl _Ic Uç±>Il. ,çs. V _¡º l¡z.l l¡,I| ¸,., lo _îc _Ic _.Il¸
lo _.lí .loçIao c¸>Vl. . ¤,z..Il _aI " GetObject!nfo " _.>l¸ ¤IV> ¸.íl . ¤IliIl c>|
GetObject() Il .l..lí _o i,ic ¿lç.l _Ic _za. GD! ¤z,º UV> _o l¡±a. _c ¸,z.. _.Il¸
_î,¡Il ,>>¸ _.l.Il ¸.ol¸l.Il .
_î,¡Il PA!NTSTRUCT ,.,. .,í¸ l¡,Ic ,.¸Il >l¸zIl eiºl.Il _>. .loçIao çç>,
.¸Il _.l.¸ ¿o _ola.Il , . ,l¡zIl ¤,.IlaI ¤...Il. _î,¡Il li± l¡,ç>, _.Il .loçIazIl Ulz±| :.îz,
_,.IliIl lci..V ¤,¸¸¸± cçî.. l¡.îI¸ ¤L,..Il BeginPaint() ¸ EndPAint() ¸,.. lzí¸
¤Il.¸Il _.so Lls.IV cl.zz±o _,.IliIl _,.l± c|º lz.Vl WN_PA!NT . Lls.IV _l.>. V lzI¸
¤Il.¸Il _.so WN_PA!NT ¤IliIl Ulza..l. ,¸Io :.|º GetDC() _¸iIl _º l±l¸.. _.Il¸
_>VIl ... _,.IliIl lci..l ,¡zIl _o _îI¸ BeginPaint() ¸ EndPAint() ¤Il.¸Il ¿o _ola.II
WN_PA!NT .
¤IliIl BeginPaint() ¸l¡>Il ¸l,. _.so l.I i,a. HDC eiºl.Il _.so _I| ¸,., çiIl
HWND . l.zº _.Il ¤Il.¸Il ¤,I| ¤>ç. çiIl _.Il ç± li±¸ ¤IliIl _I| l±¸,¸z. WN_PA!NT ¤,l
¸l¡>Il ¸l,. _.so li± _Ic l¡. ,çs. ,.¸ ¤,Izc HDC ¤.l.Il _Ic l¡.,> _º ¸¡L.. .
4,híiII ñjgnII jIøµI ¿I,m ñ¡5I. .Iir|
_l.>. l..|º .lz.,.Il _Ic e¸.l.o ,.¸Il _º ¤.c¸Il ¤Il> _º ls.l .¸í> lzí ¸l,. l..\
¸l¡>Il ) Device Context ( e¸íliIl _º ... UV> _o ç± ¤,Ic ¸ºç.. çiIl :I> ¿o _,.. L..l
CreateCompatibleDC() . _.l±>¸ cçIIl _zc ¿o _ºlç.o e¸íl> ¸l¡> ¸l,. l.>.z, .çI.Vl li±
eiºl.Il ¸l¡> ¸l,. _.sz. ¤±l>Il _¸aIl HDC .
¤IliIl _ci... cVl SelectObject() V Ls>I L..Il ¸l¡>Il ¸l,. _>l> .lz.,.Il ¸l,.>
Il .l..lí .l¸...V _,I¸ :I> ia. l¡I,i.. _>l _o ¤,±l¸.ºVl .lz.,.Il GD! .
_m¡II
_î,¡Il _º el.ao .lz.,.Il >la.l _Ic l.I±> isI B!TNAP lci..l l..îz, c>| BitBlt()
ºl.Il ¸l¡> ¸l,. _I| e¸íliIl ¸l¡> ¸l,. _o e¸ç±Il _..I _Ic ,.¸Il ,.,. i>Il li± _I| ei
,l ],|e|| Win32 AP! , )|\l| .|s|,a ,|,:,:|| BitBlt
www.c4arab.com www.winprog.org 80
¤.l.Il . Il ¤..îo ¤a>l¸o :.îz, e¸o _îí¸ NSDN V| _± lo ¸l±.>l. _îI¸ : ¿ºçzIl ¤¡>çIl
>çí l¸,>l¸ >¸çzIl ¿ºço¸ >¸çzIl ,>>Il ROP ¤>..Il l..| .çI.l _,±ç.. ,.¡, çiIl . ei± _º
UçzazIl >¸çzII ¤s,º>¸ ¤L,.. ¤>.. Lsº i,¸. ¤Il>Il ¤º¸l> l,.l _º .c¸. V¸ .
¤IliIl _IaI BitBlt() Il Ul¸> ¸.íl W!N32 AP! _o¸.o _îI ¤,.l.Vl ¤.>çIl¸ ¤,ç,>¸ lLl..
¸¸i.,çIl ,lL. .>. .laIl ¸l ¤,oç.¸ .ls,.L. _zaI _a., . _o _I¸Vl ¤IliIl l¡Ia> lo :I> _IaI
Il Ul¸> AP! l¡.l¸.ol¸l. _í Ls>l _.Il .
4IngI
l li± _I| :I> ia. l¡L.±I _l.>..¸ ¤.l.Il _Ic e¸±lL e¸ç±Il cçî. cl _a.., ¤>¸iI .
U¸l el.îI.ol loi.c l¡,Ic clí _.Il ¤Il>Il _I| e¸íliIl ¸l¡> ¸l,. e>lc| ç± :I> _zaI _. U¸l
l¡Ls>. l.zº _.Il ¤,±l¸.ºVl e¸ç±Il. ¤,Ls.Il l..¸ç± _,i.. _.a, lzo e¸o . l¡ºi> l..îz, :I> ia.
l,Ií ¤IliIl ,li>..l. DeleteDC() .
_o ¤,Ic l.I±> çiIl eiºl.Il ¸l¡> ¸l,. ¸,¸>.. ,çs. ¸,>l BeginPaint() _,¸L _c li±¸
l¡.s,s. EndPaint() .
lo ¸l¡> ¸l,. _.so ,i± ) HDC ( ¤.V. i>lç.I ¿>l¸ ...Il¸ _,ç..Il _o _,Iº ¤,¸.a,
l¡. ,. _.Il ¤s,¸LIl. ¤L..¸o l¡Ií¸ :I> _zaI .,Il.l e¸o U¸l ¸l,.Il _Ic Uç±>Il . ¤>.V ei±
_Ic Uç±>Il _º ¤oi>..zIl _±l.zIl ¸.íV Il HDC ¤,l¡.Il _º l±¸,¸>. _îz, .,í¸ :
Uç±>II : GetDC() ¸,¸>.II¸ : ReleaseDC()
Uç±>II : BeginPaint() ¸,¸>.II¸ : EndPaint()
Uç±>II : CreateCompatibleDC() ¸,¸>.II¸ : DeleteDC()
l¸,>l¸ l±¸>>. l.zº >¸lço çl ¸,¸>. >ç. l.>ol.¸. ¤,l¡. _º . _o lsILo .çILo ¸,c li±
i.c _ol.¸.Il. _Ia., _. _í ¸,¸>.. ,çs. ¸¸i.,¸ _o ¤.,i>Il .l¸li±\l cl lz. ¤,.s.Il ¤,>l.Il
.a.. l¡.|º l¡ºi>. ,s. ,I¸ .Iºl.. çI :.V ¤±l>Il :.l..lí ¸.l ¿... lz.l> _.>.., _îI¸ ¤.,l¡. >l
iº VV>l l±l,l.. _º _z>. ¸¸i.,¸ _o ¤z,isIl .l¸li±\l _a. c|º :. V.¸ ¤I>.o ¸,±. cl _Ic
Il .l..lí .i> ,ic _Ic _za. GD! :i>çI _zaIl. ..l ,s. ,I l>| :>ol.¸. ¤,l¡. ia. .
case WM_DESTROY:
DeleteObject(g_hbmBall);
PostQuitMessage(0);
break;
,l ],|e|| Win32 AP! is|sai,Ls: 1,,e
www.c4arab.com www.winprog.org 81
!! Js|næ J¿[ai J¸qe
_º¸zIl Ul.zIl : bmp_two
4,sIímII
_º ¸ol .ls.Il ¸ç¡LIl ¤,.lîo| .lz.,.Il ¸ç± lLc|
¿l.sIl e¸ç± ,li>..l _Ic ççL., li±¸ ¤Ll..Il ¤,lc
l±l¸. cl i,¸. _.Il ¤.çIzIl e¸ç±Il _I| ¤ºl±| >ç.Vl¸ _,.Vl
¤ºls. .
o l¡Ií l±¸ºç. _a.., ¤,.Vl L¸¸.Il Ul> _.>l _Ic ¤z¡zIl ¤,>l. _>l _ :
¤ºls. ¸¡L. cl i,¸. _.Il ¤sL.zIl _>lç. _í _º l>ç. cçî. cl .>, ¤.çIzIl e¸ç±Il V¸l .
_>lç.Il _ºl. _º l>ç.¸ ¤,ºls.Il _Ll.o _º l±,. cçî. cl .>, ¿l.sIl e¸ç± l,.l.¸ . e¸îº i>V
Il ¸ç± l¡,º ¸¡L. eVcl eiºl.Il L>V l>籸 ¸.íl ¸l.,Il _±ºl _º cçIIl¸ ¿l.s .
LI,I¸r BitBlt
_aLszIl _..Il. ,çs. V¸l ¤,ºls.Il l.I _s>, cl li¡I _îz, .,í ) ¤IliIl. BitBlt() ( e¸ç±I
¤,Izc Ulza..l. ¿l.sIl SRCAND ,çs. e¸ç±Il _o l,IaIl ¤s.LIl _º¸ :I> ia.¸ ¸.ol¸l. ¸>lí
LszIl _..Il. ¤,Izc _,Iza..o ¤.çIzIl e¸ç±II _a SCRPA!NT . _.Il _Ll.zIl cl _± ¤>,..Il
.i¡..zIl ¸l¡>Il ¸l,. _.so _º ¸,a.. _I ¤ºls. l¡Ia>. cl >ç. ) HDC ( _ºl. ,.¸ ,., lz.,.
>l.azIlí e¸ç±Il .
_±ç, iº _>o¸.Il _,.L.Il ¸.íl ,,±lszIl :
SelectObject(hdcMem, g_hbmMask);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0,
SRCAND);
SelectObject(hdcMem, g_hbmBall);
BitBlt(hdc, 0, bm.bmHeight, bm.bmWidth, bm.bmHeight, hdcMem,
0, 0, SRCPAINT);
. _zaIl :I ¸¡L l>| _¸.. ls>V ,çs.. l..|º _îaIl ¤Il> _º lol _,z> _. li¡º lL,.
_,±s.Il. :I> .
cl±>Vl _I| ¸>l.., Ulç. Ul¸lo _îI ,. isI l..> ... :l.± ¿l.sIl _Ic Uç±>Il ,. _,l _o
¿l.sIl _,±>.I _,,.l.l _,.çI.l ...
li±¸ .lz.,.Il cçI ¤,º .>¸>l _oç.¸ _ol.¸. çl _º :.s.. :Ii. ,º _º l,Il.o V> ¸..a,
l>¸i>o ¤,oç.¸Il Ulî.Vl >ic clí ¤Il> . ¿l.sIl >¸ço _l¸>| Lsº :.îz, .çI.Vl li¡. ) mask
resource ( ¤IliIl loi>..o ¤I,z>.. :I>¸ :>ol.¸. _I| LoadBitmap() .
,l ],|e|| Win32 AP! is|sai,Ls: 1,,e
www.c4arab.com www.winprog.org 82
e¸ç±Il _º cçIIl ¸l,.>l UV> _o li±¸ _ol.¸.Il is., loi.c :.s.. :I> ¿l.L±l. ,çs. cl
l ¸çíizIl cçIIl ¤,º i>lç., clîo _í _º l±,.l cçî, lcl.º _... ,. lºls. l.çI ¸i., ¤Ia>I ¤,I±V
_>lç.Il _ºl. _º l>ç.l¸ .
l>| :.s.. l,.Vl ei± _za. cl :.îz, ¤.|º i,i>Il _.Il. ..,I _I¸Vl ¤s,¸LIl .ol>lo
:I> _º ..c¸ lo .
_o ,¸I... ¤,.l.Il ¤s,¸LIl BitBlt() ¿li>Il ei± ,lz.| _o :. îz, .çI.l _I| ¸,.l. liI
¤,IzaIl .
¿IiíII .Imi|
_.o _za. ,çs. cl ç± :I> _zaI _,.. L..l ) scanning ( ¤.çIzIl e¸ç±Il _o _.î. _îI
>ç.Vl ¸l _,.Vl _I| _,z, ¿l.sII _ºlçzIl _.î.Il ¿±. ,. l¡.z,º _º _,ºi.Il¸ ... SetPixel() _±
.l lzí ¤.,L. i> ¤Il> l¡. Uçzao ¸,c ¤s,s>Il _º l¡ .
,li>..l. li±¸ _aLszIl _..Il _Ic ççL., :I> _zaI .çI.l _.>l BitBlt() _.Il
_,.Vl¸ >ç.Vl _I| ¤.çIzIl ¸ç±Il _,ç>.. ,çs.. . Vza..o _aLszIl _..Il. .zº l>| SRCCOPY
¸l¡> ¸l,. _.so _o HDC ¸l¡> ¸l,. _.so _I| ¤.çIzIl e¸ç±Il _Ic ¸.ç, HDC _Ic ¸.ç,
¤.çIzIl e¸ç±Il _º ¤,sI>II cçI ¤.l _Ic iazIl cçIIl ç± lz,º _ºi.. l¡.|º l>ç.¸ l±,. e¸ç±
>ç.Vl _Ic l¡Ia>..º .V.î.Il ¤,s. lol _,.Vl _Ic ¤Ia>.º .
lºls. ei,¸. çiIl cçIIl _Ic ¤,sI>Il cçI _a> ç± l.o¸I, lo _í cV l.>Il± _º .±, li±
. _aLszIl _..Il¸ BitBlt() ¿l.sIl e¸ç± _I| ¤.çIzIl e¸ç±Il _o . ¿o ,., l.± _zaIl cl _I| ¤...l
.lz.,. ) bitmap ( cçIIl ¤,.l.. ¿l.sIl ) >ç.l¸ _,.l ...( .l> ¤,Ls. ¸ç± l¡.l. ¤º¸¸azIl¸ 1 _îI ..
_.î. . _za. _I l¡.|º Lsº l>ç.Il¸ l±,.Il .V.î.Il .l> ¤.çIzIl ¸ç±Il ¿o l¡.,¸>. .>¸l l>|º :I
¸çs. l¡.l> i> _º .lz.,.Il cV 1 .. ) 16 ¸l 2+ .. .(
cçî. cV _l.>. ¤.çIzIl e¸ç±Il cl ç± ls.l. e¸çíizIl ls>\l ¤,Izc _l>.I L¸. U¸l ç± lo
¤,ºls.Il ¤,º >ç. clîo çl _º l>ç. . _.l.Il l.Il.o _º l±l.Iza..l _.Il ¤,Ls.Il l..¸ç± cl lz.
º ¸çíizIl L¸.Il _s>. ..lí e¸ç± ¿o >çîIl li± ,li>..l .>¸l çI _îI¸ Ulî.| çl _sI.. ,I l..|
lºls. cçî, cl ¤.o >l¸, .I.>o cçI. ¸,z.. ) ¤a.l. ¤Il> ç± _.lº ç>¸¸ ( ¤Il>Il ei± _º l..|º
¤,I±Vl e¸ç±Il UV>\ _,Iº i.o el.l..l çiIl ¿l.sIl _za....¸ ¤,.l. eçL> ¸,.Il _Ic c¸¸.>o
ç. clîo çl _º c>| l>ç.l cçî, cl _a.., lºls. ¸,±, cl > . _íloVl _ºl. ..lí l>| :Iií cçî,.
¤ºls. ¸,±. cl .>, V l¡.|º ¿l.sIl _º l±,. ..,I l¡.l lz.¸ l>ç. . . ¤,IzaIl ei± ,lz.| l..îz,
BitBlt() ¤,Izc _,Iza..o ¤.çIzIl e¸ç±Il _I| i,i>Il ¿l.sIl _o SCR!NvERT ,çs. _.Il¸
¤.çIzIl e¸ç±Il _º l>ç. ¿l.sIl _º l±,.Il _Ll.zIl _í _a>. .
¸oV ¤z¡zIl ei± _º l.c .ç.. Ul¸> ¸ºç. cl lzí isazIl l¸>| li¡I _±>zIl >çîIl _í li±
.>, lo :,I|º ¤c¸¸Il ¤,lc _º :
HBITMAP CreateBitmapMask(HBITMAP hbmColour,
COLORREF crTransparent)
{
HDC hdcMem, hdcMem2;
HBITMAP hbmMask;
BITMAP bm;
,l ],|e|| Win32 AP! is|sai,Ls: 1,,e
www.c4arab.com www.winprog.org 83
// ¸¸.. ¯¸.... ¯¸L.. .¸¸. ^...¸ ) 1 ., (
GetObject(hbmColour, sizeof(BITMAP), &bm);
hbmMask = CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL);
// _.. ¸¸.. ¯..¸.. ¸.¸, ....¸. ¸,...
hdcMem = CreateCompatibleDC(0);
hdcMem2 = CreateCompatibleDC(0);
SelectBitmap(hdcMem, hbmColour);
SelectBitmap(hdcMem2, hbmMask);
// _:. _.. ¯¸L... .¸¸... ¯¸... ¸¸. _.,
// ¸L, ¸´ ..,¸. _.. ¸¸.. ..... ¸
SetBkColor(hdcMem, crTransparent);
// .¸..¸ ¸¸,. _.... ¸ ¯.¸.. .¸¸.. ¸. ...,. ¸..
// ^¸. _± ¸¸.., .. ¸¸,. ¸ ¸¸.., ¯¸,¸. ^¸. _±
// ·¸. ,.¸. .. ..¸ [.¸.. ¸ .¸¸..
BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem,
0, 0, SRCCOPY);
// .¸¸. ..... ¸¸.. _,.,.. .,., ...... ,.>..
// ,.L..., _..¸. ..... .... ¸.¸ [.¸.. ¸ ¸... ¸¸..
BitBlt(hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2,
0, 0, SRCINVERT);
// .¸>.. .¸±.. ¸,¸..
DeleteDC(hdcMem);
DeleteDC(hdcMem2);
return hbmMask;
}
¤L>Vo : _ci... ¤IliIl ei± SelectObject() l±¸,¸z.. l.zº _.Il ¤.çIzIl e¸ç±Il ¸l,.>V
¸l¡>Il ¸l,. _.so _,¸L _c l¡,I| ) HDC .( e>i>o cçî. cl l¡.îz, V .lz.,.Ilº _o ¸.íl _.º _o
HDC ¸l,. _.so _.º _o l¡,Ic ¸,.l.Il ,., ,I .lz.,.Il cl _o liíl.o _í c>| i>l¸ .º¸ _º
_.s.. l¡.|º V|¸ ¤IliIl ei± _ci... lzI .ºçIl _s. _º ¸>l ¸l¡> . ¤Il> _Ic ¸ç>. l..l lz.¸ cVl
>. >¸>z. lolz. ¤,I±Vl e¸ç±Il _o ¿l.º l..| l..lîo|. ¤.|º e¸l.zo l¡I,z :
case WM_CREATE:
g_hbmBall = LoadBitmap(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDB_BALL));
if(g_hbmBall == NULL)
MessageBox(hwnd, "Could not load IDB_BALL!", "Error",
,l ],|e|| Win32 AP! is|sai,Ls: 1,,e
www.c4arab.com www.winprog.org 84
MB_OK | MB_ICONEXCLAMATION);
g_hbmMask = CreateBitmapMask(g_hbmBall, RGB(0, 0, 0));
if(g_hbmMask == NULL)
MessageBox(hwnd, "Could not create mask!", "Error",
MB_OK | MB_ICONEXCLAMATION);
break;
lºls. cçî, cl ei,¸. çiIl¸ ¤,I±Vl e¸ç±Il _o _I>..zIl cçIIl la.L ç± _.l.Il ¸.ol¸l.Il
>ç.Vl ç± ei± l..Il> _º .
°Iíø _5 _¸rj u,5
U]l..Il :.îz, . ,lzI\l _a. :,iI i.V¸ :.|º _.Il ¤aI _º :.¸.> cl..>Il _º li>l _îI
¤,.l..Il .l,IzaIl. ) binary ( í OR XOR AND ... _Il . _,.l. _îI .ls,.L.Il ei± _¸.I ¸¸L.l _I
li± l.Il.zI l¡oli>..l ¤,s,í . l±olc ¸i., _>¸. clí lo l>| ) el.z.l V lo li±¸ ( .l,IzaIl ¤a>l¸o c|º
¤,.l..Il ) ¤,sL.zIl ( ¸.íl .la,..Vl _Ic :icl... .
s.íVl :.îz,¸ _±l¸Il .ºçIl _º l¡oli>..V l,¸¸¸± _,I cVl :I> :l¸>| ia. ,li>..Vl. l
cls.|. _za. l¡.l _o iíl.Il .
SRCAND ) SouRCe AND (
¤,IzaIl SRCAND >çîIl ¸l ROP ¤IliII BitBlt() .,Lç.. .l..Il _Ic .l,Izc l¸>| _.a,
_olazII AND . ¤¡>çIl¸ ¸i±zIl _º ¤.>çzIl .l..Il Lsº çl ) source 8 destination ( _.Il _±
¤,.l¡.Il ¤>,..Il _º ¸¡L.. . l.çI :Iz.. _.Il .V.î.Il _í _a>I l.cl.º ¿o ei± l.oi>..l isI
l>ç. l¡Ia>I ¤.çIzIl e¸ç±Il _o . l>lç. çç>. ¿l.sIl e¸ç± ) ¤z,sIl _.a. _.l..Il ,lL.Il _º 0 ( _º
l±l,.¸ l.lçIl i,¸. ¤,>l. çl ) ¤z,sIl _.a. _.l..Il ,lL.Il _º 1 ( l¡,º i,¸. _.Il _>lç.Il _º
¤,ºls.Il . çl ¿o l¡.s.lLo ,., ¤z,º 0 _,Iza..o AND _I| U¸ç.. 0 .V.î.Il _í c|º _Il.Il.¸
I ¤,¸l.o l¡Ia> ,.,. ¿l.sIl _º l>ç. ..lí _.Il 0 _ºlçzIl _.î.Il cl _.a, lzo ¤>,..Il _º
l>ç.l ¸¡L,. l¡I . ¿o l¡.s.lLo ,., ¤z,º çl¸ 1 ¸,±.. l¡.|º 1 ..lí l>| 1 ¸ 0 ..lí l>| 0 ... c>|
í ¤IliIl lci..l ia. ¸.l.. _I ¿l.sIl _º l±,.Il .V.î.Il _ BitBlt() . ¤,çIaIl e¸ç±Il _± ¤>,..Il
_.l.Il l.Iî. _º _.z,Il .
SRCPA!NT ) SouRCe PA!NT (
SCRPA!NT ¤,Izc ,i>... OR ¤sºlçzIl ¤>,..Il c|º lz±Ví ¸l l.>ço .l..Il i>l clí l>|º
:Iií cçî.. . ¸ç±Il _º li± _za... ¤.çIzIl . >ç.Vl ¸>Il _¸o ,., lzI ) .ls.Il ( ¤.çIzIl e¸ç±II
¤¡>çII ¤a.l.Il .l.l,.Il ¿o ) destination ( _,Iza..o OR .l.l,.Il _zI ,ic cçî. ¤>,..Ilº ) data (
II ¸,.l. V¸ ,¸iao ¸i±zIl cV ¤¡>çIl _º 0 _olazIl ¿o _ola.Il i.c c¸>Vl .l.l,.Il _Ic OR .
. ¸>l ..l> _o ¤.|º l>ç. ..,I l±,l ¤¡>çIl ..lí çI¸ l>ç.l _,I ¤.çIzIl e¸ç±Il _ºl
_.l.Il >çzaIl _º ¤,.l.Il e¸îIl _º l¡.L>Vo :.îz, ¤>,..Il¸ ¤¡>çIl¸ ¸i±zIl _.çI _,. _¸o _..,.
_¸iIl li¡I l.Il.o _º . i,¸. _.Il .V.î.Il _a>I ¿l.sIl ,li>..l l¸¸ _.,.¸Il ¿ºliIl ç± li±
l¡.,çI. _za... lzI l..l ç± ...Il¸ .lLzIl U¸l _º l>ç. ¸¡L. OR c|º ¤.çIzIl e¸ç±Il ¿o
l¡.>. cçî, _. çl ¿o _¸.z. _I ¤.çIzIl .V.î.Il .
,l ],|e|| Win32 AP! is|sai,Ls: 1,,e
www.c4arab.com www.winprog.org 85
SRCINVERT ) SouRCe !NvERT (
_olazIl XOR >ç.Vl _I| Uç>., ¤,I±Vl l..¸ç± _º .ls.Il cçIIl _a> _Ic _za, ) ,I l>|
l>ç.l _î, .( l _.î. _¸o _o l¡í¸., ¤¡>çIl _º ¤,sI>II la.l. _,I cçIo _.î. ¿o ¿l.sIl _o >ç.
¿l.sIl _o _,.l _.î. _¸o lz.,. ¸,,a. c¸> ) >i>o cçI ¿±¸ UV> _o ei,Iç.. l.zº l..l ¸íi.
V.o ¤,sI>Ilí ( _s.Vl _I| ¤Iç>,¸ ¤I>la, ¤¡>çIl _º ¤,sI>II ¿.l. cçIo _.î. ¿o .
_,> _o ¤,>o¸. ¤I,> ¤Ií li± Il GD! _za..zIl cçIIl _îc¸ l¡. _Ia.. . ¤,>l>Vl ¤>IlazIl
¤. cl¡.., V _>o¸. _zc :I> ,c¸ l¡.îI l¡,º ¸,îs.Il >¸>zI _l¸Il. ¸±. cçIIl .
_Ii,
¿¸¸.zIl _º Ul.zIl >çí bmp_two _º l.Il.o _î.I l>çí _z±., _±sIl li± ¿o _s., çiIl
¤>s±Il ei± . e¸ç±Il¸ ¿l.sIl ,.¸ _o _î... Ulza..l ,., lzí lolz. ¤.çIzIl SRCCOPY ,., ,.
.l,Iza. >l¸s.l _Ic ei>l¸ _í ,li>..l SRCAND ¸ SRCPA!NT lz,º _¸zIl l¸,>l¸ _Ilç.Il _Ic
¤,.l¡.Il ¤>,..Il _Ic Uç±>II lz¡.,. .
Ulza..l cl lzí ¸.íl ¤>±l¸ ¤,ºls.Il _a>I ç>lo¸Il _Ic eiao Ul.zIl li± _º ¤,sI>Il
IzaIl ei± V ,l ¿ºlçIl _º _za. lo l>| l.¸l.>\ ¤.a± l¡Ia>, l>ç. ¸l l±,. ¤,sI> _Ic .l, .
,l ],|e|| Win32 AP! .|L,l:||, .s,||
www.c4arab.com www.winprog.org 86
!!! ¸|@¸l.][¡ ¸gq][
_º¸zIl Ul.zIl : anim_one
.IirgI
_î,± _I| _l.>. :¸>.. l,.l _Ic _±>. cl _.º
.,i>.Il .l,Izc _,. e¸îIl ¤,a±¸ ¤,º c¸>. . _î,¡Il li±
>¸ e¸îII _Il>Il ¿ºçzIl c¸>,. l.IiIl ,,º Ls>, lzí l¡z> )
Delta ( ¸lL| _í _º ¤í¸>Il. ¤±l>IVl ¸,>lszIl¸ .
_ol. _,.zI :Iií _l.>. l..|º _î,¡Il ¿ç.. l.>,¸±. ia. _î,¡Il li¡I ) Global !nstance .(
_za... cl¸ i.V :.|º .l¸îIl _o ¤cçz>o :¸>.. l.í l>| ei>l¸ e¸í :Iz. l.o>lo _îzo li±
¤ºçs±o ) array ( l¡.c .ç., ¸>l _. çl ¸l ) ¤L.l¸.zIl _.V.Ilí linked lists ( _.Il l¡.l.l,. Ls>I
¤Ilaº¸ ¤..l.o ¤s,¸L. l±l.¸í> .
const int BALL_MOVE_DELTA = 2;
typedef struct _BALLINFO
{
int width;
int height;
int x;
int y;
int dx;
int dy;
}BALLINFO;
..l. .,¸a.. l±,l l.zº isI BALL_NOvE_DELTA :¸>.. cl i,¸. çiIl cizIl l.I >i>, çiIl¸
.,i>. _í _º e¸îIl ¤,I| . _î,¡Il _º l.IiIl _,¸>.I l.aºi, çiIl ...Il BALL!NFO cl i,¸. l..l ç±
¤,¸> _î. _s.Vl ¸l _IcVl _I| Vlz. ¸l l.,z, l..¸í :¸>.. BALL_NOvE_DELTA Lsº ç± ,.|
:I> l.>¸l l>| ia. lz,º e¸,,a. l..îz, c>| ¤z,sIl lLc\ ..l.o .
li..V _l.>. cVl ) initializing ( l..¸ç± _,z>.. ,çs. cl ia. _î,¡Il li± :
BITMAP bm;
GetObject(g_hbmBall, sizeof(bm), &bm);
ZeroMemory(&g_ballInfo, sizeof(g_ballInfo));
,l ],|e|| Win32 AP! .|L,l:||, .s,||
www.c4arab.com www.winprog.org 87
g_ballInfo.width = bm.bmWidth;
g_ballInfo.height = bm.bmHeight;
g_ballInfo.dx = BALL_MOVE_DELTA;
g_ballInfo.dy = BALL_MOVE_DELTA;
¿>l¸ ZeroNemory l.±
li.. e¸îIl ¸l.,Il _Icl _í¸ _º _I| _s... _,z,Il s.L _s.Vl _I|¸ V l _î,¡Il l±c
BALL!NFO :Ii. i±s.¸ : dx ¸ dy .
4rImII .Iir|
UV> _o ç± ¸¸i.,¸ _ol.¸. _º L,.. .ºço _l¸>| _o :.îz, _,.. L..l SetTimer()
li± l.Il.zI _îI eisazIl .laIVl¸ l,i,z,.I,zIl _ol¸.I l¡. _±., V¸ _. _±ºVl ..,I l¡.l _,>±
¤,ºlí i> _¡º . V _l.>. lzI _Ic e¸L. lsI| l±i.c :.îz, eçº ¸.íl l,. TimeSetEvent() _º
Il ¤..îo NSDN ,lî>|¸ ¤º> ¸.íl :I> c|º .
const int ID_TIMER = 1;
ret = SetTimer(hwnd, ID_TIMER, 50, NULL);
if(ret == 0)
MessageBox(hwnd, "Could not SetTimer()!", "Error", MB_OK |
MB_ICONEXCLAMATION);
l..ºço .¸ao i,i>.. ,çs. l.± ) id ( ¤,I| e¸l.\l _o l..îz,. çiIl¸ ) ls>V ¤I.º¸ kill it ( ,.
¤Il.¸ Ls.Io _º .ºçzIl ¿±. WN_CREATE ¤,.,.¸Il l..iºl. _º . l..ºço ¸zc _±s., e¸o _í _º
¿ç. _o ¤Il.¸ _.¸,. ¤.|º WN_T!NER Il l.I ¸¸z,¸ eiºl.Il _I| !D _º wParam . :Iz. l.o>lo¸
. ¤s,¸a.. _,o¸Io :Ii. l..Iº i>l¸ .ºço !D _l.>.¸ .ºço _o ¸.íl .>icl l>| :I i,so ¤.îI¸
l¡.,. ¸,,z.II .
. .ºçzIl l±s.l .º¸ l.>i> isI 50 .,¸s.Il. _.a, lzo ¤,.l. _I,o 20 ¤,.l. _í _º ¸lL| .
cV .,¸s.Il. .Iº SetTimer() I ¤s,º> ¸,c cV _IsII çci. V li± l.Il.o _º ¤,.l. _I,zIl _a. _î
¤,z±Vl .li. _,I l.>çí .
_ uj¡niII WM_TlMER
_Ic _±>. lzI WN_T!NER li± ,.¸ _Il.Il.¸ e¸îII i,i>Il ¿ºçzIl .l.> _º .c¸. l..|º
i,i>Il ¿ºçzIl .
,l ],|e|| Win32 AP! .|L,l:||, .s,||
www.c4arab.com www.winprog.org 88
case WM_TIMER:
{
RECT rcClient;
HDC hdc = GetDC(hwnd);
GetClientRect(hwnd, &rcClient);
UpdateBall(&rcClient);
DrawBall(hdc, &rcClient);
ReleaseDC(hwnd, hdc);
}
break;
l¡. ¤±l>Il l¡Il¸> _º e¸îIl ¿ºço .,i>.¸ ,.¸. _l>Il >çîIl .a±¸ isI . _.> :çI. li±
_o l.. îz, _.º _o e¸îIl ,.¸ WN_T!NER ¸ WN_PA!NT çiIl .çI.Vl cl L>V >çîIl ¸l¸î. c¸i.
¸l¡>Il ¸l,. _.so _Ic Uç±>II el.iz.cl HDC li± :¸. _±ºVl _o c>| c¸>V ¤Il> _o .I.>,
¤Il.¸Il _.so Ls.Io _º >çîIl ) message handler ( ¤IliIl _º ¤>,..Il ¸,¸z.¸ DrawBall() .
void UpdateBall(RECT* prc)
{
g_ballInfo.x += g_ballInfo.dx;
g_ballInfo.y += g_ballInfo.dy;
if(g_ballInfo.x < 0)
{
g_ballInfo.x = 0;
g_ballInfo.dx = BALL_MOVE_DELTA;
}
else if(g_ballInfo.x + g_ballInfo.width > prc->right)
{
g_ballInfo.x = prc->right - g_ballInfo.width;
g_ballInfo.dx = -BALL_MOVE_DELTA;
}
if(g_ballInfo.y < 0)
{
g_ballInfo.y = 0;
g_ballInfo.dy = BALL_MOVE_DELTA;
}
else if(g_ballInfo.y + g_ballInfo.height > prc->bottom)
{
g_ballInfo.y = prc->bottom - g_ballInfo.height;
g_ballInfo.dy = -BALL_MOVE_DELTA;
}
}
,l ],|e|| Win32 AP! .|L,l:||, .s,||
www.c4arab.com www.winprog.org 89
¿ºçzI l.IiIl ¤z,º l.s±l isI ¤,.l.Vl .l,±l,¸Il _o ¸> li± _í x e¸îIl :,¸>.I . ..±> l>|
_,zaIl ¤sL.o _¸l> e¸îIl c>| _ílazIl el>.\l _I| l.I> ¤z,º _o ¸,c¸ ¸,>Il _I| l¡.>lc|. ,sº
..lç>Il _Ic e¸îIl L... .
void DrawBall(HDC hdc, RECT* prc)
{
HDC hdcBuffer = CreateCompatibleDC(hdc);
HBITMAP hbmBuffer = CreateCompatibleBitmap(hdc, prc->right,
prc->bottom);
HBITMAP hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = SelectObject(hdcMem, g_hbmMask);
FillRect(hdcBuffer, prc, GetStockObject(WHITE_BRUSH));
BitBlt(hdcBuffer, g_ballInfo.x, g_ballInfo.y,
g_ballInfo.width, g_ballInfo.height, hdcMem,
0, 0, SRCAND);
SelectObject(hdcMem, g_hbmBall);
BitBlt(hdcBuffer, g_ballInfo.x, g_ballInfo.y,
g_ballInfo.width, g_ballInfo.height, hdcMem,
0, 0, SRCPAINT);
BitBlt(hdc, 0, 0, prc->right, prc->bottom, hdcBuffer,
0, 0, SRCCOPY);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
SelectObject(hdcBuffer, hbmOldBuffer);
DeleteDC(hdcBuffer);
DeleteObject(hbmBuffer);
}
¤s.l.Il ¤I.oVl _º ,i>..zIl ,.¸Il >çí _s. li± ¸..a, l.l.l . _zî, L,..Il .V.>\l
_î,¡Il ,li>..l _º BALL!NFO e¸îIl >la.l¸ ¿ºço _Ic Uç±>II . i> .V.>l ¤Ls. i>ç.º :I> ¿o¸
¤z¡o ...
urIn¸I _¡5IíII _jjniII
eiºl.Il ¸l¡> ¸l,. _.so _º e¸.l.o :.loç.¸ _za. lzI HDC z, ,çs. cl ¤.l.II _î
:.z¡o ¤,l¡. _.º .,i>. ¤,Iza. ... _º ¤.çIzIl e¸ç±II :olz.| _.º¸ ¿l.sIl ,.¸. ,çs. cl ia. V.o
_Ic :>ol.¸. _±>, cl _.º l>ç.Il ¤,sI>II l±,o¸ ,i>..zIl c¸, cl l±i.c _îz,º _L.Il
clçIVl. e¸ç±Il ¤,La. ¤±¸º . ,.¸Il .l,Izc e¸.í ¿o¸ :¸.ç,.zí L. ¿o _,oçIl c|º l±¸l¸î.¸
e¸,.í ¤L.>I¸ _±çsí ¸i.,. ¤,l¡.Il _º¸ _ç±ç. ¸¡L,. .
,l ],|e|| Win32 AP! .|L,l:||, .s,||
www.c4arab.com www.winprog.org 90
¸oVl U¸l _º .loç.¸Il _í _zc UV> _o ¤Ll... ¤I> :I> ,c¸ l..îz,¸ ¤,laII _Iso li±
_,¸L _c Volí _î.Il _... ,. e¸íliIl _º BitBlt() ,.,. ¤.l.Il cl _.a, lzo ¤.l.Il _I|
_o e¸.l.o l¡.,i>. ¤,.¸o ¤I±s.o .l,Izc c¸> _o ei,i>Il e¸ç±Il _I| ¤z,isIl e¸ç±Il .
¤,Ls.Il e¸ç±Il _.so V¸l _... :I> _zaI (HB!TNAP) ¤sL.zIl _lso _s.. e¸íliIl _º
¤.l.Il _o l¡,Ic ,.¸Il >l¸zIl . ¸l¡>Il ¸l,. _.szI l±,l _l.>. lzí ) HDC ( ¤,Ic ,çs. çiIl
. _aLszIl _..Il. BitBlt() ç>. ¤,Ls.Il e¸ç±Il .
HDC hdcBuffer = CreateCompatibleDC(hdc);
HBITMAP hbmBuffer = CreateCompatibleBitmap(hdc, prc->right,
prc->bottom);
HBITMAP hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
¸Il l..îz, e¸íliIl _º clîo _Ic l.I±> iº¸ cVl ,i>.... ,.¸Il .l,Izc _í ¤,º ,.
hdcbuffer _o Vi. hdc ) eiºl.Il ( l.Izc _¡.. _.> e¸íliIl _º ¤,Ls.Il e¸ç±Il _º Ls>.. _.l..Il¸ .
ei>l¸ ¤aº> eiºl.Il _º _zaIl _olí _.. l..îz, l±ia. .
BitBlt(hdc, 0, 0, prc->right, prc->bottom, hdcBuffer,
0, 0, SRCCOPY);
í li± _.lso _>z. l±ia. _. _ HDC ¸ HB!TNAP >l.azIlí .
_±,_ l, _¸.1 .±l±, _¸±1_ __¸±.
.cl±zIl ç¸íliIl Ls>Il _º ¤Iza..zIl ¤,Ls.Il e¸ç±Il ,i±¸ l..|. .zº Ul.zIl li± _º
¸lL| _í _º ) frame ( .Izc ¸>lº cçíl cl .>¸l _..V l.l.l li± l _Ic cl eiºl.Il UlçLl _,ºl
.., li¡I ¸s,. l..| _Ic >ça.Il _.> ) buffer ( ¿ºço _º _,ia.Il ,., lzI elç.>o _V>..l¸ i,i>
¸s,.Il ,,>>. e>lc| _Il.Il.¸ eiºl.Il . ¤,Ls.Il e¸ç±II _,¸s,.. _,¸±.Il. ,çs. cl ¸i>Vl _o cçî, iº
_,Iol. l.çî, cl _Ic ) Global ( ¸l l¡.s. ,,>>. e>lc| _Ic eiºl.II _z., V lz¡.o çl¸ _.>
_í _º ¸s,.Il ,i±¸ l..| _o Vi. li±¸ _îí eiºl.Il ,,>>. e>lc| ,., lzI ¤,Ls.Il e¸ç±Il ,,>>.
e¸o . _Ic ¸>l _. çl ¸l ¤,oç.¸ ¤.aI _,.>. _º .c¸. ..í lo l>| :,Ic ¸±.s, .çI.Vl li±
:Ii. ¤ºVc .
Lõg¸I _iõ
_í ¸,¸>.. ,çs. cl _.>Vl _o ¤.|º l..iºl. ,i± ,., lzI ei± l..Il> _º¸ e¸>.>zIl >¸lçzIl
l.s,.L. _º ¤>l¸>|. l.zº çiIl .ºçzIl _... V . ¤IliIl lci..| ¤Ll...¸ l..îz, ¤ºls,\
KillTimer() l..\l ¤,Izc _º el.oi>..l çiIl .¸azIl ¸,¸z. ¿o .
KillTimer(hwnd, ID_TIMER);
,l ],|e|| Win32 AP! ¸|,|X|, L,Ll| ,:||
www.c4arab.com www.winprog.org 91
!v ¸[qig[¡ ]q[3[ .¸ii[
_º¸zIl Ul.zIl : e font_on
IghnI _,¸n
¤,oç.¸Il ¸l¡>Il ¤¡>l¸ :Iz. ) GD! ( _,çIl. ¤±l>Il 32
¤cl.LIl .¸¸> ¿o _ola.II ¤a.l¸Il .l,.lîo\l _o ¤cçz>o
¸ço¸Il .lcçz>o¸ .laIIl Llz.Vl ¤sI.>zIl . :I> .ç,c i>l
>i>Il _,>o¸.zIl .,>, lo l¸,.í LçL>Il. _ola.Il cl ç± . ¤IliIl
CreateFont() Il ¤Il> AP! l¡.l,L _º _z>. ..lí LçL>Il _I| ..l lzI _I¸Vl 1+ i,i>.I l¸.ol¸l.
c¸>Vl _.l±>Il .I.>o¸ ¤I.laIl _¸aIl Lz.Il ¿ls.¸Vl .
,,sIl ¤,º _za... l..ls,.L. _º _zaIl _o ¸,.îIl¸ ¸¡L. lzí ¤.a± _î. ,I ¤s,s>Il _º _îI
¤,±l¸.ºVl ) default ( .l¸.ol¸l.Il _í cl lzí ) o lic l 2 ( ¤z,sIl _º l¡a±¸ _îz, ¤IliIl ei¡I ¤a.l.Il 0
¸l NULL _±l¸¸ ç>lc L> ¤.c _.., lzo l¡.lîo _º ¤,±l¸.ºVl ,,sIl ,li>..l. _ol.¸.Il ,çs,.¸ .
¤IliIl CreateFont() l.I i,a. HFONT _sL.zIl L>Il _.so ç± çiIl¸ (Ligical Font
Handle) e¸íliIl _º . . ¤aºlçIl .l.l,.Il e¸o| .> ) e¸L,. ( _î,± _º l¡.>la..l _îz, _.szIl li±
¿ç. _o LOGFONT ¤IliIl Ulza..l. GetObject() _î,± _o _îz, lzí lolz. B!TNAP _o lºVL.l
¤,Ls. e¸ç± _.so ) HB!TNAP .(
_î,¡Il l±cl LOGFONT .l¸.ol¸l. ¿o l¡.a,.L _º _ºlç.. CreateFont() :.îz, :.>l¸I¸
l.o L> l..| _î,± UV> _o e¸. LOGFONT :I> _º Vza..o CreateFont!ndirect() . i,so li±
_a.Il ¸,,a. Lsº i,¸. loi.c ls..o >ç>ço L> _.so _o i,i> L> l..| ¤,Izc _a>, ¤.l lz. li>
¤.lz. _o . _za..l GetObject() _î,± _zI LOGFONT l¡,º .c¸. _.Il l±cVl ,,º _º Uic
l..|. ,º ,. ¤IliIl. i,i> L> CreateFont!ndirect() .
HFONT hf;
HDC hdc;
long lfHeight;
hdc = GetDC(NULL);
lfHeight = -MulDiv(12, GetDeviceCaps(hdc, LOGPIXELSY), 72);
ReleaseDC(NULL, hdc);
hf = CreateFont(lfHeight, 0, 0, 0, 0, TRUE, 0, 0, 0, 0, 0, 0,
0, "Times New Roman");
if(hf)
{
DeleteObject(g_hfFont);
g_hfFont = hf;
}
else
{
MessageBox(hwnd, "Font creation failed!", "Error",
,l ],|e|| Win32 AP! ¸|,|X|, L,Ll| ,:||
www.c4arab.com www.winprog.org 92
MB_OK | MB_ICONEXCLAMATION);
}
_¸iIl li¡I l.Il.o e¸ç± _º L>Il l..| _º iz.azIl >çîIl ç± li± . ç± L>Il Times New
Roman ,>>. 12 _.lo Lz.¸ ¤Ls. ) !talic .( cV,zIl ¤,l¸ ) italics flag ( _o ¸.ol¸l. _>l. _º ¿s.
¤IliIl .l¸.ol¸l. CreateFont() I ¤,¸l.o ¸.ol¸l.Il li± ¤z,º l.Ia> l..l ¤L>Vo :.îz, .,> TRUE .
¤IliIl _º ¸.ol¸l. ¸>l _.z,º ei,¸. çiIl L>Il ,.l lol .
¸.ol¸l.Il L>Il ,>> _º ¤Iza..zIl ¤z,sIl ç± li± l.Il.o _º ¿¸l¸zIl >çîIl ¸> lfHeight
¤IliII CreateFont() . ¤Ls.Il ,>>. _zaIl _Ic cçoi>..zIl >l.cl isI ) Point Size ( ,>> 10
,>> 12 ... ola.Il i.c _I| LçL>Il ¿o _ . lz.,. CreateFont() _. ¤Ls.Il ei>ç. ,l>>Vl _.s. V
_,. _.>¸ _. :.a.lL _º _± lzí :..l. _º ¤sI.>o ¸..a. _.Il¸ ¤,sL.o .li>¸ .IL..
.la.lLIl¸ .l.l.Il .
¸>V ¸l¡> _o .I.>. _ç±çIl ¤º> cl ç± ¤,a±çIl ei± _.o >ç>çI ...Il ... l¡.îz, .la.lLIl
_o _¸c 600 | _I 1200 çI ¤LçL>o ¤.l.Il cçî. iº lz.,. ¤Iç¡. _î. ¤±ç.Il _º _.î.
_Ic .I±> 200 ... ¸,c cçî. isº ¤a.lLIl¸ ¤.l.Il _o _í _º L>Il ,>> _s. .oi>..l lo l>|
¤,>¸sIl .¸¸>Il ¤,]¸ _Ic _.> ¸>lº .
>Il _I| ei,¸. çiIl ¤Ls.Il ,>>Il _o _,ç>.Il ç± ¤. ,l,sIl. _,.IlLo _>. lo _í ,>
¸l¡>II _sL.zIl . ¸l¡>Il ¸l,. _.so _I>... c>| _¸aIl ¤.l. ç± ¸l¡>Il li± l.Il.o _º
¤.l.Il. _l>Il ) HDC ( ¤IliIl ,li>..l. ¤±ç.Il _º ¤,sL.zIl .V.î.Il >ic _Ic _±>.. ,.
GetDeviceCaps() Il ¤..îo _º l¡. ,¸î.Il ,. ¤I>lao _º :Ii. ¿ºi.¸ NSDN _za... _.Il¸
NulDiv() ¤Ls.Il ,>> _o _,ç>.Il. ,çs. e¸,>Vl ei± 12 çiIl _,>±Il _sL.zIl ,>>Il _I|
¤.º¸.. CreateFont() .
s_±1¸.±!1 ±¸±±11
¸oVl C>l. _º _ci... lzI GetDC() :.iºl. ¸l¡> ¸l,. _.so _Ic Uç±>II ) HDC (
c¸. lo e¸¸¸±Il. _,I _îI ,lL.II ¸,.>l çiIl :l> cçî,. _±l¸.ºVl L>Ilº ¤,º . . _,.. L..l
¤. _zaIl _îz, ..l.o L> _Ic Uç±>II ) _I| ç>IIl c¸> _o CreateFont() ( UV> _o ç±
¤IliIl lci..l CreateStockObject() I _±l¸.ºVl L>Il Uç> ¸l.s..Vl¸ ,i>..zIl ¤¡>lç
¤,oç.¸Il ) DEFAULT GU! FONT .(
i,¸. _.o elci..l :.îz,¸ ,lL.Il .l..lí _o _.lí li± _o .ç>Il c¸> ei,ic .l¸zI¸
¤IliIl lci..l :Iií _îz,¸ _. e¸íliIl .l¸...l DeleteObject() çl ¤I _as. _I _.Il¸ ¤,Ic
_o clíl :L> ¸i±o ¤a.l.z. l.IlLo cçî. V :.V _,z> _. li±¸ _. CreateFont() _o ¸l
GetStockObject() e¸,¸>. ¤I¸l>o _.º .
_,¸niII _i
l lz.¸ cVl _¸.s, li± ¤.l.Il _Ic _. _Ic Uç±>Il l..îz, .,í l¸l.zo lL> :Iz. l..
¸,¸>. ,î>. ,li>..l _º l...c¸ ,ic ) control Edit ( ..l. ,î>. ¸l ) Static control .(
_± ¤,.l.Vl :.l¸l,> TextOut() ¸ DrawText() . _I¸Vl ¤IliIlº TextOut() L..Vl _±
_za. V _¡º ¤,.c ..,I l¡.îI lºls.Il :I ) wrapping ( el>l>o ¸l ) alignment .(
,l ],|e|| Win32 AP! ¸|,|X|, L,Ll| ,:||
www.c4arab.com www.winprog.org 93
char szSize[100];
char szTitle[] = "These are the dimensions of your client
area:";
HFONT hfOld = SelectObject(hdc, hf);
SetBkColor(hdc, g_rgbBackground);
SetTextColor(hdc, g_rgbText);
if(g_bOpaque)
{
SetBkMode(hdc, OPAQUE);
}
else
{
SetBkMode(hdc, TRANSPARENT);
}
DrawText(hdc, szTitle, -1, prc, DT_WORDBREAK);
wsprintf(szSize, "{%d, %d, %d, %d}", prc->left, prc->top,
prc->right, prc->bottom);
DrawText(hdc, szSize, -1, prc, DT_SINGLELINE | DT_CENTER |
DT_VCENTER);
SelectObject(hdc, hfOld);
Il _º >l¸zIl L>Il _Ic Uç±>Il ç± e>lz.cl. cç.IlLo _>. _. U¸l HDC ,.¸II e¸,¡>.¸ .
¤.c _,i. ¸l,.>l ,., cl _I| L>Il li± ,i>.... ¤,IlçzIl _ç±.Il _í .
¤,sI>Il¸ _.Il clçIl >i>. l±ia. . cçIIl li¡. ¤Iolí e¸,>Vl ei± _a>, V ¤,sI>Il cçI i,i>.
_a. _Ic Lsº ¸.ç, lz.| .l,IzaIl ) _.Il l±li>| ( ,.¸ el>lí ¤,sI>Il cçI ,i>... _.Il . :Iií li±
_Il>Il ¤,sI>Il ¸l¸L. _Ia., ) Background Node .( ¿±çIl _º e>i>o ..lí l>| " ,.lc ) " OPAQUE (
¤,sI>Il cçI. .I>Il _º ¤.Io ,.,. ,ç.¸o _. çl c|º ¤,±l¸.ºVl ¤z,sIl _±¸ . ..lí l>| lol
¿±çIl _º e>i>o " ls. . ) " TRANSPARENT ( ¿s, _. çl¸ ¤,sI> c¸> _o ,.¸,. _.Il c|º
¸.l çl l¡I _,I ¤Il>Il ei± _º ¤,sI>Il cl çl ¸¡L,. el¸¸ .
_,oi>..o _.Il ,.¸. cVl _>. ¿ºlçIl _º DrawText() _.szIl ¸¸z. ) HDC ( >ç. çiIl
¤z.¸ i,¸. çiIl _.Il¸ ¤oli>..l . >Il ¤I.I.Il UçL ç± ¸.ol¸l. .Il. ¸,¸z.. l.zº l..îI ¤,º¸ - 1
cV DrawText() l¡.s.. _.Il UçL ...î.. .,>. ¤,lsîIl ¤,º lz. ¤c¸l. . çiIl ¿.l¸Il ¸.o¸l.Il
e¸¸z. ) prc ( _,zaIl _,L..o _I| ¸.ço ç± ) Client RECT ( ¤IliIl DrawText() ,.¸Il. ,çs..
.l,l¸Il ¤,s. _Ic e¸î.¸o _,L..zIl li± _>l> ) flags ( çs. _.Il l¡. l±i,¸¸.. ..l , .
_I| l.¸.l lci..l U¸l _º DT_WORDBREAK _í¸Il ç>. el>l>zIl _Ic _.. _.Il¸
_,L..zIl .lç> i.c l,.lsI. _.Il .I. l±,l¸ ¸.,Vl ççIaIl ... li> ei,so .
_º cçî, cl :Iií ei,¸.¸ .ls.Il c¸> _o i>l¸ L> ¿.L. Lsº ,çs. _.l.Il lci..Vl _º
l,sºl L.çIl l,>çzc¸ ) ¤. ,çs. çiIl¸ DrawText() i>l¸ L> ,.¸ i.c .(
,l ],|e|| Win32 AP! ¸|,|X|, L,Ll| ,:||
www.c4arab.com www.winprog.org 94
¿.¸11 __±_ __,±11
l.Il.o _ol.¸. Uç> ¤L>Vo Lsº ... _,>.. i.c WNDCLASS _Lz. _í >lic|. .zº _.|º
¤.sIl CS_vREDRAW ¸ CS_HREDRAW . ,.¸ e>lc|. ,çs. cl _,zaIl ¤sL.o _Ic _¸s, li±
zIl lz.,. eiºl.Il ,,>>. i.c l¡.s. Lsº ¸,,a.II ¤±¸azIl l¸>Vl ,.¸ e>lc| ,., cl ç± _¸¸s . :I>
¤.çz±o .,i>.. ..l ,çs. V¸ ..l> _í _o :¸>., L.ç.zIl _.Il cl lz. l. ,. ¸i., .
IghnI jI,inI
¤LçL> ,i>..zIl ,i>.., cl _º .c¸, LçL>Il ¿o _ola., _ol.¸. çl ¤olc ¤s±.
VI ¤...Il. Ul>Il ç± lzí lolz. ¤±l>Il li¡. _zaIl i.c l¡Ilza..l _îzzIl _.l±>Il¸ Llz.Vl¸ clçI
L>Il .
.l¸lç> l±,l :l.± .lsIzIl lz.l Ls>¸ _.º .la.¸o _Ic Uç±>II ¤a.l.Il .l¸lç>Il _.o
L>Il ¸l,.>V ¤a.l. . ¤IliIl lci..l. li± ,., Ulî.| c¸> _o¸ ChooseFont() ¿o _ola... _.Il¸
_î,¡Il CHOOSEFONT ¿±. _îI ¤,l¡. _º l¡. e>çaIl _îz, lzí l¡. i.Il _îzzIl ¤,±l¸.ºVl ,,sIl
L>II ,i>..zIl ¸l,.>l ¤,Izc .
HFONT g_hfFont = GetStockObject(DEFAULT_GUI_FONT);
COLORREF g_rgbText = RGB(0, 0, 0);
void DoSelectFont(HWND hwnd)
{
CHOOSEFONT cf = {sizeof(CHOOSEFONT)};
LOGFONT lf;
GetObject(g_hfFont, sizeof(LOGFONT), &lf);
cf.Flags= CF_EFFECTS |CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = g_rgbText;
if(ChooseFont(&cf))
{
HFONT hf = CreateFontIndirect(&lf);
if(hf)
{
g_hfFont = hf;
}
else
{
MessageBox(hwnd, "Font creation failed!", "Error",
,l ],|e|| Win32 AP! ¸|,|X|, L,Ll| ,:||
www.c4arab.com www.winprog.org 95
MB_OK | MB_ICONEXCLAMATION);
}
g_rgbText = cf.rgbColors;
}
}
¸.ol¸l.Il hwnd .lí l¡Iza... cl i,¸. _.Il eiºl.Il _I| ¸,., lci..Vl li± _º ) parent (
L>Il ¸lç> ¿.¸zI .
_î,¡Il ¿o ¤.l¸.ºl. ç± ç¸lç>Il ¿.¸zIl li± ,li>..V _,¸L L..l LOGFONT i>lç.zIl
¿ç. _s. _o .IlaIl _º çiIl¸ HFONT :s,.L. _º _za..zIl . l.a±¸ isI lpLogFont ç± çiIl¸
ç±c ) member ( _î,¡Il _I| ¸,., _îI _î,¡Il l±cl _o LOGFONT _,Iº i.o ¤.Iz. l.zº çiIl
¤,l¸Il ¤ºl±| _.º¸ ¤,Il>Il l..loçIaz. CF_!N!TTOLOGFONTSTRUCT ¤IliIl .¸a.. _.>
ChooseFont() ç±aIl li± _za... .,í . ¤,l¸Il lol CF_EFFECTS ¸.>. l¡.|º ¤IliIl ChooseFont()
¸L.zIl ¤s± l±,l¸ cçIIl ¸l,.>l _o ,i>..zIl _,îz.. ) Underline ( .ls±Il ¤,s.¸ .
_,¸> lz¡.l _Ic lz.|¸ _,¸.ço lz¡.l _Ic cli>ç. V _.lo¸ L,Ic _,Lz.Il .,>aIl _.Il
_.lo ¸l L,Ic Lz. _º Lsº _.l. LçL>Il _a. ¤s,s>Il _º¸ ¤.s. L>Il _o . .>¸l l>| ¸l _>s. cl
_î,¡Il çç±c ,,º _º _,ºi.Il :.lîo|. ¤.|º _.lo ¸l L,Ic L> ¸l,.>l _o ,i>..zIl ¿.z.
LOGFONT :Ii. i±s.¸ : !fWeight ¸ !f!talic ¤.l¸l,.>l i,i>.. ,i>..zIl ,lº cl ia. .,.¸.Il _Ic .
Vl ,,º _º ¸,a, lo _. ¸l ¸>l ¸l,.>l _zc _Ic ,i>..zIl .>... cl l±ia. :.îz, _.º lLc
¤IliIl lci..l CreateFont!ndirect() .
¿o lL..¸o _,I L>Il cçI HFONT ç±aIl _,I±s.o lz¡.,¸>. .>, :IiI rgbColors ¿.l.Il
_î,¡II CHOOSEFONT UV¡..Vl cçI _º e¸,¸z. _º _za.., ) initial ( lz,º i,i>Il cçIIl >l>,|¸
ia. .
¤,l¸Il CF_SCREENFONTS i,¸. l..l _,., :I. _Ic ¤.l.Il _Ic _zaII ¤zz±o lLçL>
.la.lLII ¤zz±zIl . lz±i>l ,ci, _a.Il¸ _,¸l¡>Il Ví ,ci, _a.Il . l¸¸ _o .i¡Il. _Ia., ¸oVl
L>II :oli>..l . Il ¤..îo _º l±>l>,| _îz, .l,l¸Il ¤,s.¸ ¤,l¸Il ei± NSDN ¿lç.l lolz. >i>. _îI
..zIl l¡.o ¸l.>, cl _îz, _.Il LçL>Il e>l¸o ,i> .
jI,inI _IgIyI
I _z.. _î ,i>..zII ,a, cl. L>Il cçI Lsº ¸ ¸l ¸l.>, cl .çI l i,i> l _,. çV _Ic
¸VL\l º :l.¡ :¸..zIl ¸lç>Il ChooseColor() . _o ,i>..zIl _,îz.I _za..zIl >çîIl ç± li±
l.Il.o _ol.¸. _º ¤,sI>Il cçI ¸l,.>l .
COLORREF g_rgbBackground = RGB(255, 255, 255);
COLORREF g_rgbCustom[16] = {0};
void DoSelectColour(HWND hwnd)
{
CHOOSECOLOR cc = {sizeof(CHOOSECOLOR)};
cc.Flags = CC_RGBINIT | CC_FULLOPEN | CC_ANYCOLOR;
,l ],|e|| Win32 AP! ¸|,|X|, L,Ll| ,:||
www.c4arab.com www.winprog.org 96
cc.hwndOwner = hwnd;
cc.rgbResult = g_rgbBackground;
cc.lpCustColors = g_rgbCustom;
if(ChooseColor(&cc))
{
g_rgbBackground = cc.rgbResult;
}
}
¸.ol¸l.Il ,i>... c¸>l e¸o li> L,.. li± hwnd ¸lç>Il ¿.¸zI .lí . ¸.ol¸l.Il CC_RGB!N!T
¸.ol¸l.Il ¸.c el.¸¸o çiIl cçIIl. i.Il _I| çci, rgbResult ,çs, lzI ¤,Ic _±>. l±,l çiIl¸
¸lç>Il ¿.¸o _Ia., loi.c cçIIl ¸l,.>l. ,i>..zIl .
¤ºçs±zIl g_rgbCustom .l> 16 ¸±.c ) element ( ¿ç. _o COLORREF ¤,l Ls>I ¤.çILo
¸lç>Il ¿.¸z. ¤±l>Il clçIVl U¸i> _º l¡a±¸ ,.,I ,i>..zIl l±¸¸s, ,,º . ei± Ls>. cl :.îz,
:>ol.¸. _¡.., lzI iss.. l¡.|º V|¸ V.o _>.Ilí lo clîo _º ,,sIl . l,cçL _,I ¸.ol¸l.Il li± )
optional .(
_5niII Ighn
.º¸ _º i,¸. iº eiºl.Il ¸l ¸lç>Il ¿.¸zI ¤a.l.Il .lzî>.Il _Ic _o L>Il ¸,,a. lo . cçî. e>lc
¤IliIl ,li>..l i.c ¤Il>Il ei± CreateWindow() l..I.ol _º :I> _I| l.¸.l lzí .lzî>.Il l..\
¤s.l.Il . l.oi>..l c>| eiclsí ,lL.Il _za... iºlç.Il _.o .lzî>.Il WN_SETFONT ¿±çI
i> L> _.so i, ) . GetStockObject() ( ¤Ilza..l >l¸zIl ,î>.II . ¿o .çI.Vl li± ¿l..l _îz,
. l¡.... _.Il LçL>Il CreateFont() l±,l . í L>Il _.so ¸,¸z.. ,º ¤Ll... wParam _a>l¸
lParam ¤z,sIl _º TRUE ,.¸Il e>lc| _.s, ,î>.Il _a>I .
_s. _.a, ¤.îI _.l.Il Ul.zIl _º li¡. .zº isI ¤ºVc _Ic ¤.V l.± ¤I l.¸íi. _.Il
li> ¸±.>o¸ :
SendDlgItemMessage(hwnd, IDC_OF_YOUR_CONTROL, WM_SETFONT,
(WPARAM)hfFont, TRUE);
.,> hfFont L>Il _.so la.L ç± (HFONT) ¸ ¤Iza... cl i,¸. çiIl
!DC_OF_YOUR_CONTROL ,î>.Il .¸ao ç± ) control !D ( ¤L> ¸,,a. i,¸. çiIl .
,l ],|e|| Win32 AP! |\:|::s|: _e:, _l|,., ,:L
www.c4arab.com www.winprog.org 97
_.l.¸¸ .j.s,
! |as|i.g|, )ei¿ µl[¸,¡ _.@
Li5II
..í ç± :I _,ao _.>lº :zIa. l..l e¸.l.o cçaIl i, :I iz, _o _c .>.. ..í lo l>|
ei,> . _çIçI l>l.so Lsº lz.|¸ l¡,I| .>.>l lzIí l¡,I| ¿>¸. ¤..îo l±¸l..cl _îz, V l.± l..¸¸iº
.Il ,Ilc ..îIlº li¡I l>¸. L..l V¸ ¤º> ¸.íl _î. ,I l¡.l L>V. .,> ¸¸i.,çIl ,lL. .>. ¤>o¸
_zIa.Il :>l¸o _,s>.I _,.. _±ºl _¡I .,.¸..Vl ¸.c e¸ºç.zIl
iºlç.Il ¤>o¸. ) programming windows (
iI¸¸.,. ¸I¸l.. .,Il. ) Charles Petzold .( _,çIl ,Ilc _I, .l.îIl 32 . _ol¸. ¤.l.í >ç. ..í l>|
Il Ul¸> Lsº _za... AP! ) .l.îIl li± _º el.I¸l.. lo li±¸ ( .l.îIl li¡I _l.>. :.|º .
Il. iºlç.Il ¤>o¸. NFC ) Programming Windows with MFC (
.,Il. .,> ¸,l.¸¸. ) Jeff Prosise ( . _º ¤º¸l>zIl .>¸l l>| Il NFC ) ia. cçî. cl l>l.ao lolz.
_Ic ,li>..l Win32 AP! ( º .l.îIl li¡ ¤>ço :I . l>| .í . .>. V Il NFC _îI . _Ic ,¸.a
_zc _Ic Uç±>Il .ls,.L. ¸,çL.. _.>, iºlç .Il Vl¸ _¸aIl. _s, .l.îIl li± _Ic Uç±>Ilº _±º
_o .¸a. cl .¸a. V cl .
¤>o¸. ¸¸i.,çII .ls,.L. ) Programming Applications Ior Windows (
¸.í¸ ç¸s,> .,Il. ) Jeffrey Richter .( c>| .,.¸..Vl. i¡aIl _.,i>I l¡>ço _,I .l.îIl li±
.li,¸.Il¸ .l,IzaIl e¸l>| >ç. ..í l>| ) processes 8 threads ( _î,ol.,iIl L.¸Il .l..îo ) dll ( e¸l>|
.ll....Vl¸ lL>Vl ¤>Ilao ¸¸i.,çIl e¸íl> ) exceptions ( _í .>¸l l>| ,lL.Il .Iº _º ¸l>.Vl¸
.l.îIl li± l..ºl. V| :,Ic lzº li± .
¤>o¸. . _. Uç>,sIl. ¸¸i.,çIl Ul ) ++ visual C ++ Windows Shell Programming (
ç.,¸ç..| ç.,> .,Il. ) Dino Esposito .( ¸¸i.,çII ¤,.¸zIl¸ ¤L,..Il .lz.Il. ,.¡, _>. çV
.Vº\l¸ .>.Il¸ .lsIzIl ¿o elsî. _zaIl ¸¸i.,çIl Ul.I .l>li.oVl ,,z±. _La, .l.îIl li±
Il>Il L,¸. _,±>. c¸>Vl _,>Il _o i,iaIl¸ ¸¸i.,çIl ..î..o¸ ¤ . _º .c¸, _zI li> i,so
¤,oç.¸Il ,i>..zIl ¤¡>l¸ .ls,.L. ¤.l.í ) GU! ( ¸¸i.,çIl ,lL. .>. .
¤>o¸. ¸¸i.,¸ .s.¸¸î,lzI ¤î..Il ) Network Program ming for Nicrosoft Windows (
I _l¸>| ¿o ¤î..Il _ol¸. _c .loçIazIl .i>l NetB!OS mailslots .V>io _,ç>. ¸ço¸¸
_ol¸.Il .l>¸>o¸ ) pipes ( ¤z¡zIl ¸¸i.,¸ _.lso :Iií¸ ) sockets ( Il. ¤Izîo winsock2
¸ raw sockets . ¸¸i.,çIl .l±.o .I.>o _>. .loçIao _Ic :Iií çç.>, :I> _z±.,¸ 2000 ¸ CE .
,l ],|e|| Win32 AP! |\:|::s|: _e:, _l|,., ,:L
www.c4arab.com www.winprog.org 98
LyogII
¤..îo Il NSDN
_í _z±.. ¤..îzIl ei¡º ¤.îzzIl .ºç.¸¸î,lo .l,>çIç.î. _îI ¿>l¸o ,±, ¿ºçzIl li±
Il _.l.¸ Win32 AP! ¸ NFC . _. Uç>,sIl ¤o¸> ¿o e¸ºç.o _î. ,I l>| ¿.LIl. ++ ç>. _.Il ,. :.¸
.loçIao _o ¤>l.>. lo _î. :> ¸¸,. _.l>zIl ¿ºçzIl li± . _,¸>Vl _Ic ¤I..l _¸L c¸> _o ¸is.¸
Il ¤..îo ei± _º l.>. .,¸>l lo l>| :.Vla..l _Ic ¤.ç>l i>. cl _o NSDN .
I ¤,.,.¸Il ¤>s±Il #winprog
e¸l,¸ ia. :.îz, lcç,. ¸.íVl ¤I..VI ¤.ç>l i>. cl _o ¤>s±Il ei± ) FAQ .(
,l ],|e|| Win32 AP! ja e:X,,:| i,:|[| ,.|,X| ,La .|,e| --
www.c4arab.com www.winprog.org 99
!! gæ Qql¿n|i J¿i|3[ ¸,[¡g[ ¸[æ ¸[¡¸| ··
¡,IgyI ¡hm _Ir _gnnI
ºç.¸¸î,lo .olº isI . .¸±o ¸VL|. ) compiler ( ¸ol¸Vl ¸L.I L.l¸Il .l¸>l¸ ) command
line ( .. .¸iIl _ol¸. ¸,çL. _zc ¸lL| _o ¸>í ) NET Framework Software Developement Kit . .(
Il _zc ¸lL| SDK .. .¸iIl ¸,çL.I ¤,I| _l.>. _. _î. _.l. ) .¸l. _.Il .¸±o C# ... _I| (
¸ol¸Vl ¸L. .¸±zI :Ii. l.z±.o cl.exe .. .¸iIl _zc ¸lL| ¿o Ulza..VI ¤>ço ¤.l ,c¸ çiIl¸
_. Uç>,sIl ¤o¸> ¿o _º¸zIl .¸±zIl _s. ¤.l V| ++ ¤,.l,sIl .
.II _¸r jIh| SDK Li LgiII ! jgiijg LIhii XP gÌ 2000 \
.. .¸iIl _ol¸. ¸,çL. _zc ¸lL| ç± li± cl lz. ) .NET SDK ( _l¸Il .lsIo ¿o _.l. V l¡.|º
) s header ( Il ¸,çL.I ¤.çILzIl .l..îzIl¸ Win 32 AP! Il ¤±.o _o ¸> ei± ¸l..cl _Ic SDK . lzí¸
Il ¤±.zº ,çIao ç± SDK l.l>o e¸ºç.o . ç± ¤,I| _l.>.. çiIl i,>çIl _.Il Core SDK li± _îI
:.l.c¸ ..> c¸>Vl .l..lîIl¸ ¸±l.aIl ¤,s.. >¸¸.. cl _o ¿.z, V .
¤±.o Il SDK
Il ¤±.o _.l.¸ _,z>.. .zº l>| elºlîzí SDK ) ¤. :>±.l çiIl¸ ( :.lîo|. cçî,. ¤.|º
_,çIl _o ¸li±| ¸>l _Ic Uç±>Il 32 Il ¤..îo _I| ç>IIl c¸> _o¸ NSDN ..¸..Vl ¤î.. _Ic .
.xì uI_l,>ìI _>ß _Síi ¤b,>oìI uI_,nxoìI _,> ) Environment Variables { qß
ìI qx,x; VS SDK ¸l.zIl >lic\ _l.>.. :.|º V|¸ ) PATH ( _.º :.s.. .l¸,a.zIl ¤,s.¸
¸ol¸Vl ¸L. ¿o .l¸>Vl ,li>..l .
¡,IgyI ¡hm _I¸rimI
Il ¤..îo _º e¸ºç.o l¡.l lz.¸ ¤Iolí¸ ¤oç¡so _.l.¸ :Iz. l..l lz. NSDN _l.>.. :.|º
_. Uç>,sIl ¤.,. .l¸>l¸ .¸±o ¤.l¸iI li±¸ :.s.. _,IiIl ¤aIlLzI .++ :,I| _zaIl ¤,li.I
_ol.¸. l..I _,¸L L..l ...
cl Ioo.c
_,IiIl li± _º l.Il.z. ¤,.. L,.. ¸¸i.,¸ _,.L. l..I :
rc dlg¸one.rc
cl dlg¸one.c dlg¸one.res user32.lib
,l ],|e|| Win32 AP! ja e:X,,:| i,:|[| ,.|,X| ,La .|,e| --
www.c4arab.com www.winprog.org 100
!!! 3[ ¸,[¡g[ ¸[æ ¸[¡¸| gæ ¸ig¸q,i J¿i| ··
¡,IgyI ¡hm _Ir _gnnI
¸ol¸Vl ¸L. .l¸>l _¸a. .olº i.V¸ç. ¤í¸.º ¸¸i.,çIl ¸,çL. ,Ilc _çI¸ i,¸, _o L> _.>I
cl>zIl.¸ _,>o¸.zIl ¤olaI . ¤Iolî.o ¸,çL. ¤.,. çl i>ç, V ¤.V ,¡.iI _o ls,LI _,I ) !DE ( ¸l
cl ¤I _>, V i>...zIl _îI >¸ço ¸¸>o ¤.l> i> _º .¸±zIl cl ¸l¸º\l _Ic .>, lzí _º¸,
_o _í _o ¸,.î. _.>l : LCC-Win32 ) _.Il ,ci, V _.> çiIl¸ (++ .l¸>Vl iºl.o .I.>o ¸l
c¸>Vl gcc mingw cygwin djgpp ... _I| .
.Io el¸s. ,º readme >lic\l ¤,Izc _c e¸îº i>V .
¸ol¸l ¸L. .5 5 ¹¹ Borland C
lL>l _Ilaz. lsº¸o _.l, ¤.l ç± :I> _º _,z>Il _.Il ) debugger .( V l.l ¤s,s>Il _º
_. V _o _±ºl li± _îI ¤±ç±>. ¸.íl .l>,±ç. ,iºl cl _..îz, V li¡I ¤Iza..l . çI :.l lzí
i>..l. .zº _. ç.¸,.Il ,l ++ :I ls,I> cçî,. li± c|º _¸iIl ,lL. .>. .
,º c>| .IzIl li± _,z>.I _íl.o _sI, ¤.l ¸i., ¸¸çI..í| ..¸..l c|º .l..Vl _a.I l¸L.
¸.>l¸ _z,Vl _¸lzIl ¸¸. ¸s.Il. " Copy Shortcut " _,z>.Il. ,.¡, _ol.¸. _º clç.aIl li± _za..l ,.
) flashget V.o ( _îz..I ¤,Ic Uç±>Il _o .
_ol.¸. Turbo Debugger
Il ¿>¸o ¿o ¸¸i.,çIl eicl.o .Io l¸>l _,I¸ l¸,>l Win32 AP! _z.îzIl . lo lcç. ,,iº ç±
Il ¤..îo _o ¤oVo ¸.íl¸ _,º> ,çzaIl _Ic ¤.îI NSDN Ic .i>l _º ..c¸ l>| V| ¤î..Il _
Il _I| .lºl±\l AP! ¤.l.. _Is. Vº ,lL..l. ¤oli>..l. ,çºl çiIl¸ .
¿>¸o AP! 32 Win
¡,IgyI ¡hm _I¸rim|
s_.l.!1 ¸,1¸!1
Io .,¸±. i,¸. ..í l>| i,>¸ _ol.¸. . ) Ul.zí : simple_window.c ( Ulza..l :.lîo|. ¤.|º
¤,.Vl ¸ol¸Vl :
bcc32 -tW simple¸window.c
Uç>zIl ) tw - ( ¿ç. _o _,.L.Il cl _I| ¸,., GU! 32 Win Uç..çîIl _,.L. _o Vi.
_±l¸.ºVl . çi,s.. .Io _º .lsIzIl _o i,iaIl .,¸±. :.îz, i>l¸ ) .exe ( ¤,s. ¤ºl±|. li±¸
¸oVl li± ¤,l¡. _I| .lsIzIl .
,l ],|e|| Win32 AP! ja e:X,,:| i,:|[| ,.|,X| ,La .|,e| --
www.c4arab.com www.winprog.org 101
_¸1¸,11 ±,¸
:I> _º .>c V¸ ¸ol¸Vl ¸L. .l¸>V _,oi>..zIl _o ¸,.îI ¤L.>o i> ¤Il.o ei±
>¸çzIl .¸±zº _îz, lo .a±l :.ls,.L. _º >¸lçzIl L.¸ ¤,Izc .Ia> i.V¸ç. cl ¸¡L, .,> brc32
_º clí lzí _za, ia, ,I _s.. ¤s,¸±. ,. çiIl >¸çzIl L.¸. ,çs, clí .,> ¤s.l.Il ¤.l¸li±|
çi,s..Il .IzIl . _a.. lzI brc32 ¤.|º _zaIl ¤,s,í Uç> eicl.o _Ic _±>. _îI ¸l,> çl c¸i.
¤I,a..I _,.. V cl ¤.lí¸ ¸¡L, li±¸ çi,s..Il .IzIl L.¸ _,La. ¸l,> _¸a, .
.l¸l,>Il¸ ¸ol¸Vl .I.>o ..¸> isI >¸ço .Io _l¸>\ V,.. i>l ,I _.îI .í¸zIl ¿±çIl _º
) .res ( çi,s..Il .IzIl _I| ) .exe ( ¤s.l.Il ¤s,¸LIl. el.. ,. . ,l,sII isao i> .çI.l ¤.c _.. lzo
.lLzIl ¸>l _º ¤,Ic .I±> ¤,IzaIl. .
s±_.,11 s±_¸±11
_. i.V¸ç, ++ o _ol.¸.Il _º >¸lço _l¸>\ ¤I,i. ¤s,¸L :Iz. cVl ,li>..l UV> _
#pragma ¤,.l,º ..,I ¤,I¸l ¤>Ilao ¤z,Ia. 籸 ) non-standard preprocessor directive (
l¡IçIiz. ,Ic _Ic _î. ,I l>| c¸>l .lº¸±o l¡I±l>.. iº _Il.Il.¸ .
#pragma resource "app_name.res"
_.,.¸Il >çîIl .Io _º >çîIl li± ¿±ç. ) .c ¸l .cpp ( ,. .¸±zIl c|º .Io L.¸. l,Il ,çs
>¸çzIl .res .IzIl _o ei,Iç. ,. çiIl¸ .rc ) .IzIl .res .IzIlí ç± .obj >¸lçzIl _>, .(
Ulza..l #pragma ls.l. l±l.,l¸ _.Il ¤Ll..Il. lo i> _I| _ol¸. .,¸±.. :I _z.,.
>¸çzIl .Io .,¸±.. ,çs. cl :o¸I, _îI .rc _ol.¸.Il :I> _º Vza..o V¸l brc32 . ¸ .I¸lo l>| lol
_z,Ia.Il _I,I> _º .Iaº lzí ¸ol¸Vl ¸L. .l¸l,> ,li>..l _º .c¸. makefiles c>| el¸ºlº
) l..I.ol >lçíl ¿o e¸ºç.o .lsIo .(
-_±±,11 s±_¸±11
Ul.zIl .,¸±.I _za... ¤,.Vl ¸ol¸Vl dlg_one >¸lçzII _l¸>| ¿o li±¸ .
bcc32 -c -tW dlg¸one.c
ilink32 -aa -c -x -Gn dlg¸one.obj c0w32.obj,dlg¸one.exe,,import32.lib cw32.lib,,dlg¸one.res
:I> _z>l lo ... ¸l,>Ilº ) -c ( _ol.¸.II bcc32 _.a, : .Io çl. L.¸Il. ,s. V¸ .,¸±.Il. ,º
çi,s.. . _,¸l,>Il lol ) -x -Gn ( L.l¸Il _I>., cl ç± ) linker ( V iº ..l¸ l¡sI> ,., .lsIo çl _o
I| _l.>. l¡, .
¸¸szIl _.Il _,o¸Io cçî.. l..|º l,¸i, L.l¸Il ¸ol¸l i,i>.. l.ol,º >¸>z. l..l ç± l.±
¤,±l¸.ºVl .l..îzIl ¤z.lº _l¸>|. ) libraries default ( ,çs, cl .¸±zIl _Ic clí _.Il .l..lîIl¸
l.o Vi. l¡.,z±.. . ¸ _,.L.I ¤..l.zIl .lsIzIl i,i>.. .zº isº eVcl c¸. lzí _.l,º ¸¸i., .
,l ],|e|| Win32 AP! ja e:X,,:| i,:|[| ,.|,X| ,La .|,e| --
www.c4arab.com www.winprog.org 102
Il _º li± _î. ,çs. cl _.>Vl _o ¤.|º _îz, lo L..l _zaIl _a>I makefile . .zº isI
¿o ¤s,,î. _Ic l¸>lº cçî. cl _a..,¸ _z,Ia.Il l.I,I> ¤I.ol _í ¿o _zaIl ¤.îz, _ol. i>l¸ >lic|.
¤±l>Il :>ol¸. _o _ol.¸. çl .
APP = dlg_one
EXEFILE = $(APP).exe
OBJFILES = $(APP).obj
RESFILES = $(APP).res
LIBFILES =
DEFFILE =
.AUTODEPEND
BCC32 = bcc32
ILINK32 = ilink32
BRC32 = brc32
CFLAGS = -c -tWM- -w -w-par -w-inl -W -a1 -Od
LFLAGS = -aa -V4.0 -c -x -Gn
RFLAGS = -X -R
STDOBJS = c0w32.obj
STDLIBS = import32.lib cw32.lib
$(EXEFILE) : $(OBJFILES) $(RESFILES)
$(ILINK32) $(LFLAGS) $(OBJFILES) $(STDOBJS), $(EXEFILE), , \
$(LIBFILES) $(STDLIBS), $(DEFFILE), $(RESFILES)
clean:
del *.obj *.res *.tds *.map
¤±l>Il :.l,Lao ,.V.I _I¸Vl ¤..Il ¸L.Vl _,ia. ç± ¤,I| _l.>. lo _í .
,l ],|e|| Win32 AP! in:|a|| .|L±1| ],|l
www.c4arab.com www.winprog.org 103
.ls.l,
! | _l|][ . Jos|æi[ .|[lgi Qq|l
Error LNK2001: unresolved external symbol ¸main
Error C2440: cannot convert Irom 'void*' to 'HICON¸¸ *'
Fatal error RC1015: cannot open include Iile 'aIxres.h'
Error LNK2001: unresolved external symbol InitCommonControls
Dialog does not display when certain controls are added
ÌhnI LNK2001 : _µjInI j,¡II _main ¸gmµ pr
c¸>l ¤,Lz. ei>¸ _º ¤IliI lci..l. >çîIl _o ¸> _a., lzI lL>Vl _o ¿ç.Il li± .i>,
) module ( ¤,Lz.Il .li>çIl ¸l .l..îzIl _o ¤..îo çl _º ¤IliIl ei± >l>,| _Ic ¸is, ,I L.l¸Il¸
çi,s..Il .IzIl ¿o ¤L..¸zIl .
¤Il>Il ei± _,...l _o ¤Ls. _.a. : ¿ç. _o _,.L. ¤.l.í U¸l>. :.l lo| Win 32 GU! ) çl ¸l
Uç..çîIl cic lo ¸>l ¿ç. ( Uç..çîIl ¿ç. _o _,.L. ¤.l _Ic ¤s,¸±.. .zº lL>Il.¸ ... :.l ¸l
¤IliIl _º _,>±Il _î.Il. ¤º¸±. ¸l ¤..î. ,I :.îI¸ Uç..çîIl _,.L. .,¸±. U¸l>. main() .
¤Il>Il loçzc _,.L. i,i>.. .zº l>|º lcç,. ¸.íVl _± _I¸Vl Win32 Console ¿ç.í
_. Uç>,sIl ¤.,. _º _,.L.II ++ lL>Il li± .>l±.. :.|º . lo l>| lL>Il .>l±. cl :Iií _z.>,¸
_. i.V¸ç.Il. _l>Il ¸ol¸Vl ¸L. UV> _o _ol.¸.Il .,¸±. .I¸l> ++ i,i>. _¡>. ¸l _z¡. :.îI
\ ¤>,>±Il .l¸l,>Il .¸±zIl ¸l.> ) compiler ( _,.L. l..|. Win32 GU! Uç..çîIl _,.L. _o Vi.
l±¸º .¸azIl ) as default .(
s_¸..11
_. Uç>,sIl ,i>... ..í l>| ++ ¤>s± _º ¸l.>. cl _Ic ¿¸¸.zIl l..| e>lc|. ,sº
¿ç.Il ¿,¸l.zIl " : Win32 Application project ) " _,I¸ Console .(
za... ..í lo l>| _. i.V¸ç.Il ¸ol¸l ¸L. _ ++ _za..lº ) -tW ( _,.L.Il cl _I| e¸l.\I
¸¸i.,çIl .ls,.L. ¿ç. _o .
ÌhnI C2440 : _, _jgniII _5_ y void* _| HlCON__* ! ×;Im I, gÌ
uI. :\
¤.l _Ic ¤s,¸±. U¸l>. :.l _.a, iº li¡º li± _z,Ia.Il l.I,I> _º >lçíVl .,¸±.. .zº l>|
. ¿ç. _o >çí _ .++
_.Il .lº¸±zI ¤..l.í ,. >çîIl li± ) C Compiler ( _o _îI bcc32 ¸ vC++ V iº ¤.|º li¡.¸
_.Il .lº¸±z. ¤s,¸±. ,., ) ++ C++ Compiler ( _Ic >ç,º eic ¤I ¸,>Vl li± cl ¸l..cl _Ic
,l ],|e|| Win32 AP! in:|a|| .|L±1| ],|l
www.c4arab.com www.winprog.org 104
¿lç.Vl _,ç>. ¤,Izc . _.Il .¸±o lol :.c Vi. l¡. ,çs, ¤.|º _.Il .¸±zI ¤...Il. ++ ¤.|º
l>籸 ¸.íl ¸çoVl _a>. cl :,Ic _¸s, .
_. Uç>,sIl .¸±o ) ++ .lº¸±zIl .Icl¸ ( ¿.ç.Il .l> .lsIzIl .,¸±.. ¤,Il e¸ç±. ,çs.
.cpp _. >çî. ¤.ç.îo l¡.l _Ic ++ ¿.ç.Il .l> .lsIzIl¸ .c _. >çî. ¤.ç.îo l¡.l _Ic . l>| c>|
¿.ç. .l> .lsIo _I| _,IiIl li± >çí ¤ºl±|. .zº .cpp .|º _o ¿ç.Il li± :º>l±, cl li> _z.>, ¤
lL>Vl .
_o ,,I. ¤.l _z±l cl ¿,L..l V _..|º _,IiIl li¡I la.l. _,I >çí .,¸±.. ,çs. ..í l>|
_I| _l.>, clí lo l>| _,ç>. çl _Ic ,î>Il¸ ,,sIl _,ç>.I :.¸.>I _l.>. ..lº li¡I .ç,aIl _,ç>.
ç¸.º ) casting ( _.a. l¡Ia>. cl U¸l>. ..l .l¸,a.o ,,º _,>±.I _l.>. :.l ¸l lL>Il _,¸, iº lzo
¤,Ic ..,I _± l.,. .
s_¸..11
¿.ç.Il. :.lsIo ¸l>I|. ,º ¤Ll...º _.Il _za... cl .>¸l l>| .c _o Ui. .cpp ¸,c
ç¸.º _,ç>. _za. ,º :I> ) casting ( lL>Il l¡,I| ¸,., _.Il _íloVl _º .
_.Il .lº¸±o .>. _za,. >çîIl _í _z,Ia.Il l.I,I> _º ++ _,ºl¸c ¤,l c¸i. .
_.Il .lº¸±o .>. _za,. >çîIl li± Ul.zIl _,.. _Ic :
HBITMAP hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
_.Il _º ¤.îI ++ ç¸.º _,ç>. _I| _l.>,. .
HBITMAP hbmOldBuffer = (HBITMAP)SelectObject(hdcBuffer,
hbmBuffer);
_iIíII ÌhnI RC1015 : _mÌ¡II uI¸I jis _5_ y ' afxres.h '
_. Uç>,sIlº .,¸c _. ++ >¸çzIl .Io .,±, afxres.h :oli>..l ,ic i.c _.>
¿ç. _o ¿¸¸.zI NFC ,., .IzIlº :I> ,c¸¸ Il .,í¸. ,. l>| ¤.,í¸. Lsº NFC . _l>Il .IzIl li±
.IzIl ¸,¸>. :.lîo|. ¤.|º lL>Il ¤,ç.. .>¸l l>|º li¡I ¿ºlçIl _º l.çILo _,I .rc ¸¸>o çl _º
.IzII i>lç. _í _,ça.¸ " afxres.h " .IzIl. " winres.h ) " _,.¸o >ç>ço .IzIl ,.l cl L>V
e¸o _í _º ¤I,i.. _a..,¸ .(
ÌhnI LNK2001 : _µjInI j,¡II lnitCommonControls ¸gmµ pr
¤..îzIl. _ol.¸.Il L.¸. ,s. ,I :.l _I| ¸,., lL>Il li± comctl32.lib Il ¤Il> .,¸a. ,. _.Il
AP! l¡,º . ¸L. _º .l..îzIl _I| l¡.ºl±|. ,¸Io ..lº li¡I l,±l¸.ºl l¡>l¸>| ,., V ¤..îzIl ei±
i..Il UV> _o ¸l ¸ol¸Vl " settings " ¤z.lsII ¿.l.Il " project " ¤>s±Il _º¸ " Link " ¤>.l.Il eiºl.Il _º
¤..îzIl ei± _l¸>|. ,º .
,l ],|e|| Win32 AP! in:|a|| .|L±1| ],|l
www.c4arab.com www.winprog.org 105
LI¸5niII _r; 4sIo| iir ×o¡r _ij y jIgnI
_.o .lzî>.Il Listview Treeview Hotkey Progress Bar l¡.l _Ic l¡s,.±. ,. iº c¸>l¸
.,¸ _I| .s,±l l¡.l lzí ¤a.l. .lzî>. ¤..îzIl _º ¸¸i comctl32.dll ¸¸i.,çIl _º e¸ºç.o _î. ,I¸
95 . .lzî>.Il BUTTON ED!T L!STBOX _I| ... ..,I _± ¤s,s>Il _º¸ ¤a.l. ¸..a. " .lzî>.
¤a.l. ) common controls "( ¤,.l,º .lzî>. l¡.l _Ic li± _I,I> _º l¡,I| .¸.l lo l¸,.í¸ "
Standard Controls " .
ºl±|. .zº l>| :.l li> _z.>,º _¸aIl _º _.s, ¸,>Vl li± _îI¸ ¸lç>Il _I| ¿.l. ,î>. ¤
¤IliIl lci..l _º .I.º !nitCommonControls() ¸lç>Il i,s.. _.º . ç± l¡.lci..V clîo _.>l
_º V¸l WinNain() . ¤Il.¸Il ¤Il> _º l¡.lci..l. .zº çI lol !N!TD!ALOG ) >¸>¸Il ¤Il> _º
) callback (( c|º _Il.Il.¸ ¤Ls.Il ei± _I| _±, cl _.º ¸lç>Il _.s,. .,> l¸>l.o cçî,. ¸oVl
li.l l..Il> lci..l ,., _I .
¤IliIl cl _.l.çIl :I Uçs.. lzí _a.Il :I Uçs,. !nitCommonControls() ¤Iz¡o .¸l±
_za... cl c>| :,Ic .>,¸ !nitCommonControlsEx() . _îI .>¸l l>| :I> _Ic ,iºl
!nitCommonControls() l¡Ilza..l i.c l¡Izc _,a, lo i>ç, V¸ ¤L,.. .
,l ],|e|| Win32 AP! .|| ,|n:: ¸| jn::, |æ|| API .|| ]:s MFC
www.c4arab.com www.winprog.org 106
!! _ _l|][ . [¸|] ¸| go,i¿ .i[ ¡|o.. AP! .i[ ¸,g NFC
4,II5mgI
Il _I| _,.i..zIl¸ _,>o¸.zIl _o i,iaIl _.l, lo l¸,.í !RC Ulç.Il li± cçIl.,¸ " : ç± lo
_±ºVl : NFC ¸l AP! " _º cç.c¸, _,¸,.îIl cl lzí cl UçsIl NFC cl ¸l ¤cl±¸Il ¸çL _º Ul¸lo AP!
cçIçs, lzí c¸>l l,.l .... ¸l ¤.l¸li±| U¸l _º l¡... _.Il _íl.zIl .... lo| :Iií .
_I, lo _º .±. UlçºVl .I.>o :
' AP! li> ¤.a±
' NFC l¸,.í ¤î.¸o
' AP! l±,s..o l>çí ,¸I...
' NFC .o . >s e¸ í¸o¸ ¤
' AP! ¤,¸>. .l¸>l :Iz. V
' NFC z± .z _. .çI.l.
' AP! _>.zIl ¤,..lí ..,I ) oop (
' NFC .Ií¸ _.Ií
' AP! .sL> _.s,i±
l¸> ,I±¸ ...
_;Igµ
_l>Il _,l¸ ¿o çl¸Il _,I ¤.l i>¸Vl _zaIl ¸lL| ,i>... cl ç± ) framework ( ..l.zIl
..l.zIl _zaII .
Il _± lo _,±ç.Il .>, V¸l AP! Il _± lo¸ NFC . _IL±zIl AP! _.a, ¤>o¸. ¤¡>l¸
.ls,.L.Il ) Application Programming !nterface ( _.a. l¡.|º ¸¸i.,çIl ¤>o¸. ,Ilc _º lol
_,a..Il ,lL.¸ .ls,.L.Il _,. ,.lsIl _cls.Il _o _s>.zIl cç..zIl . .lºlç.Ilº ) Drivers ( V.o
Il. _îI l¡ao _ola.II elci..zIl Ul¸iIl .I.>o¸ ¤±s>.o .l,ç..o .l> ¸..a. ¤,.IlaII ¤...
:I> _º _zî. V ¤,±sIlº iºlç.Il .l¸,çL. _o _zLaIl . Il NFC ¤.º ¤..îo _± ) Class Librarv (
¤±,±>. ,., çiIl _.±zIl _zaIl _o _,Is.II _.Il ¤aI. ¤.ç.îzIl .ls.LIl _o ¤cçz>o _±¸
Il Ul¸i. ¤.,ao l,.l _zaI AP! . .¸ :s,.L. _º _>.zIl ¤,..lí ¤,.. :Iií ,is. e>ls..Vl _Il.Il
_zaIl ¸lL| ¸l± cl i.o _,.i..zIl _,>o¸.zIl .Icl ¤. ,çs, lo 籸 .>¸l l>| ¤I±l>. ¸l ¤.o )
Iramework ( ¤Iíl. _o .ls,.L. ¿ºlçIl _º .i¡.., V : .lsIo _a.o mp3 Vzc !RC .ls,.L. ¸l
.laIVl .
_í _ol.¸. lç. Il. ..í NFC Delphi visual Basic Perl ¸l çl e¸çL.o ¤,>o¸. ¤¡>l¸
c¸>l Il _c li,a.º . cl _îz, çiIl _î,¡Il ¸l ¤aI ¤.l.l _Ic _o¸. _Ic _.., ¸,>Vl _º _,.L.Il
Il Ul¸> AP! . Il ¿o _ola.. V c>| Ulç>Vl .Icl _º _s>o _cls.Il li± AP! ,ciIl .l..îzº e¸.l.o
i,s..Il .º¸¸ ) runtime ( :.c Vi. ¤Iza. .
,l ],|e|| Win32 AP! .|| ,|n:: ¸| jn::, |æ|| API .|| ]:s MFC
www.c4arab.com www.winprog.org 107
zIl _a. cçIl., _,>o¸. " : Il NFC Il ¸is. _¡º lií¸ lií¸ lií _zc _Ic ¸is, AP! _Ic
elíl>zIl " ¤,sL.o U]l..Il li± _.o _Ic ¤.l>\l : Il NFC Il ¸is. lo _zc Lsº l¡.îz, AP! _Ic
¤,.l.Il _Ic ¤,..o _I¸Vl cV ¤Izc . Il. l,.l _zc lz.,. AP! isao >çí _c ¸s., iº ¸s±Il _o
I _,çL¸ ¤..îo _º ls..o e¸±>zIl .l.sIl UVa..l. :I> _zc _îz, clí lz.,. ¤,laI NFC iº lzo
¤..l,± _¡.,¸ >çîIl ¸±.>, .
¯_±±!1 _,±11 ¸l±| ¸± l, .__|
i.Il. ,¡>±.l _..|º ¤>o¸.Il ¤,s,í ,Ia. Lsº c¸>ç, _,iIl _l>.VI¸ _,.i..zII ¤...Il.
Il ,Ia.. AP! º ¤.>l¸ _o¸.zIl i>, _.> lzIo cçî. cl¸ iºlç.Il .ls,.L. _zc .çI.l .la,..l _
_.o ¤.,ao l,.l Uç> ¤,.l.Vl .lo¸,.lî,zIl _î. : _.l.¸Il ¤sI> ¤,oç.¸Il ¸l¡>Il ¤¡>l¸
.lzî>.Il¸ zIl V lzI¸ _.ls ) sockets ( .li,¸.Il >ia.¸ ) multithreading .( ¿,±lçzIl ei±
¸¸i.,çIl .ls,.L. l.. ¤,Izc _º ¤,¸±ç>Il l¸>VI lz¡º :..î.. . V.s..o :as... ¤º¸azIl ei±
Il _zc ¸lL| _º ¤>o¸.Il _º ..c¸ l>| NFC visual Basic _çI¸ _º .c¸. ¸>l _zc ¸lL| çl ¸l
ls>V ¤zIlc . c ,¡o li± ei± _zaIl .l¸lL| cl ¸l..cl _I ) frameworks ( Il ¤Iza. lo _í ,ci. V AP!
Il ¤zci, lzo l>¸i>o l.,±. i>.. ¤Ll... l¡.V AP! cça., V _l.Il .Icl cV _ºl.Il :Ii. ¤í¸l.
¤IVa..l _I| . V¸ :.s.. l¡.ºl±|. ,¸Io :.|º :.ls,.L. _º .l,.¸>Il ei± _I| .>.>l l>| liI
cl :.îz, Ul¸> _zaI :z¡sº _Il.Il.¸ ¤±> l¡I _±>, ,I ¤.V :.c ¤Iza,I _zaIl ¸lL| _Ic iz.a.
Il AP! ¤.º>l±o cç>o¸.zIl .Il l.,.¸¸ ¸,±, _îaIl¸ i,¸. lo :I _,., .
Il _,Il _îI NFC ,l¡zIl _o i,iaIl ç>ç. l¡.V ¤I¡. ¸..a. ¤.,ao ¸L. ¤¡>¸ _o _¡.l
Il >çîIl _o _Is, li± _o¸.zIl _c .ç.îz . ¤Il> _º li±¸ _¡.l ¤.l e¸¸¸±Il. _.a, V _ºl >çí _îI
¸l..Il l¸¸ >çîIl li± _í _za, .,í ¸l ..lí ..l lzI :z¡º ,ic . ¤olc ¤s±. : _,iIl cç.i..zIl
e¸>.Il cçoi>.., ) wizards ( çiIl >çîIl ,Lao ¤Iza, lzc ¤º¸ao _.>l cçîIz, V ,¡.ls,.L. i.I
l _±s, ,. ei,Iç. ,. _± lo ¸l el,.l l¡,º .,±,. _.Il _íloVl _c .>.Il _º ¤.º¸ .Ic
i,¸, lo _Ic _±>,I l¡. ,çs,. _.Il .l¸,,a.Il . Il. lç. ¸s±Il _o :>ol.¸. .li..l lo l>| AP! Il ¸l
NFC _.Il _.l±>Il¸ .lz.Il _za....¸ l¡a±¸ _o ..l :.V l,.Vl _ílol ,Ia. ¤Il>o V :.|º
Lsº l¡z¡s. .
_,çIl lçzIa. _o ,Lao cl 籸 ,¡o ¸>l _olc 32 ¤.I± eiclº ,¡,iI _î. ,I ¸oVl C>l. _º
_.Il .l,i>.l _º .++ Il. iºlç.Il ¤>o¸. ,¡º ¤I¸l>o NFC _.Il ,Ia.¸ ++ .ºçIl _s. _º
¤,.±o ¤z¡o cçî,. . cl _o ¤,>l..| ¸.íl ¸,±. cl _o :.îz. l¡.l V| ¤I,>..o ..,I l¡.l ,c¸¸
,Ia.. _s.. _.Il ++ Il ¸l AP! Lsº .
l.l.l c>| ...
Il ,Ia.. cl :I _.>.., ¤.l _Ll ,is. lo _í UV> _o AP! :.s. i>. _.> l¡,º _za..¸
Il ,Ilc _º ¸l>.\I _a.. ,. UV>Vl ¤.l,±¸ ¿li.\l ¤>o¸.Il _Ic l¸>lº l¡,º l>l.¸o NFC lo l>|
.aº .ºçIl :,Ic ¸ºç,¸ lo l.,. :I _.a, ¤.l ¸¡L l.>..o l¸ol l¡IVa..l cçî, l±i .
,±Vl ç± li±¸ _îI ... Il _Ic e¸.l.o .Izc l>| NFC Il. ,lzI\l c¸> AP! .º¸ _.l, ,.
Il iclçº ¤a>l¸z. cçî. ¤.l>\lº lo ¤Iî.o Uç> eicl.zIl ¤,º .IL. AP! " V.o : _.so ,li>..l
¸l¡>Il ¸l,. ) HDC ( ¤Il.¸Il _º >ç>çzIl WN_CTLCOLORSTAT!C " Uçs.. l±i.c¸ " : _.a, l>lo
:I> " Il _o ¿ç±ço ¤z>¸.. ,çs. .,í .¸a. V :.l ç± ...Il¸ AP! Il _I| NFC _º :.s. i>.I
:,Ic .>, clí lo ,Ia.. ,I ¤Ll... :.V :.icl.zI .V¸l>zIl _í _L...¸ l¡.o _l.o V ¤L¸¸
Il _º _ç>Il _.º ¤zIa. NFC .
,l ],|e|| Win32 AP! .|| ,|n:: ¸| jn::, |æ|| API .|| ]:s MFC
www.c4arab.com www.winprog.org 108
Il. _zaIl _±ºl l,±>. l.l AP! ¤,>o¸. L.l.¸ ..íl _îI _îI _.laIL. ¿o ..l.., ¤.V
.l.l,.Il iclçsI ) database ( .lzî>. _o ¤cçz>o .,±l cl ¸l ActiveX Il ,i>..l. _..|º NFC
Ui. _>>çz. >çí _.>l _La,¸ ¤..l.í >l¸zIl >çîIl _o l¸,.í _Is,. ¤Il>o V ¤.V ¤,aºl¸ _î.
¤,>o¸. _íl.o _º ¿çºçIl .
,l ],|e|| Win32 AP! ï. e,,|| .|. ],l .|Ll
www.c4arab.com www.winprog.org 109
!!! _l|][ ] . ¸¸q][ ,|, Qql ¸|[lg,
i.V¸ç. _o _. ¤±l>Il ¸,çL.Il ¤.,. _,ç>.. .zº lzI ç± ¤.o .¸¸lz.l çiIl _c¸zIl _.Il
_. ++ _. Uç>,sIl _I| ++ .l..,¸î. Lls.Il _º ei,i>Il ¤.,.Il l¡. ,çs. _.Il ¤s,¸LIl ç±
>¸çzIl ) .lsIo .rc .(
_. i.V¸ç.Il _º ++ ,z±. _º ,î>.II ¤,¸>Il _í :Iz. .lsIo cç.>o¸ , .rc ,i>... lzI¸
>¸çzIl ¸¸>o >¸çzIl .Io _º l±¸,,a. ,.,. _.Il ei,>çIl _± ¸¸>zIl _º ¤.i>zIl .l¸,,a.Il c|º .
_. Uç>,sIl. _l>Il >¸çzIl ¸¸>o _º ..VI _îI ++ .Io cl _.a, lzo _. _í ¸,,a. ,.,.
>¸çzIl .rc la.. .l¸,,a. _o :.s.. ¤..i>l lo _±l>., ¸l ¿,±, iº _Il.Il.¸ ¤..l.í > .
.aL..l .ºçIl _o e¸.º ia. _îI .l,ç.azII lL.>o ¸oVl ¤,li. _º clí .V.>Vl li±
¸,,a. _.>l _o lLl,.>l :I>¸ l,¸i, >¸lçzIl _o L.º çl ..íl V .IlaIl _º _..l .,> ¤ao _ola.Il
Il _.º _o ¤Iç±> _îz, ¸¸>z .
¿sIgiII
_,..,.Il l.Ií _º _.> _î.. .¸±. >¸çzIl .lsIo _a> clí _,IiIl li± _º L,.. çi>.
) _. i.V¸ç. ++ _. Uç>,sIl¸ (++ .l¸,,a. çl .li>| c¸> _o .
_. i.V¸ç. ,li>..l. .zº _I±Vl _,IiIl _º ++ _l¸Il .IzI ¤,.,.¸¸ ¤,z.. _Ic liz.ao
) header ( lí çiIl¸ >¸çzIl. _l>Il c project_name.rh . _. Uç>,sIl .>.¸ lz.,. ++ ,.Vl c|º
ç± >¸çzIl _l¸ .IzI _±l¸.ºVl recource.h _I,I> _º i,i>Il _l¡.zIl li± _Ic .iz.cl c|º li¡I
_. i.V¸ç. ¿o :Iií _ºlç., ¤.l lzIc li± .++
_. Uç>,sIl ¤oi>.., çiIl >¸çzIl ,.l ¸,,a. _îz, _Iç±sII ++ l ¸,¸>. UV> _o .IzI
.rc UV> _o ¤>l¸>| ¤,º ,. çiIl ¿±çzIl _º _I¸Vl e¸zIl _,a±ço _º¸ _,.¸o ,.Vl ¸,,a.¸ l,¸i,
#include >¸ço _º elç.>l ,. .,> ¤,.l.Il e¸zIl¸ TEXT!NCLUDE .
_. Uç>,sIl cl _± ¤,.l.Il ¤Iî.zIl ++ .IzIl _l¸>\ _l.>, l±¸º afxres.h .lsIo _º
>¸çzIl ) .rc ( . lz.,. _. i.V¸ç ++ ¤,¸¸¸±Il ¤,I¸Vl ¤>IlazIl .l¸¸ílo _í :Iz, ) preprocessor
macros ( .lsIzIl _o ¿ç.Il li¡I :Ii. _l.>, V¸ .
.IzIl cl 籸 ¸>l :.¸o _. afxres.h Il ¤..îo .,í¸.. .zº l>| Lsº ¤.,í¸. ,., NFC
_o _,.L. l..|. ,çs. loi.c _.> _l.Il ¿,z> l¡,I| _a., V _.Il¸ Il ¿ç. AP! Lsº _l.>, çiIl¸
.IzIl _I| winres.h .¸±zIl ¿o .í¸, lz.l> ¸,>Vl li±¸ .
_. Uç>,sIl _Ic _Izc ¤,li. i.o ++ .i>¸ _.|º ¤. _l>Il >¸çzIl ¸¸>zI _oli>..l¸
.Io _í _º _,ia.Il _o _,Is. ¤Iî.zIl ei¡I V> .rc ¤,.Vl ¸L.Vl _l¸>| UV> , ei,Iç. ,. :
#ifndef __BORLANDC__
#include "winres.h"
#endif
l¸s,. clí ¤.|º l±¸º ¤º ¸azIl .¸¸LII lsº¸ çiIl¸ :
,l ],|e|| Win32 AP! ï. e,,|| .|. ],l .|Ll
www.c4arab.com www.winprog.org 110
#include "afxres.h"
_. Uç>,sIl ,i>.., _zo ..í l>| ++ ¤.,. _º _.Il li± ¸,,a. ¸l,> i>. cl :.îz,º
¤Iolî.zIl ¸,çL.Il ) !DE ( ¤z.lsIl UV> _o view i..Il ¸l,.>l.¸ Resource !ncludes i±l... :.|º
eiºl.Il ei± :
çiIl _,..Il ç± :I> clí lz.| ç>laIl _,¸z.Il _º li± ,li>..V ¤>l> çl i>ç, V loçzc
_,..,.Il l.Ií _º _za, _,.L.Il _a>¸ ¤Iî.zIl _>I ¤.iz.cl .
_. i.V¸ç. cçoi>.., _,iIl :.I¸V ++ _º l¡..i>l _.Il _±çsIl _ç±>. ..l.o l.l
>¸çzIl .lsIo _. Uç>,sIl ¸¸>o ,çs, _.Il ++ ¿o e>l,¸Il ei± _>li.. cl _a.., V _îI l±i,Iç..
_. çl .
_m iiyjg;II j¡µ ¿, .jIg¸I uj¡ni ++
¿ç. _o .lsIo _¸i, _ol.¸. .,¸±.I L,.. _,.. _I| _±l ,I¸ _.l¸iº _í ..> .. ¸> .rc
_. i.V¸ç.Il. ++ .oVl ¤.l ¤.Ll V _î.. ¸l¸º\l ,. l¸,>l¸ Il .lsIo _º :I> i>..¸ _ Nakefile
_,IiIl li± ¤I.ol ¿o ¤sº¸zIl . _. i.V¸ç. .¸±o Uç> .lL>VzIl _a. ¤a>l¸o :.îz, lzí ++ _º
_. i.V¸ç.I ¤,.l>zIl ¸ol¸Vl ¸L. .l¸>l ++ .
www.oop.cjb.net .|l|Le|| il:X amateur¸mosta¸yahoo.Ir
www.c4arab.com www.winprog.org 111
.l.lLe±j j..g
)|[e][
)|[e][ )|[e][
g¸¿|}g[
g¸¿|}g[ g¸¿|}g[
·_=.== ·.,.
·_=.== ·.,. ·_=.== ·.,.
[
[[ )|[e]
)|[e] )|[e]
g,¸oi[
g,¸oi[ g,¸oi[
^
^^l
ll l
ll c
ccc
cca
aat
tte
ee
_,== _·.»= _,==. ,., -,·¸ ··_>·.'· _¸..= _'= ,., '= ',''= _=='·
.'.»'·¸ ¸>',,''> ·.»== ¸' '=,., _'> .·¸. ·.,'. ¸' _,=.=' ·_>·.'· _=
¸¸¸
¸¸¸ ¸¸¸
^
^^r
rrg
ggu
uum
mme
een
nnt
tt
·..== ,',= _.¸,¸ ·_>·.'· _= '.,== ·_·.»= ¸=., _,=.= ¸> ¸= =,.¸'·
.· _= ¸·' -,.=_ ·_.»' _,= ¸' ·..== ',..= _¸>, _' -.>=,¸ ·g='._,'· ·_
_=' '.,. ¸' >>,= ¸' -.· ¸' -'·. _¸>, _' _>=, '=> ·_.¸=''> ..==
x,.,
x,., x,.,
^
^^r
rrr
rra
aay
yy
¸ _¸.'· _». _· =_... _.'· _='.='· _= -=¸=== _= -·¸»=='· [ ¸'
¸> _' '=> ··.=·¸ -=¸=== _· ',.,, '=,· -'=.= _¸>.¸ ·,=='· _».
·.= _= _=.= -,'; _,., ,·_ -' -=¸==='·
-.,..-
-.,..- -.,..-
B
BBl
ll n
nna
aar
rry
yy
·.= _',.=· _'= _.'..'· ,,·_.'· _'; _.¸,,=>'· _',= _· .·.=.· ¸,¸=. ,.,
_'., ,.'='· _· ._. ·.=¸ ·-'.· _= ¸='=.'' .,=¸'· ¸,,.'· ¸= ,¸'..·
_= _¸>= ,·_, -,'; 1 ¸ 0
_...:
_...: _...:
B
BBl
ll t
tt .=',¸ ·.'.',,'· ,'==' _',»' ·.=¸ _==' ¸=¸ .'· -=,· '=; 0 .'· ¸' 1 .,
., .,
B
BBl
ll t
ttm
mma
aap
pp
',,· -=». ¸> ·.=,'· -,.'.. -·¸»== ¸>. _'= ·_¸= ) ¸.>, ( -=,· ¸==.
-, _,=. _' ,=·¸'· _¸''· _'; _,..
-,x.. -¸,.
-,x.. -¸,. -,x.. -¸,.
B
BBc
ccc
ccl
ll _,== '=; _.=. -,»=.= -=,· ) TRUE ( _='= ¸' ) FALSE ( _..,|,,
_..,|,, _..,|,,
B
BBu
uuf
fff
ffe
eer
rr
=_== ,. _.'· -,_>·.'· -»=.='· _'= _'=, ,.· ',,· -,..= ,,· _,_=.¸ ·' ¸.,,
¸.,, ¸.,,
B
BBu
uug
gg
_=¸ ··,_=.'· -,'== .'..' ',.==>= ,.,¸ g='._,'· ·.'=. .· -'>.=
_'=¸. · _»=.= ¸'=¸ _.>=; ¸'=
_¸¸, _.¸
_¸¸, _.¸ _¸¸, _.¸
B
BBy
yyt
tte
ee
_= -=,· 8 .'., _,».. ',, _>=,¸ · 256 _' ··'.== _=_ 256 -''=
_'»=.· _'= ,=''· .=, -.>== .·.=¸'·¸
.,.,
.,., .,.,
0
00a
aal
ll l
ll b
bba
aac
cck
kk
_= .'=...>' -','· ',.' _'= -'..'' .·.·_=,·¸ ¸·¸.'· _=, _,., _'.»=
_¸..,¸'· .·_.=·_', -=.'· _== -'·. ¸'._; _.=. .¸._''· ·,'= ,¸,»=,¸
-'·.'· _'; .¸=,. ,>=.'· _,· -=,.¸'· -'·.'· _= .',...· ..=¸ ·__=' -'·.
-,.,._'·
-,-¸
-,-¸ -,-¸
0
00a
aap
ppt
ttl
ll c
ccn
nn
.'· _'= _='='· _.'· _=¸ Form ,¸'== ¸= '=>¸ ·_=' ,>=. _' ¸'
·.= _,>=. ..= .; ,.=..='· ¸,· _= -',.,. _>=, . ·_>'. _.'· ·.,·
,==='· ¸,· _= ·_,='·
-,-..
-,-.. -,-..
0
00a
aas
sst
ttl
ll n
nng
gg
_'= ·_=='· -,.'>=; ,.= ..= g=_,='· ',,'; '=', __.»'· ¸,¸=.'· -,'==
'; _»._= _¸..= .·. ,,· ¸,¸=. ..=, . _.= ·.=¸ ·_»=.= _=' _
.·_='· _'; ¸¸=¸'' -,=·¸ _¸>. '.',=' ',.' .; ·.'.',,'' _',=
_,,¸.||
_,,¸.|| _,,¸.||
_¸..||
_¸..|| _¸..||
www.oop.cjb.net .|l|Le|| il:X amateur¸mosta¸yahoo.Ir
www.c4arab.com www.winprog.org 112
0
00l
ll a
aas
sss
ss
_= _¸== ¸>. -.»'· ¸>,,'· _.'· ,''== _.=; _=¸ · ÷÷ -.»'· _¸=. ·
_.'=='', _=.. .·_,=.= ) attributs ( '.='', _=.. ¸·¸.¸ · g= )
methods ( -'.,>'· ·-=¸.· ..=. ·_'»...· ¸,». ',.' '=> ·
-..
-.. -..
0
00c
ccm
mmb
bbc
cc B
BBc
ccx
xx
_,_=.'', -,,. ,>=. _= ) Edit ( _».'', ·-,·_= _.=; _'= ·__ _¸=, ·
_,,=.'' -','· _,='· _='.='· _= -=.. _,=. -,'= ) ,''='· _· ( _',.=',¸ ·
· -=.'»'· _¸>. '=·.=; ',.»,=¸ ..' .· -'...='
-|-..- --...
-|-..- --... -|-..- --...
0
00c
ccm
mmm
mmc
ccn
nn
0
00c
ccn
nnt
ttr
rrc
ccl
ll s
ss
',=·_.; ,. .·¸ ·¸,=..'· -==.' _= .,.='· _'= ='.> ¸==. .'=>=. _=
-.'= .=. -=.'. ', '> ¸». ,' _; .'»,,=.'· ,'=' _· '=_·¸.'
-.... ..-±¸
-.... ..-±¸ -.... ..-±¸
0
00c
ccm
mmp
ppl
ll l
ll e
eer
rr
.·. -=', -,.>. _.'· __.=='· .¸>'· ¸,¸=., ,¸», g='._, ¸= _¸..=
,'=. ¸,· _= -== ¸='=.'· ,.,' _'»='¸ .·.=¸ _= _¸>= _=' _'; ·_''=
_'=.· .¸>'· _= _'=.'· =.>=, '=.=,¸ ·¸,=..'·
~¸.-
~¸.- ~¸.-
0
00c
ccn
nnt
ttr
rrc
ccl
ll
_.'> _= ·_',= ¸=¸ ) Object ( _= -·'»..· ,., -.· _'= ·_¸., _·¸.,¸ ·
¸='=.'· ,.,¸ ·-='='· -'·¸.¸ -=.'== _= -'== ¸>= _= ,>=.'· _=
.·.=.· -'>=..· _= ,.=..='· _>=. _.'·
,±¸
,±¸ ,±¸
D
DDa
aat
tta
aa
_=.'· _=, ·',== ¸='=.'· ,.'='· _,=.., ·_,=.= ¸' -.,'. -=,· ¸> _=¸
-,'= ·.¸=¸='· ¸>.'· ¸' ',=·¸.' ¸' ',='==' _=
....,,
....,, ....,,
D
DDe
eef
ffa
aau
uul
ll t
tt
.·_,=.='· _¸>. ) ,,'· ¸' _=' ._. _' ¸' ¸>' ( ,'· ·.; -,=·_.·· ,,· _¸=,
',''= ,.,¸ ·,.=..='· ¸,· _= -'=.= ,,· _'= -'¸== ,.= ..= ',»'=,
-=,= ¸,,..' g=·_,'' -,=·_.·· ,,· _'·_; .·..,.· _,.,. ¸' ,.=..='· _'=
-,.'.='· ,,»'· ·_=, . _= _'= ¸>=...· -=,=
_.|¸.|
_.|¸.| _.|¸.|
D
DDe
eev
vvl
ll c
cce
ee
0
00c
ccn
nnt
tte
eex
xxt
tt
¸' ·.·'.'· ·-.'.'· _'= _,=, _' ·.,_. _.'· ,._'· _¸=, _.'> ¸=
·-.'.'· -·. ,'.=> -·'.'· ¸'==.· _= .,.='· _= ='., '.,.=,¸ ·-=,'='·
,._'· ->_= ·__='· .'.'. _¸.. ¸'==.· _= .,.='· .,.='·¸
¸.±¸| _.,.
¸.±¸| _.,. ¸.±¸| _.,.
L
LLd
ddl
ll t
tt
' ,.=..='' _,., _'=; ¸= _¸=_'·¸ ,'·_.·¸ ·¸_='· _= ·_=. ,.>, _
) _= ¸·' 256 _=_ ( -.'.=' _=¸ · · ¸' ,..· ',,· ,.>. _.'· .'.'='·
_.¸_.>',· _·¸.='·
¸,¸¸
¸,¸¸ ¸,¸¸
L
LLd
ddl
ll t
ttc
ccr
rr
·.·'. _= ·_',= ¸= ) MDI ¸' SDI ( ¸,.=.¸ -,'.>, ,.=..='' _=..
.== ·.¸> _'>' .·¸. ·'= _. ·.·_·¸ ',¸=' '=. ¸' ',_
¸¸¸
¸¸¸ ¸¸¸
L
LLl
ll e
eem
mme
een
nnt
tt
_¸>.¸ ·->_..='· _.'=='· .·. .',..· _= -=¸=== _= ._= -, .=»,
_,., ,·_ -' _=.= ¸>¸ ·-·¸»== _· -=¸=== ,''='· _· _='.='· ·.=
'= __=' ',''==..· ¸=. ',._=, -=,·¸ ·-,';
¸..-
¸..- ¸..-
L
LLv
vve
een
nnt
tt
¸' _,.'»='· -=¸' _'= __ -=== ¸> _= ..='· ,=., ,=., '=> ·_¸'='·
_¸'='· .'>_= _= ->_= _= ) -'=.='· .'»='='· -,», _= _=.'· _=,
,.'='', ( .,».. ¸' .','== .·_=, ='. ¸=.., _' g=_,='' _>=, ·..=¸ ·
_,,=.'· _= __='· ,.'.. .'=,'=.
.-¸
.-¸ .-¸
L
LLx
xxt
tte
een
nnd
dde
eed
dd
.=, .=.,' ·_=' ._. _' ¸' _.'> ¸' -'·. _'= _.'== -·'=; ',''= ,.,
='. -' .'>¸' _.'· -=','· .'.,.=.'· _'; ·_'.>' _.¸='',
¿.,-
¿.,- ¿.,-
www.oop.cjb.net .|l|Le|| il:X amateur¸mosta¸yahoo.Ir
www.c4arab.com www.winprog.org 113
F
FFl
ll l
ll t
tte
eer
rr
·_·¸='· _,_= ¸».' _,=. _.'· -'...='· -=.'»'· ='. .'=._='', .=».
_',.=· ..= _.'·¸ .., _¸.'· _»., _¸>. -=¸_=='· g.'..'· _,· '=.¸., _=
_._='· _· ..=='·
¿.¸-
¿.¸- ¿.¸-
F
FFl
ll a
aag
gg
·_'· _= -, -=,== -=,· .·_.=·_', -=.. _== ¸·¸=.· ,'=' _· __..
_= _,.> _· _>=, '=> ·_.'=='· _= -,='= _'; ·_'.>' '= -'·.'
-,»=.='· .>='=='· _,_= _= .',·_'· _,, __='· _',=.·
-,|¸
-,|¸ -,|¸
0
00r
rra
aap
pph
hhl
ll c
cca
aal
ll
u
uus
sse
eer
rr l
lln
nnt
tte
eer
rrf
ffa
aac
cce
ee
_ -=¸.¸='· _¸='· _= _
_= ',._·.;¸ _.¸,,=¸>'· -.'. ,,=.. _· -»,_= _=, ',=.=... ,=.'·
g=·_,'· ¸,=..¸ _=·¸.· .,»..' >,. ',¸'.' ,.=..='' _·¸. _> g=·_,'·¸
',=·.=..·¸
-±¸|,
-±¸|, -±¸|,
,-¸..-|
,-¸..-| ,-¸..-|
-,-,.¸||
-,-,.¸|| -,-,.¸||
¬
¬¬a
aan
nnd
ddl
ll e
ee
·._».=¸ -=,== -=,· ) unique ( -,», _= ·_,,=.' '= _.'> _'; _,..
·_=., ',,¸ ·.'..'>'· -== ¸='=.,¸ _.'>'· ·.= _'= g='._,'·
,,.-
,,.- ,,.-
¬
¬¬e
eea
aad
dde
eer
rr
_.¸. ¸. ·'= ¸= _'_'· ·'= .h ¸' .hpp ·.·_,=.= ·,_=. ,., -,·¸ ·
_·_.,,¸ ·g='._,'· ¸>,= ,,=.., _=., ,¸'..· ·.=¸ ·.'.·¸ ¸·¸. ·¸>',=
¸,.=.'' -','· -,.>= -'== ¸>= _= _,,=. _= _.>' _· ·'='·
_..¸
_..¸ _..¸
l
llc
ccc
ccn
nn
,== ,._ _= .'=,' ¸. _ 16 × 16 ¸' ¸.>, 32 × 32 _= ,.,¸ ·¸.>,
,',= =,_. _· '=_',=; ¸>= _= ¸=='· .'..' .'»,,=.'· _,=_. -'>=
_,,=.'· _·¸.= =,_.¸ ·_¸..,¸'·
-.,.,.
-.,.,. -.,.,.
l
lld
dde
een
nnt
ttl
ll f
ffl
ll c
cca
aat
ttc
ccr
rr
_.», _>' _,=.='· ¸' _.'>'· ·,_=. ','>= _= ,., ·¸_= -'.'. ¸=
= ·_,,=.¸ ·-== ¸='=.'· _'= g=_,='· -.·_,=.= -,», _
~¸.-
~¸.- ~¸.-
l
lln
nnd
dde
eex
xx
_= ·_,,=. ¸=. _>'¸ ·_'=»'· -'== _'; -»,»= _'==='· ·.= _,., . .·
_.¸='· ) pointer ( ¸' ·.¸.,'· _= .., _'= _.¸, -.' ¸¸»'· _,=... '..,·
_= '.,, _.'· -=' _· __,»'· _' '='= ·_='.='· _= -=.. _= _=.=
-=,»'· 0
,¸±.
,¸±. ,¸±.
l
lln
nnl
ll t
ttl
ll a
aal
ll l
ll z
zzl
ll n
nng
gg
¸>.¸ .¸ ·g='._,'· _,. -,'== _'= _.¸. . ,,· .'==,, .·..,.· -,'== _
',,· ¸=., ·_= ¸> _· -,..= ,,· ¸'=.; _'= ·_,», ,.=..='· =,_.
g='._,'· -=,»'', _¸>, ,''='· _· .·..,.·¸ 0
.|-.,|
.|-.,| .|-.,|
l
lln
nns
sst
tta
aan
nnc
cce
ee
'= _.'>' ¸=.· _,= ·_¸= ¸= ¸,.='· ¸' _.'> ¸' _,,=. ¸> _'>=,, .;
' -.· -,'== ..'> ·.; .; ·-.= .>,.=, '..¸_, _' _=' _==_, ._. _' ¸
_,,=.'' _.='· _,.'· _'= _.¸. ¸,.='· .'..;
_,.-
_,.- _,.-
l
lln
nnt
tte
eeg
gge
eer
rr
·-,_.='· ¸=·¸»'· _= -,''='· -,..='· ,,»'· _= _,== ¸'== _'; ·_'.;
-,=¸= ¸' -,''. .·.=.· _¸>.¸ ,==, _¸>. ,''='· _· 4 .,', -.' _' ·
_,, ·_¸=== .·.=' -,'.> _'>=,· _· - )
31
2 ( ¸ )
31
2 ( - 1 -,=¸= ¸' ·
_= ','> 0 _'; )
31
2 ( - 1 -=,=='· ,,»'' __=' ..'== ='.> .=¸. '=> ·
) 2 .,', · 8 .,', · 16 .,', (
¿,¸.
¿,¸. ¿,¸.
www.oop.cjb.net .|l|Le|| il:X amateur¸mosta¸yahoo.Ir
www.c4arab.com www.winprog.org 114
l
lln
nnt
tte
eeg
ggr
rra
aat
tte
eed
dd
D
DDe
eev
vve
eel
ll c
ccp
ppm
mme
een
nnt
tt
L
LLn
nnv
vvl
ll r
rrc
ccn
nnm
mme
een
nnt
tt
_ -=¸.¸='· _¸='· _= _
·_'=.=· IDE .¸>'· __==¸ _»,,=. g='._, _= _¸>.. -,==_, -.,, _=¸
) Editor Code ( ,=_.=¸ ) Compiler ( -,==_,'· .'==.· _===¸ )
Debugger ( ,.=..='' -,=¸._ -,=·¸ .'., _'= ·_.»'·¸ GUI .'·¸
IDE -,,'..= .'»,,=. _= _=== _¸>, ¸' -.·. .=, ,.'· _,,=. _¸>, .·
-'=>=¸ .'·¸ IDE -==_,'· .'=' _= _,.>'' ,·.=...· -',. -.,, _·¸,
'·'=¸ =.,, ¸¸=,· ¸.= _= -,''='·
¸,,x.|| -.,,
¸,,x.|| -.,, ¸,,x.|| -.,,
-.-.±.-|
-.-.±.-| -.-.±.-|
l
llt
tte
eem
mm
= ..,'· ·'.=, . _ _=.='· _=.= _'; _,., '==>>· ',¸=' '=' ·',==_, .;
_='.= -=¸=== _= _='.= .=' _'; ..,'', _'., '= ·_,.>· -=.'»'· ¸'
._.'· .'=,_= ¸' '· ,.·¸»'· -'...=
-.,
-., -.,
L
LLl
ll s
sst
tt
_= -=_= _' ¸' .>,=..'· ¸' _='.='· _= .,.='· _,==. ..= .'.',,'·
.',..· _= -=.>, .=.. ',.,· _·¸='· _». _· ->_..='· ) -=.'· ',¸=' (
-¸.s
-¸.s -¸.s
L
LLl
ll s
sst
tt B
BBc
ccx
xx
·.= _¸=, _,,> _,_= ¸= ._.'· _,_= .¸., ','> _,=. ) -='.= ,.=
_,_='· ( _>=,¸ -'...='· -=.'»'· .¸., ·.= ¸' .=·¸ .., _',.=· _>=, · ) ..=
='. ¸,=». ( ',,'= .','== .·_=;¸
-¸. ¿,¸-
-¸. ¿,¸- -¸. ¿,¸-
L
LLc
ccc
ccp
pp
.·¸ ·=_.'· _»=., _' _'; .·_= ·.= _.>' ¸' -=,'=. _·_>. ='., _.=.
·. ,»= _·_>.'· ·.= _¸>, _,..= _,= ¸' ·.¸.== ·'»'== ¸'
-..¸
-..¸ -..¸
M
MMe
eem
mmb
bbe
eer
rr
,¸». _' ',.>=, .¸ ·.'==' ',.', ·=¸. ¸>,,'· ¸' -.»'' -=,'.'· .'.',,'·
-' -=,'.'· -.»'· ¸' ¸>,,'· ¸>= _= .; '= ='.., _>=, ,'= ',==, _' '=>
,.=..='· .>,.=. _= _=== _=.· _=,'·¸ -,'; ¸¸=¸'·
,.-
,.- ,.-
M
MMe
een
nnu
uu
=== _·__' '=_·¸.' ,.= -».==¸ ',.¸== -= _¸..,¸'· .'»,,=. ·¸'=. .
',.= ',''= _.,.· _¸'='· _>_'· _· ·.¸=¸= -=.'»'· _¸>. ) ',''= ( _=
_·¸.='· =,_. ¸».' ·.'»,,=.'·
--...
--... --...
M
MMc
ccd
ddu
uul
ll e
ee
-'=».= -»=, .»., _' -.>=, g='._,'· _= ._= -,x- --¸,
-,x- --¸, -,x- --¸,
|
||c
cct
tte
eep
ppa
aad
dd
¸..,¸'· .'»='=' _,'. g='._, -,,_= _¸=. _,_=. _· ¸==.., ·_
-.· _=¸ ·-,.,..¸ · ....='· -,.'=' -,=·¸ ) SDI (
-¸±.-
-¸±.- -¸±.-
|
||c
cct
ttl
ll f
ffl
ll c
cca
aat
ttl
ll c
ccn
nn
·.= _=.»,¸ ·.».='· g='._,'· _= ,'=.'· ','.',., _.'· ¸.'._'· _= _¸.
_'= _¸.'· -=.'.'· .'=>=.'· _¸. _= _¸>. -''._'· · WM¸NOTIFY
_¸. _= ','.'._ _¸>. _.'· -,.',»'· .'=>=.'· _>=, ·
WM¸COMMAND .·_=; _¸..= _'= _,,=.'· ·.,' _'.=.¸ ·
·.·'.'·
¸...,
¸..., ¸...,
|
||u
uul
ll l
ll B
BBy
yyt
tte
ee
-=,»'· ¸= -='.,, 0 ·-=,»'· ·.,, _,... ¸=='· ¸> _.'· -=' _·¸ · ·.=¸
¸'>.,'· -=' _= ',,· ·'.=. _.'· _.'· -=' .·_,== _.>' _=
_|.¸| .,.,||
_|.¸| .,.,|| _|.¸| .,.,||
P
PPr
rrc
ccc
cce
eed
ddu
uur
rre
ee
-=''==, ,¸». _' ¸' -,'=·. -=,= -,.'. ',.>=, ·-=,· -,' .,=. . -'·. _=
.>=.= ) .·_.=·_', ( ',==, ¸,.=.¸
_¸. _= ·.'=='· -=,»'· ¸== _»>, ·_.'· -=' _· .·_=; -'·.'· _,=.' void
.|¸¸,
.|¸¸, .|¸¸,
www.oop.cjb.net .|l|Le|| il:X amateur¸mosta¸yahoo.Ir
www.c4arab.com www.winprog.org 115
Ç
ÇÇu
uue
eeu
uue
ee
¸.'._ .=,. _,.'»='· -=¸' _·__' .'===¸ _¸'='· .'>_= _' '=,
·-=.. _· ¸.'._'· ¸> =»=, -.,· ·',.,= _· ,'=.'· ',=''=, _' _= __.'
_=... _.'· ¸.'._'· _= ·_¸,'= '.' ¸>., '== ·_'¸.'· _'¸.· g''=,¸
-=''=='·
¸,,.L
¸,,.L ¸,,.L
R
RRe
eea
aad
ddc
ccn
nnl
ll y
yy
·_>·. _' _'; ·_'.; ) '.,. -.>'. ¸' -,>,= ( ·.·_· .; ',,· _>=, . .'.',,'·
',,'= .·_,,=. .·.=; _¸.
x.. -.|¸.
x.. -.|¸. x.. -.|¸.
R
RRe
ees
ssc
ccu
uur
rrc
cce
ee
='. ._¸='', .=». -=.'»'· ¸' -.¸»,.· ·_,.='· ¸' ) Cursor ( -,», ¸'
»,.= ·_==='· .·¸..· '..'»,,=. _· ',=·_.; -='.,, '..>=, _.'·¸ ·'
'..',=_ ,.= ',',.=.¸
-¸,-
-¸,- -¸,-
R
RRe
ees
ssc
ccu
uur
rrc
cce
ee F
FFl
ll l
ll e
ee
·'='· _'; ='., _,.. ) .rc ( .'=,_=. _¸=, _.'· ) declarations (
'=',; '»=·¸ ·._·¸='· .'·_=='' -,'= _».= _',.= _·¸
-¸,-| ..-
-¸,-| ..- -¸,-| ..-
8
88c
ccr
rre
eee
een
nn 8
88a
aav
vve
eer
rr
_ -=¸.¸='· _¸='· _= _
_.¸,,=>'· _'= ='.. .¸=¸ ,.= ..= __=.¸ =... ->_=.= _¸= _=
,.=. ¸= -.= _.,._'· ·.,'· ·_,== _=_' _==.'· _·_.=.· ·_'=·.'·
-»,»='· _· .'· CRT _.=. -,.». __=. _·_.=.· _'=·.'·
-...|| -x..¸
-...|| -x..¸ -...|| -x..¸
8
88c
ccr
rrc
ccl
ll l
ll b
bba
aar
rr
=,_. ¸= _= ,.'.., ¸,=..= -=.¸ _·¸ ·.>·; ___ -,·_= _· _¸=,
_'=¸. -.' '=> ·-=»='· ,== · _.¸==¸ _»·'
¸,¸-.|| x,¸.
¸,¸-.|| x,¸. ¸,¸-.|| x,¸.
8
88c
ccu
uur
rrc
cce
ee F
FFl
ll l
ll e
ee
,¸»,. _.'· .¸>'· ·'= ¸= ·_=='· ·'='· ¸=¸ ·_.,. ·'= _'; -',¸=.,
¸> -.= _=.... _.'· '.._·¸= -=' _= ·'.=, _==_, ,''· _· '..',.>=¸
__=.
¸-.-| ..-
¸-.-| ..- ¸-.-| ..-
8
88t
tta
aat
ttl
ll c
cc
-»,'.'· ',=,· _'= ',.=·'== -''= -.>'. _¸>. ',.,· ·.·_,=.='' -,..'',
'=' ·-,'== ',.' _'= ',, _,_=.'· ,. ¸'¸ _.= .'·¸»=='· _,· -.>'.'·
»,.= '=.'=,' ..=. _.'· ,=='· _,,=. _'= ·_.»'· ,.= _.=, '== ·' _¸==='·
.,»..'· .·¸ ) runtime (
-.s..
-.s.. -.s..
8
88t
tta
aat
ttu
uus
ssb
bba
aar
rr
_,==_,='· ,'=' -=.=..,¸ ·.··¸.'· ,'=' ¸».' .¸=¸='· =,_.'· ¸=
_·¸= __=> ·-,'= '_=. _.'· .·_,=.'·¸ ·',.,= _· _,,=.'· -''= ·=¸'
'· _'= ·_,.='· _·__.· _=, -,==¸ ·-=»='· ,·_ ·-.'. ) Ins · Lock
Num (
-|.¸| x,¸.
-|.¸| x,¸. -|.¸| x,¸.
8
88t
ttr
rrl
ll n
nng
gg
-=¸=== _.'· -=' _· ',, .=».¸ ) .=·¸ ¸' ( _¸=_'·¸ ·¸_='· _=
_,... _.'· ,'·_.·¸ _''='· .,','', ··_,=.= ¸' -.,'. -'.'.'· ·.= _¸>. .·
',.._'»= '..>=, -.' '=> ¸·¸. ,·.=..', ',==. ¸' ',=,.».¸ ·__=' _=
='.' ..='
~,¸¸ -....
~,¸¸ -.... ~,¸¸ -....
8
88t
ttr
rru
uuc
cct
ttu
uur
rre
ee
_.'·¸ ,.=..='· ¸,· _= -·_=='· ¸' -,.',»'· .·_,=.='· _= -=¸=== ¸=
·.,.= '=¸. ='., _,=,' _'»...· ¸,», ¸>,,'·¸ ·_='== ,''· _· ¸==.
'= .= _'; -,,. -.' '=> ·,.=..='· ¸,· _= '·_== -.»'',
_'.»='', -»,,.., _¸>, ¸>,,'', _,_=.'· struct
_±,±
_±,± _±,±
8
88t
tty
yyl
ll e
ee
¸=¸ ·_=' ._. _' ¸' ·.·'.'· ¸' =='· -,'= _¸>,. _.'· ¸>.'· ¸= ==.'·
==''· ·_¸.'· _= ·'.=, Times New Roman '=' ·_¸.'· ¸= >.=
>'== ¸' ·_=.= ·>.'= ·'.,=. _¸>,· ==.'·
-
-- x
xx
www.oop.cjb.net .|l|Le|| il:X amateur¸mosta¸yahoo.Ir
www.c4arab.com www.winprog.org 116
J
JJl
ll m
mme
eer
rr
-.=_' _'= ·.'=.=· ¸==. .'»,,=. .'..,, _=., ¸·¸.'· _= _¸. ¸= .·¸='·
g=·_, _· -='= ,.=.., ¸·¸.'· _= _¸.'· ·.=¸ ·',',.=. _>=, ·..==
_»,.¸='·¸ ,'='.·
..,-
..,- ..,-
J
JJc
ccc
ccl
ll b
bba
aar
rr
.=. _», .·¸..· =,_. -=.'»'· -.>__= _·__' _¸=,¸ · ) .»'· __> ·_
_>=,· ·_,='· ( _· ·.·_»'·¸ .=,'· .'.= ,.=..='· _'= ·»=. .¸.,
-=.'»'·
-=_..· ·.= ¸.= _= ·¸'=. . ,¸,'· _¸..,¸'· .'»,,=.
.|,-s| x,¸.
.|,-s| x,¸. .|,-s| x,¸.
v
vvl
ll c
ccl
ll a
aat
ttl
ll c
ccn
nn
^
^^c
ccc
cce
ees
sss
ss
¸._, ·_=='· ·.= .'».'· g=_,='· -'¸'== -''= _· -''._'· ) access (
,_= -''= _· ¸' ·',,'; ¸¸=¸'', -' .¸== _,' ·_>·.'· _= _='.= _';
¸·¸., ..=='· ¸'=='· _.=., _·¸.= _· -,'.>'· _'= _,,=.'· _=='·
__>·.'·
_s.±..| -...
_s.±..| -... _s.±..| -...
w
wwa
aar
rrn
nnl
ll n
nng
gg
¸._. .'·_=='· ,¸», _', >.= ',,· ·_>.. g=_,='· _'; .·_,.=. .·..,',
¸'=.=· _= ,,»'' ¸,¸=., -=',· -''= -,,.. '=> ·',=.=.., _' ¸,· -.·_,=.=
-·.'· _· _¸=· ) ..='· _= ¸,¸=.'· ..= >.= __.='· ._='· _',=
..='· _'; _»,»='· _,=='· (
,=, -,==_, .'==' .·_,.=.'· _¸_,.=, _¸·_.=='· _¸==_,='·
',=>=;
¸,-¸
¸,-¸ ¸,-¸

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->