??xml version="1.0" encoding="utf-8" standalone="yes"?> 列编?= 索引?/ 每一列的囑֝个数Q行敎ͼQ?br>行编?= 索引?% 每一列的囑֝个数Q行敎ͼQ?/span> 左上点X坐标 = xstart + 行编?×Qw/2Q?- 列编?#215;Qw/2Q; 左上点X坐标 = xstart + 行编?×Qw/2Q; 地图?nbsp;= Q列?行数Q?#215;Qw/2Q;
1、虚拟键?/strong>
在早期非Windowspȝ的机器上Q如果一般应用程序要取得使用者键盘的输入Q就必须d得输入按键的“扫描码(Scan codeQ?#8221;。扫描码由实际的键盘g所产生Q但是由于不同国家不同区域所使用的键盘设备可能不同,因此Windowspȝ便发展了一套标准。其解决办法是Ҏ有键盘的按键定义Zl通用?#8220;虚拟键码”Q也是说在Windowspȝ下所有的按键都会被视拟键Q包含鼠标键在内Q,而每一个虚拟键都有其对应的一个虚拟键码?br>
2、键盘消?br> Windowspȝ是一个消息驱动的环境Q一旦用者在键盘上进入输入操作,那么pȝ便会接受到对应的键盘消息。下面是最常见?中键盘消息:
WM_KEYDOWNQ按下按键消?br> WM_KEYUPQ松开按键消息
WM_CHARQ字W消?br> 当某一按键被按下时Q伴随着q个操作所产生的是以虚拟键码类型传送的WM_KEYDOWN与WM_KEYUP消息。当E序接受到这些消息时Q便可由虚拟键码的信息来得知是哪个按键被按下?br> 此外QWM_CHAR则是当按下的按键为定义域ASCII中的打印字符Ӟ便发出此字符消息。前面介l的消息循环中的Translate()函数的作用便是当按下的按键ؓ打印字符Ӟ便将虚拟键码消息q行转换q且发出字符消息
]]>
观察上面的图Q先要决定构成这q画面的贴图序。从q近层次来看Q天I是最q的Q接着是草地和山cQ因为山峦叠在草CQ接下来是房屋,最后才是前景的恐龙Q所以进行画面脓图时序应该是:天空?gt;草地?gt;山c?gt;房屋?gt;恐龙
另外Q进行山峦、房屋及恐龙的脓图操作时Q还需要进行透明的操作,才能使得q些物体能叠在它们前一层的背景上?br> 军_了脓图时的顺序之后,接着要来军_北京滚动时的速度。由于最q的背景是天I,所以当前景的恐龙跑动时Q滚动速度应该是最慢的Q而天I前的山峦滚动速度应该比天I快一点,至于房屋与草圎ͼ因ؓq在一P所以滚动速度相同Q而且又会比山峦还要快一点,q样我们决定出了所有背景的滚动速度为:天空<山c<草地=房屋
前景的恐龙只让它在原地跑动,׃背景自动向右滚动Q因此就会生恐龙向前奔跑的视觉效果?br>
范例ch3_7Q运用脓图技巧ƈ调整不同背景循环滚动的速度Q显C具有远q层ơ感的多背景循环动画?br>下蝲地址Q?a >ch3_7Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
Q阐qCؓ完成Q?br>
范例ch3_6Q用定时器Q将q箋的Q务图案显C在H口上,产生动画效果?br>下蝲地址Q?a >ch3_6Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
单一背景滚动的方法是Q利用一张相当大的背景图Q当游戏q行的时候,随着画面中h物的UdQ背景的昄区域也跟着Ud。要制作q样的背景滚动效果实际上很简单,只要在每ơ背景画面更新时改变要显C到H口上的区域可以了?br>
例如在上面的q张背景NQ由左上到右下画?个方框,代表要显C在H口上的背景区域Q程序只要按照左上到右下的顺序在H口上连l显C3个方框区域,׃产生背景由左上往右下滚动的效果?br>
范例ch3_5Q以键盘?#8593;】、?#8595;】、?#8592;】、?#8594;】键控制背景滚动昄?br>下蝲地址Q?a >ch3_5Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
1、脓囑֝标修?br>
2、排序脓?br>
范例ch3_4Q生多只恐龙随动,每次q行画面贴图前先完成排序操作QƈҎ龙跑动进行脓囑֝标修正,呈现较ؓ畅真实的动甅R?br>下蝲地址Q?a >ch3_4Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
范例ch3_3Q显Cl动态前景图案,q在昄之前q行透明Q从而生透明效果?br>下蝲地址Q?a >ch3_3Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
定时器的使用固然很简单方便,但是事实上这LҎ仅适合用在昄易动d型的游戏程序中。因而一般而言Q游戏本w需要显C顺畅的游戏画面Q玩家感觉不到延迟的状况,基本上游戏画面必d一U钟之内更新臛_25ơ以上,q一U钟内程序还必须q行消息的处理和大量数学q算甚至x的输出等操作。而用定时器的消息来驱动q些操作Q往往达不到所要求的标准,不然׃产生画面昄不顺畅和游戏响应旉太长的情c?br>
q里提出一U?#8220;游戏循环”概念。游戏@环是原先程序中的消息@环加以修改,Ҏ时判断其中的内容是否有要处理的消息,如果有则q行处理Q否则按照设定的旉间隔来重l画面。下面所使用的游戏@环的E序代码Q?/p>
// 游戏循环
// 当收到的msg.message不是H口l束消息WM_QUITQ则l箋q行循环?br>
// 其中msg是一个MSG的消息结构,其结构成员message则是一个消息类型的代号
while( msg.message!=WM_QUIT )
{
// 使用PeekMessage()函数来检目前是否有要处理的消息
// 若检到消息Q包含WM_QUIT消息Q则会返回一个非“0”的|否则q回“0”?br>
// 因此在游戏@环中Q若到消息便进行消息的处理Q否则运行else叙述之后的程序代?br>
// 注意QPeekMessage()函数不能用原先消息@环的条gGetMessage()取代
// 因ؓGetMessage()函数只有在取得WM_QUIT消息时才会返?#8220;0”Q其他时候则是返回非“0”?#8220;-1”Q发生错误时Q?/span>
if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
// GetTickCount()函数会取得系l开始运行到目前所l过的时_单位是百万分之一U?br>
// DWORD GetTickCount(); //取得pȝ开始到目前l过的时?br>
// 在这里取得时间的目的主要是可以搭配接下来的判断式Q用来调整游戏运行的速度Q?br>
// 使得游戏不会因ؓq行计算机速度的不同而跑的太快或太慢
tNow = GetTickCount();
// “tPre”记录前次l图的时_?#8220;tNow-tPre”则是计算上次l图到这ơ@环运行之?br>
// 相差多少旉。这里设|ؓ若相?00个单位时间以上则再次q行l图的操作,通过q个
// 数值的控制可以调整游戏q行的快?/span>
if(tNow-tPre >= 100)
MyPaint(hdc);
}
}
׃循环的运行速度q比定时器发出时间信h得快Q因此用游戏@环的可以更精准地控制E序q行速度q提高每U钟画面重绘的次数?br>
范例ch3_2Q用游戏@环生动L果,q在H口左上角显C每U画面更新次数?br>下蝲地址Q?a >ch3_2Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
在这个范例中讑֮画面更新的时间间隔是0.1U,所以每U钟最多会更新10ơ画面,不过如果在范例运行的同时Q运行其他程序,那么CPU必须马上d理所开启的其他E序Q因此可能会使得每秒画面的更新次C降。这L情Ş在每U画面更新次数越高的时候会显著?br>
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
定时器(TimerQ对象可以每隔一D|间发Z个时间消息,E序一旦接收到此消息之后,便可以决定接下来要做哪些事情。这L一个特性刚好可以适合播放静态的q箋囄Q生动ȝ效果。下面来介绍如何建立与用定时器?br>
1、徏立定时器
Windows API的SetTimer()函数可ؓH口建立一个定时器Qƈ且每隔一D|间就发出WM_TIMER消息Q此函数的用语法如下:
UINT SetTime( HWND 接收定时器消息的H口,
UINT 定时器代?
UINT 旉间隔,
TIMERPROC 处理响应函数,);
SetTimer(1,500.NULL);
2、删除定时器
定时器徏立后Q就会一直自动地按照讑֮的时间间隔发出WM_TIMER消息Q如果要停用某个定时器,必须使用下面的这个函数?br>
BOOL KillTimer(int 定时器代?;
范例ch3_1Q用定时器Q将q箋的Q务图案显C在H口上,产生动画效果?br>下蝲地址Q?a >ch3_1Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
范例ch2_11Q在斜角地图中加入景物,展现游戏地图效果?br>下蝲地址Q?a >ch2_11Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
上图中的左边是四方Ş囑֝的拼接,而右边的则是菱Ş囑֝的拼接。四方Ş囑֝拼接ҎӞ囑֝~号换算成行~号与列~号再换成贴图坐标。对于斜角地图拼接来_q些步骤都是一LQ但是在换算贴图坐标Ӟ׃只要昄囑֝中的菱Ş部分Q因此在贴图排列的方式上会有不同Q因而脓囑֝标的计算公式也就不一样了?br> 此外Q在合ƈ两个囑֝的菱形部分时Q?span style="COLOR: red">q需要加上一步透明的步?/span>Q不然若直接按照求得的脓囑֝标来q行贴图Q其效果׃如下图所C:
接下来看看斜角地图拼接时Q各个图块编号与实际排列的情形,如下图所C:
上图同样是一?×3个小囑֝所拼接而成的地图,其中的数字式囑֝~号。对于每一囑֝首先必须出它的行编号与列编P然后才能计算它实际的贴图坐标Q计行列编LҎ与随W?#8220;游戏地图制作——^面地图脓?/a>”所使用的公式一P卻I
那么囑֝左上点脓囑֝标的计算公式如下Q?
左上点Y坐标 = ystart + 列编?×Qh/2 Q? 行编?#215;Qh/2Q;
公式中的xstart与ystart是代表第一张图块左上角贴图坐标的位|,以下图来说明q个公式Q?br>
图中以红U框来表C图块真正的矩Ş范围Q在q行贴图Ӟ首先要定义第1张图块的贴图位置Q其他图块的贴图坐标再由此图块向下g伸。现在假讄定图?的脓囑֝标是QxstartQystartQ,那么接下来考虑囑֝1的矩形范_它左上角贴图的坐标则是(xstart+w/2,ystart+h/2Q,考虑囑֝2的矩形范_它左上角贴图的坐标又变成Qxstart+w/2×2,ystart+h/2×2Q。依ơ类推,再加入行~号与列~号Q可以得C面的q个求图块脓囑֝标的公式Q?
左上点Y坐标 = ystart + 列编?×Qh/2 Q;
但是要注意一点,q是当图块都在属于同一列的情况。考虑下一列的囑֝4Q图?的左上角贴图坐标是(xstart-w/2,ystart+h/2Q,而图?的左上角贴图坐标是(xstart-w/2+w/2,ystart+h/2+h/2Q,囑֝6的左上角贴图坐标为(xstart-w/2+w/2×2,ystart+h/2+h/2×2Q,依次cLQ可看出同一列上坐标变化规律都是一LQ脓囑֝标都是往右下斚w增半个囑֝的长于高单位?br> 如果是在同一行(囑֝0??Q上的坐标变化则是往左下斚w减半个囑֝的长QX轴方向)以及递增半个囑֝的高QY轴方向)Q因此利用图块的行编号与列编号便得出了前面的贴图坐标公式?br> 计算出每个图块的坐标q完成了斜角地图的拼接后Q此时要整块地图脓到窗口中Q还需要知道地囄宽度与高度,计算的方法可以通过下图q行说明Q?br>
׃面可以很Ҏ的推导出整张地图的宽与高计算公式如下Q?
地图?nbsp;= Q列?行数Q?#215;Qh/2 Q;
在了解了关于斜角地图拼接的方法之后,接下来的q个范例上一节里的q面拼接地图转换成以45度角俯视的斜角地图?br>
范例ch2_10Q从文g中加载位图,q显C在H口上?br>下蝲地址Q?a >ch2_10Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?
]]>
这个一l数l以行列的方式排列,可以看出每个数组元素对应图中的哪个图块?br> 需要提醒的是,׃使用的是一位数l来定义地图内容Q因此上面这个数l的每个元素的烦引值是0……11.但是Q由于程序里不论计算囑֝贴图的位|还是计整张地囄长宽寸Q都是以行列来进行换的Q所以需要将数组的烦引D{换成相应的列~号与行~号Q{换公式如下:
列编?= 索引?/ 每一列的囑֝个数Q行敎ͼQ?br>行编?= 索引?% 每一列的囑֝个数Q行敎ͼQ?/span>
下图验证上面的公式,Ҏ中的~号是一l数l的元素索引倹{?br>
左上点X坐标 = 行编?× 囑֝的宽度;
左上点Y坐标 = 列编?× 囑֝的高度;
范例ch2_9Q运用不同小囑֝Q示范^面地图拼接的技巧?br>下蝲地址Q?a >ch2_9Q上传到windows liveI间Q可能需要MSN账号登陆Q?br>说明Q程序源代码中有相关的注释?br>E序q行l果如下图:
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?/p>
]]>
范例ch2_8Q这个范例说明介l如何生透明半透明的效果?br>下蝲地址Q?a >ch2_8
接下来说明上qC个步骤所产生的图点色彩的变化?br>
步骤一Q加载位?/span>
要从文g加蝲位图Q常使用LoadImage()函数
参数 |
说明 |
HINSTANCE |
包含位图所在的实体Q若要加载的位图存在于硬盘或者资源文件中Q则此参数设?span>”NULL” |
LPCTSTR |
要加载位图所在的路径与文件名或者资源名U?/span> |
UINT |
加蝲位图的类型,有下?span>3U: ◆IMAGE_BITMAPQ加载的位图Z般图文gQ扩展名?span>“.bmp” ◆IMAGE_CURSORQ加载的位图为光标图标,扩展名ؓ“.cur” ◆IMAGE_ICONQ加载的位图为图标,扩展名ؓ“.ico” |
int |
位图加蝲的宽度,单位为像?/span> |
int |
位图加蝲的高度,单位为像?/span> |
UINT |
讑֮位图的加载方式,若是从文件中加蝲位图Q则设ؓ“LR_LOADFROMFILE |
步骤二:建立与窗?/span>DC兼容的内?/span>DC
内存DCq不是真正的讑֤?/span>DCQ在q里把它揭示Z个缓冲区或许会更恰当些。内?/span>DC用来暂存加蝲的位图,׃最l会把存储在q个内存DC上的位图贴到真正的窗口的DC上,因此q个内存DC必须跟窗?/span>DC的性质兼容。可调用CreateCompatibleDC()函数来徏立内?/span>DC?/span>
位图对象?/span>GDI?/span>6U对象之一Q内?/span>DC选用位图对象的方法和前面介绍的选用ȝ或画L方式相同Q都是通过调用SelectObject()函数来实现?/span>
步骤四:贴图
把内?/span>DC中的位图复制到显C的DC上,q个操作被称?#8220;贴图”。函数是BitBlt()Q?/span>
Raster?/span> |
说明 |
BLACKNESS |
来源位图{换ؓ黑色 |
DSTINVERT |
目的地DC?#8220;NOT”q算 |
MERGECOPY |
选择的笔刷与来源位图?#8220;AND”q算 |
MERGEPAINT |
先将来源位图?#8220;NOT”q算Q再与目的地DC?#8220;OR”q算 |
NOTSRCCOPY |
来源位囑ց“NOT”q算 |
NOTSRCERASE |
先将来源位图与目的地DC?#8220;OR”q算Q再其?#8220;NOT”q算 |
PATCOPY |
选择的笔刯到目的地DC?/span> |
PATINVERT |
目的地DC与选择的笔刷做“XOR”q算 |
PATPAINT |
先将来源位图?#8220;NOT”q算Q再与笔刷做“OR”q算Q最后再与目的地DC?#8220;OR”q算 |
SRCAND |
来源位图与目的?/span>DC?#8220;AND”q算 |
SRCCOPY |
来源位图脓到目的地DC?/span> |
SRCERASE |
先将目的?/span>DC?#8220;NOT”q算Q再与来源位囑ց“AND”q算 |
SRCINVERT |
来源位图与目的?/span>DC?#8220;XOR”q算 |
SRCPAINT |
来源位图与目的?/span>DC?#8220;OR”q算 |
WHITENESS |
来源位图{换ؓ白色 |
范例ch2_5Q从文g中加载位图,q显C在H口上?br>下蝲地址Q?a >ch2_5
函数名称 |
说明 |
Polygon |
l制闭多边?/span> |
PolyLine |
l制多边U条 |
PolylineTo |
以当前画W所在位|绘制多边线?/span> |
PolyPolygon |
l制多个闭多边?/span> |
PolyPolyline |
l制多个多边U条 |
要自定义ȝ或画P可以使用下列3?/span>API函数?/span>
建立新画W与d之后Q必d所要进行绘囄DC中选用它们Q才会生预期的ȝ及画h果,选用的函数如下:
GDI对象一l徏立便会占用部分内存,一旦不使用的时候,务必它们删除,删除函数如下Q?/p>
BOOL DeleteObject(HGDIOBJ GDI对象); //删除GDI对象
Device ContextQ设备内容)一般简UCؓDCQ就l图的观Ҏ_DC是E序可以q行l图的地斏VD例来_如果要在整个屏幕Zl图Q那?span>Device(讑֤)是屏幕,?span>DC
是屏幕Z的绘囑ֱ。相同的道理Q如果要在窗口中l图Q那?span>Device是H口Q?span>DC是H口上可以绘囄地方Q也是内部H口区?/span> 此外Q在处理WM_PAINT消息之外的地方,若要取得H口?/span>DCQ必调用下面的q个函数Q?/p>
HDC GetDC(HWND hWnd); //取得DC
坐标问题。以屏幕区的左上角的坐标点ؓ原点Q屏q上的Q何一个位|都可以某一点坐标来表示Q称为屏q坐标。若l图的区域是内部H口区,那么坐标原点所在的位置׃通了Q变成了内部H口最左上角的炏V?/span>
对于坐标的{换,GDI中提供了相关的函数?br>
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/a>?/span>
2?/span> C++是拥有着优良传统的程序语aQ?/span>VC++则是微Y公司开发出的一套适用?/span>C/C++语法的程序开发工兗在VC++开发环境中Q编?/span>Windows操作pȝq_的窗口程序有两种不同的程序架构:一U是微Y?/span>VC++中所加入?/span>MFCQ?/span>Microsoft Foundation Class libraryQ架构,MFC是一个庞大的cd函数库,其中提供了完整开发窗口程序所需的对象类型与函数Q常用于设计一般的应用软gE序Q另一U是本书所介绍?/span>Windows API架构Q?/span>Windows API来开发上q的应用软gE序q不ҎQ但用在设计游戏E序上却相当单且h较优的q行性能?/span>
3?/span> VC++在游戏程序开发上所具备的优?/span>
3.1优越的速度表现
C++E序~译后的文g是可直接q行的机器码Q而其他程序语aQ如VB?/span>JavaQ编译后产生的是一U所谓的“中间?#8221;。运行中间码Ӟpȝ内必d在解释该E序语言?#8220;解释器(InterpreterQ?#8221;Q用做同步翻译工作。解释器解释中间码时Q本w会加蝲到内存中占用部分内存Q且同步译中间码的q程也会费旉Q因此,q行q类E序时要比可直接q行的机器码~慢很多?/span>
3.2Ҏ管理资源与内存
?/span>VC++的开发环境中Q程序资源及内存理斚w都具有相当的Ҏ?/span>
在资源管理部分,通常是通过一个句柄来使用该项资源。这里所指的资源Q可能是H口、设备、图像和声音{对象?/span>
在内存管理部分,C/C++语言本n具备内存管理的功能Q除了可通过指针q行内存的存取和配置之外Q还提供了完整的内存理相关函数?/span>
׃游戏E序使用了大量的多媒体数据,q行时会占用不少内存Q因此,若程序设计师能够Ҏ有效地来管理资源和内存Q将可大大降低硬件要求ƈ提高游戏E序本n的性能?/span>
3.3易于使用Windows API
Windows API?/span>Windows操作pȝ提供的动态链接函数库Q通常?#8220;.DLL”的文件格式存在于Windowspȝ中)Q?/span>Windows API中包含了Windows的内核及所有应用程序所需要的功能?/span>
Windows操作pȝ发展至今Q?/span>Windows API主要可分?/span>Win16Q?/span>Windows 3.1以前Q以?/span>Win32Q?/span>Windows 95以后Q两U版本,不同版本Windowspȝ?/span>API的内Ҏ多或有些差异但都以向下兼容为原则?/span>
一般在VBE序中,要调?/span>Windows API的函敎ͼ必须先完成声明的操作。但?/span>VC++开发环境下Q不论采?/span>MFCq是Windows API的程序架构,只要在项目中讑֮好所要链接的函数库ƈ引用正确的头文gQ那么在E序中?/span>Windows API的函数就跟?/span>C/C++标准函数库一样容易?/span>
Q动态链接(Dynamic LinkingQ是指在E序q行阶段Q真正调用外部函数时才进行链接(注:程序代码中调用函数的指针指向外部函数所在的地址Q的操作Q?br>
4?/span> 构徏游戏设计的舞?/span>(单击光接可q入相应的随W?
5?/span> E序架构说明(单击光接可q入相应的随W?
PSQ如惌得更多关于Visual C++游戏开发的内容Q可点击随笔Q《Visual C++游戏~程基础》学习笔记——烦引随W?/font>?/font>
函数名称 |
说明 |
WinMain |
ȝ序,E序起始?/p> |
WndProc |
自定义函敎ͼ处理E序消息 |
MyRegisterClass |
自定义函敎ͼ注册H口cd |
InitInstance |
自定义函敎ͼ建立及显C窗口的初始化函?/p> |
下面来说说这些函数的内容与功能?br>
1.WinMain函数
ȝ序,也就是整个项目程序开始运行的地方Q如同ConsoleE序中的main()函数?/p>
文g名称 |
说明 |
canvas.cpp |
ȝ序文Ӟ其中包含整个目的主E序WinMain |
canvas.rc |
资源文gQ定义了整个目所使用的资?/p> |
StdAfx.h |
标头文gQ其中引用整个项目所需的头文g |