 |
巴比伦塔为什么会失败
|
|
| |
| 在一次从东方往西方迁徙的过程中,人们发现了苏尔美的地区的一处平原,并在那里定居下来。接着他们奔相走告说:“来,让我们制造砖块,并把它们烧好。”于是他们用砖块代替石头,用沥青代替灰泥(建造房屋)。然后他们又说:“来,让我们建造一座带有高塔的城市,这个塔将高达云霄,也将让我们声明远扬,同时,有了这个城市,我们可以居住在这里,再也不会分散在广阔的大地上了。”于是上帝决定下来看看人们建造的城市和高塔,看了以后,他说:“他们只是一种种族,使用一种语言,如果他们一开始就能建造城市和高塔,那以后就没有什么能难得倒他们了。来,让我们下去,在他们的语言里制造些混乱,让他们相互之间不能听懂。”这样,上帝把人们分散到世界各地,于是他们不得不停止建造那座城市。
-----创世纪,11:1-8
|
|
| 作者:不祥 barco张贴于2004-05-16 12:08:52.0,共阅读1804次,回复0次 |
|
|
 |
snoopy每日一译-DLL中的对话框
|
|
| |
| 在DLL中包含它自己的资源(例如对话框),好象很简单。但是在我发现如何实现之前,我的头都大了。snoopy每日一译-DLL中的对话框
by:Randy More 2002.10.1
from:codeGuru
翻译:snoopy
在DLL中包含它自己的资源(例如对话框),好象很简单。但是在我发现如何实现之前,我的头都大了。
在DLL的函数中弹出对话框,你必须处理状态以使DLL代码能使用DLL资源:
extern __declspec(dllexport) void ShowEditDialog(int &MyData1, int &MyData2)
{
//确保我们能使用DLL资源
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyLocalDialog dlg;
dlg.Arg1 = MyData1; //为MyLocalDialog指定本地数据
dlg.Arg2 = MyData2;
dlg.DoModal();
MyData1 = dlg.Arg1; //对话框关闭后的数据
MyData2 = dlg.Arg2;
}
这有一个来自Johan Nilsson 的升级版。
当应用程序调用这个导出函数时永远不能使用GetLastError()检查发生的错误。这是因为AF ...
|
|
| 作者:不祥 ycr40张贴于2004-05-14 09:23:12.0,共阅读2304次,回复0次 |
|
|
 |
Debug 和 Release 编译方式
|
|
| |
| 经常在 CSDN 上看见有人问 Debug 运行正常但 Release 失败的问题。以往的讨论往往是经验性的,并没有指出会这样的真正原因是什么,要想找出真正的原因通常要凭运气。最近我看了一些这方面的书,又参考了 CSDN 上的一些帖子,然后深入研究了一下关于二者的不同。以下是我的一些体会,拿来与大家共享。
--------------------------------------
本文主要包含如下内容:
1. Debug 和 Release 编译方式的本质区别
2. 哪些情况下 Release 版会出错
2. 怎样“调试” Release 版的程序
--------------------------------------
关于Debug和Release之本质区别的讨论
一、Debug 和 Release 编译方式的本质区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误 ...
|
|
| 作者:不祥 jerry张贴于2004-05-11 20:51:44.0,共阅读3445次,回复0次 |
|
|
 |
如何定制对话框系统菜单
|
|
| |
| 系统菜单是每个 Windows 程序的标准特性。通常系统菜单由 Windows 系统来管理,所以我们平时编成时很少去碰它。但是,有的时候,我们确实想定制自己的系统菜单项。
这样就涉及到定制菜单的处理问题,因为 Windows 无法自动处理我们定制的系统菜单。而且,系统菜单的处理方式与常规的菜单处理是不同的。那么我们如何实现定制的系统菜单呢?相信看完本文的介绍,你会得到满意的答案。
本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。例子程序对系统菜单进行了定制,在原有菜单基础上添加了两个菜单命令:一个是显示“关于”对话框;另一个是“退出”。之所以要加一个“退出”菜单命令,是因为例子程序改写了对话框原来默认的“关闭”菜单命令行为(Alt-F4),用来隐藏对话框。因此必须加一个程序的“退出”出口。此外,例子程序利用一个第三方的系统托盘处理类,利用系统托盘图标可以显示/隐藏对话框。 下面我们就来看看用 C++/MFC 实现的细节。
添加菜单
首先在资源定义文件 resource.h 中定义菜单项标示,也可以在标准头文件中定义。
菜单项标示必须具有唯一性。其次,Windows 对系统菜单的处理与常规菜单的处理方法是不同 ...
|
|
| 作者:不祥 jerry张贴于2004-05-11 20:41:25.0,共阅读2510次,回复0次 |
|
|
 |
在MFC中嵌入Word
|
|
| |
| 一、引言
Microsoft Office办公套件以其功能强大、方便实用而被广泛使用。我们可以使用自动化作为Word用以把其功能显露给其他应用的方式,采用这种方式可以尽可能少的占用自动化客户的资源,并且不需要被访问对象的类型信息就可以进行调用。
二、创建工程
以下是创建这个MFC应用程序的步骤:
(1)使用AppWizard创建一个新的MFC AppWizard(EXE)工程,命名为"Embed_Word"
(2)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持。 其它都为默认。在ClassView中将产生如下类:
应用类: CEmbed_WordApp in Embed_Word.h and Embed_Word.cpp
框架类: CMainFrame in MainFrm.h and MainFrm.cpp
文档类: CEmbed_WordDoc in Embed_WordDoc.h and Embed_WordDoc.cpp
视图类: CEmbed_WordView in Embed_WordView.h and Embed_WordView.cpp
容器类: CEmbed_WordCntrItem in CntrItem.h and CntrItem.cpp
(3)在View菜单中 ...
|
|
| 作者:不祥 Boyben张贴于2004-05-09 10:51:01.0,共阅读2657次,回复0次 |
|
|
 |
snoopy每日一译-完美的ADO[2](下)
|
|
| |
| snoopy每日一译-完美的ADO[2](下)
by:Bob Place 1999.6.27
from:codeGuru
翻译:snoopy
可以建立两个同名方法,一个返回符号分割字符串(方法名有前缀”s”),另一个返回记录集:
STDMETHODIMP CADO::GetCustomerNameAndBalance(BSTR CustKey, _Recordset **Result)
{
// std stream used to create the SQL statement
std::strstream SQL;
// Put the BSTR into something we can deal with
_bstr_t Holder(CustKey);
SQL.str("");
SQL<<"SELECT a.cust_name, b.cust_balance FROM cust_info as a, cust_credit as b WHERE a.cust_id = '<<(char*)Holder<<" AND a.cust_key = b.cust_key";
ADOExecute(_bstr_t(SQL.str().c_str()),_bstr_t(","),Result);
retu ...
|
|
| 作者:不祥 ycr40张贴于2004-05-01 10:24:27.0,共阅读3067次,回复0次 |
|
|
 |
snoopy每日一译-完美的ADO[2](中)
|
|
| |
| snoopy每日一译-完美的ADO[2](中)
by:Bob Place 1999.6.27
from:codeGuru
翻译:snoopy
SAFEARRAY(sorry没有它的封装类)是从容易COM对象传送和接受数据的方法之一(当然,容易是相对而言)。
SAFEARRAYBOUND可以用来设置SAFEARRY的范围。你必须设定上界和下界。
让我们看看例子,假设我们要建立一个10行2列的SAFEARRAY:
//2列,因此MyBound有2维
SAFEARRAYBOUND MyBound[2];
//10行
MyBound[0].cElements = 10;
MyBound[1].cElements = 10;
//设定下界为0
MyBound[0].lLbound = 0;
MyBound[1].lLBound = 0;
//定义VARIANT指针
VARIANT *pVariant;
VariantInit(pVariant);
pVariant->vt = VT_VARIANT | VT_ARRAY;
pVariant->parray = SafeArrayCreate(VT_VARIANT2MyBound);//建立SAFEARRAY
或者你可以直接使用SAFEARRAY类型:
SAFEARRAY p ...
|
|
| 作者:不祥 ycr40张贴于2004-04-30 17:33:39.0,共阅读2992次,回复1次 |
|
|
 |
MFC6.0 Class Hierarchy Chart
|
|
| |
| About the Microsoft Foundation Classes
The library’s classes are presented here in the following categories:
Root Class: CObject
MFC Application Architecture Classes
Application and Thread Support Classes
Command Routing Classes
Document Classes
View Classes (Architecture)
Frame Window Classes (Architecture)
Document-Template Classes
Window Dialog and Control Classes
Frame Window Classes (Windows)
View Classes (Windows)
Dialog Box Classes
Control Classes
Control Bar Classes
Drawing and Printing Classes
Output (Device Context) Classes
Drawing Tool C ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-30 08:43:28.0,共阅读3076次,回复0次 |
|
|
 |
snoopy每日一译-完美的ADO[2](上)
|
|
| |
| 本文告诉你怎样使ADO在你未来的应用中更简单。但是,首先,先向你展示使用ADO的另外一些细节(在你的ATL COM对象中或在你的应用程序中)。例子中,我会向你展示如何在ATL对象中使用ADO。我们使用ATL建立business层对象的所有数据IO和规则。
这样不但允许我们在特定的应用中使用这些规则和数据,而且另外一些“相关”的应用程序可以使用它们。以下是本文接触到的内容:
1、建立一个ATL对象。
2、在ATL对象中加入ADO。
3、在接口中加入方法和属性。
4、BSTR(_bstr_t), VARIANT(_variant_t), 和 SAFEARRAY。
5、使用Connection对象连接/关闭连接,从SQL建立记录集,使用Command对象。
6、使用Command对象执行存储程序。
7、将记录集转换称符号分割字符串,并传送给客户程序。
8、封装访问ADO的business逻辑应用。
9、展示VC++和VB如何使用COM对象的方法和属性。完美的ADO II
by:Bob Place 1999.6.27
from:codeGuru
翻译:snoopy
一年多以前,我写了通用的Recordset。这是一个简单的包封了CDaoRecordset的类,令使用动态绑定大大简单化。然后,ADO来了,它缺省地使用动态绑定,跟DAO和通用的 ...
|
|
| 作者:不祥 ycr40张贴于2004-04-29 21:19:11.0,共阅读3157次,回复0次 |
|
|
 |
snoopy每日一译-完美的ADO
|
|
| |
| 本文的目的是让你感到ADO没有什么可怕的,而不是ADO的细节。我甚至没有告诉你ADO能做什么。ADO比DAO更快、更容易使用、更强大。完美的ADO
by:Bob Place 1999.4.4
from:codeGuru
翻译:snoopy
我们都很熟悉CDatabase和CDaoDatabase。它们相对比较容易去使用,它们很好地配合我们的应用程序,and they are easily distributed.使用CRecordset类,你很容易建立强大的数据库运用。
现在,当你刚刚感到用c++开发数据库项目有点把握的时候,微软推出一个叫UDA(Univeral Data Access数据统一访问)和一个相对简单,但缺乏文档说明的ADO(ActiveX Data Object)。非常不幸,微软的家伙们认为没有必要提供任何样子的文档Visual C开发人员。如果你试图从网上搜索,你会发现很难找倒有关ADO的好例子。
和ADO相处几个月后,我开始对ADO产生好感,可能将来我不用其它而只用ADO开发数据库。当你认识到ADO是多么容易使用、多么强大,你可能就会和我想的一样了。当我用DAO编写通用Recordset时,有一简单的方法使用数据动态绑定,那就是在查询(query)而不是表(table)上建立recordset。而对于ADO,缺省使用的就是数据动态绑定,这正是 ...
|
|
| 作者:不祥 ycr40张贴于2004-04-23 12:55:27.0,共阅读3898次,回复2次 |
|
|
 |
在同一个进程空间运行两个程序
|
|
| |
| 进程 程序众所周知,bo2k可以在一个指定的进程空间(比如explorer.exe进程)做为一个线程运行。本文试图找出一种方法,使得任意exe都可以在其他进程中以线程运行(当然,这里说的"任意"是有条件的,下面会讲到)。
为行文简单起见,我把先加载的exe称为宿主,后加载的exe称为客户。对于上面的例子,explorer.exe为宿主,bo2k.exe为客户。
基本知识
每一个exe都有一个缺省加载基址,一般都是0x400000。如果实际加载基址和缺省基址相同,程序中的重定位表就不需要修正(fixup),否则,就必须修正重定位表;
如果一个程序没有重定位表,而且如果程序不能在缺省基址处加载,那么程序将不能运行。举个例子,Windows95的最低加载基址是0x400000,你在Windows NT上开发了一个exe,指定其加载基址为0x10000,如果连接时让连接器剥离重定位表,那么他将无法在Windows95下运行。
bo2k为了避免和普通程序冲突,选了一个极其特殊的基址:0x03140000,这个地址一般不会有程序用到。这样bo2k启动后,用WriteProcessMemory将自身复制到宿主进程的0x03140000地址处,再用CreateRemoteThread远程启动一个线程,从入口点开始执行。
bo2k能够在其他进程空间正常运行,关键有 ...
|
|
| 作者:不祥 Bccv张贴于2004-04-26 00:14:23.0,共阅读3102次,回复2次 |
|
|
 |
白乔原创:实战软件DIY[4]
|
|
| |
| 3. 实战策略
确定了FlashNow!的功能需求之后,接下来就是系统设计的工作。很简单,“怎样解决用户需求所提出的问题”,“在多种解决方案中,哪一种方案最合适”,如此如此,就是具体的系统设计的过程。系统设计一般分成概要设计和详细设计,大抵是“逐步求精”的思路。
如何设计我们的FlashNow!呢?不要慌,我们从系统流程设计、系统模块设计和系统类设计三个方面入手。
3.1 系统流程设计
FlashNow!包括两个重要的流程,用户可以直接启动FlashNow!,或者从一个.swf文件关联过去;另一种方式,用户可以从文件夹的Shell菜单中选取“启动FlashNow!动画浏览器(F)”来启动FlashNow!,对应于不同的系统入口,FlashNow!的系统流程设计如下:
流程一(浏览视图):
流程二(查看视图):
流程很简单,但愿软件实现起来也同样的简单。
3.2 系统模块设计
总体来说FlashNow!可以分成以下几大模块:
² Flash动画播放控制模块
包括动画播放(Play)、停止(Stop)、跳转(Seek)、拖放(Drag)、放大(ZoomIn)、缩小(ZoomOut)、全屏显示(FullScreen)模块;包括动画循环播放、画面质量和动画背景色设置等模块;
² Explorer文件 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:40:47.0,共阅读3320次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[3]
|
|
| |
| 2. 实战部署
编码?别急。对程序员来说,编码是很惬意的事情(就象碰到咖啡和啤酒一样),但记住:不要急着编码。做好完整的实战部署,才能打好仗。
2.1 问题定义
为什么要开发FlashNow!?开发FlashNow!真的有必要吗?FlashNow!系统的开发真正可行吗?下面我们来具体分析一下需求产生的基本背景。
也许你使用过acdsee,很好的东西,acdsee是个很成功的案例,大量的收藏图片,合法的,或者不合法的,你都会想到使用acdsee来查看它,这就是acdsee成功的地方。那么,现在流行什么了?现在(实际上是去年、或者前年)流行起Flash动画了,追美眉的男生一定很清楚,阿贵系列的,snoopy系列的,流氓兔系列的,ShowGood MTV,还有更多的无厘头的MTV,都纷纷采用Flash动画格式,去网上随便走走,活灵活现的Flash广告比中关村的ITer还要多。
总之,Flash动画很流行了。Flash作为一种成熟的流式技术,给动画带来了丰富的声音、快的速度和吸引人的交互性,Flash让动画活起来了。有Flash查看工具吗?有的,市场上流行的动画浏览器不少,有一款国外的产品SwfBrowser就很不错。怎么说呢,利用ShockwaveFlash控件,通过VB就完全可以做出一个象模象样的Flash动画浏览器来。作为Flash的缔造者,Macromedia也提供了界面 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:39:15.0,共阅读2835次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[2]
|
|
| |
| 1. 实战目标
我们到底要做什么?“一副图画胜过千言万语”,图1为FlashNow!的最终用户安装界面(在本文的后续内容我们将学习到软件安装程序的制作)。
图1 FlashNow!动画浏览器安装界面
再也简单不过了,我们要做的是一个Flash动画浏览器。图2和图3是软件运行界面的2个不同风格的快照(snapshot),图2是FlashNow!的查看视图,图3是FlashNow!的浏览视图,一个类似于资源浏览器的界面。
图2 FlashNow!的查看视图
图3 FlashNow!的浏览视图
程序跑起来会有2个界面,实战目标应该清楚了,FlashNow!实际上就是一个类似于acdsee双界面的Flash动画浏览器。
“麻雀虽小,五脏俱全”,再简单的软件都必须有详尽的帮助文档。如图4为FlashNow!的帮助界面。看来我们的实战内容还应包括帮助文档的编写。
图4 FlashNow!的帮助界面
看来要学的东西还真的不少,那我们赶快开动吧!
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:38:07.0,共阅读2942次,回复0次 |
|
|
 |
白乔原创:VC之控件篇
|
|
| |
| 本文主要通过大量示例指引读者了解和使用Windows控件以及ActiveX控件。1 前言
1.1 控件之于VC
控件与Visual C++没有直接的关系,控件是Windows操作系统的界面元素,而VC只是一种开发语言。VC可以编写Windows程序,当然也可以编写Windows界面,包括最熟悉的对话框界面。
对话框界面是初学者学习VC的一道门槛,学习复杂的文档/视对于初学者来说是很痛苦的事情。而对话框的优点就在于它的“所见即所得”,设计界面画得有多好看,程序运行界面就有多好看。而如何让你的对话框的界面更丰富一点,那就是控件的事情了。
所以,你,责无旁贷的,要先学好控件的使用;而本次教程,正是指引你如何在VC里实现控件编程。
控件是窗口,是个完成特定功能的小窗口。例如:最熟悉的列表框控件可以让你用来列出你所有女友的名字;
控件放置在对话框里,对话框就成为控件的容器,或曰父窗口;而控件就成为对话框的元素,或曰子窗口。
控件并不总是显示成一个窗口,它可以是隐藏着的,例如:你可以使用定时器控件来控制“神五”的发射,但没必要一定要在发射系统的主界面上土土地画上一只小闹钟。
你用来选择女友名字的列表框是Windows系统标准控件,用来指示大爆竹升天的定时器也是。但Windows系统为你考虑的总会有限,那么就需要一些先行的人(第三方)为你准备一些他们出品的控件,这些符合Windo ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-15 22:59:04.0,共阅读7965次,回复1次 |
|
|
 |
白乔原创:VC之控件篇[3]
|
|
| |
| 以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。 1 使用ActiveX控件
以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。
1.1 控件的注册
不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,可以使用VC附带的工具来注册某个控件,按照以下步骤:
1. 在VC的Tools菜单下启动ActiveX Control Test Container;
2. 在ActiveX Control Test Container里打开菜单File\Register Controls…;
3. 弹出窗口Register Controls显示系统中已注册的所有ActiveX控件,点击左下角的“Register…”按钮;
4. 选择待注册的控件文件,如:“C:\WINNT\system3 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-15 23:12:22.0,共阅读8648次,回复0次 |
|
|
 |
白乔原创:VC之控件篇[2]
|
|
| |
| 1 使用Windows标准控件
1.1 常见控件列表
Windows标准控件即普通控件,撰写此文时,笔者每天面对的Word就带了一脸的控件,当然你肯定也熟悉:字体选择下拉框、工具栏、滚动条、状态栏,如此等等。
常见的Windows标准控件在VC里就有:
图2 控件集窗口
通常这个控件集窗口在你的对话框设计界面的附近总能找到,如果找不到,在VC工具栏的任何空白处点击右键,在弹出菜单的Controls菜单项前面打上勾即可,如图所示:
图3 显示控件集窗口
你也许已经看到了,我们图1所示的FlashPlayer中有3个控件是Windows标准控件,好,我们先系统地学习一下怎么使用这3个控件。
1.2 引入控件
1. 准备对话框
对话框相当于控件的容器,我们当然要先准备一个对话框。好办,直接创建一个基于对话框的工程就是了:
图4 准备对话框Step 1
注意,在Step 2中要确认“3D Controls”和“ActiveX Controls”前面打上勾,如图所示:
图5 准备对话框Step 2
这样你的程序就支持三维控件和我们后面即将使用到的ActiveX控件了。如果去掉了勾,或者你面对的正是你师兄当年准备论文的旧的project,它好像并不支持ActiveX控件,那该怎么办呢(好多VC网友总是带着那张哭丧脸的表情问我这种问题)?没事,在主程序 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-15 23:05:55.0,共阅读9305次,回复0次 |
|
|
 |
白乔原创:艺术编程之C++篇[4]
|
|
| |
| 3 编写有用的代码——代码的可用性
中国的程序员都不大喜欢公开代码,自己写的程序模块别人很难也很少有机会用得上,这是一件很奇怪的事情。每个自诩为很“牛气”的程序员总在花费相同的时间做着和别人重复的事情。很少人在自己拷贝来的代码中声明别人的版权,这确实是太奇怪了。
这样的事情发生,一方面与思维习惯有关,对国人来说,程序是用来使自己出名的,而不是使别人出名的,程序的源码和资料别人当然别想拿得到;另一方面,这样的情况与国人程序的质量有关,别人的程序拿过来,用不了,或者用得很不舒服,还不如自己重新写一个,其结果,当然会造成闭门造车,“百家争鸣”——而这绝对不是好事。
本章节引导你如何不浪费时间(自己的,和别人的)重复劳动。
3.1 别的系统可以用吗?——可移植性(portability)
你做的程序在别的平台也可以用吗?“应该没问题”,这是大多数程序员的回答。之所以“应该”,是因为程序员心里没底,在程序开发过程中程序的移植性一直是个门外话题。这样的程序拿出来,正如将中国的演员明星拿到好莱坞,让人心里总是没底。
以下是一些提高程序的可移植性的建议:
将“设备相关程序”与“设备无关程序”分开。正如Java的虚拟机与.class字节码文件其实就是将一个完整的程序分成两部分;
将“功能模块”与“界面模块”分开。如果开发一个网络服务端,你的程序很有可能不在Windows里运行,而 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 12:22:34.0,共阅读3056次,回复0次 |
|
|
 |
白乔原创:艺术编程之C++篇[2]
|
|
| |
| 1 编写美的代码——代码的艺术性
1.1 何为“代码的艺术性”?
何为“代码的艺术性”?大凡提及“艺术性”的,总离不开“享受”。代码的艺术性也是这样,当你编程的时候,或者回首看自己的代码的时候,或者你的代码落在某个得意洋洋的程序员手中的时候,你,或者得意洋洋的他,突然感觉读其中那么一段代码完全是一种享受,那么,你的代码就具有了“艺术性”。
“艺术性”不是说来就来的,艺术需要“与生俱来的修养”。对于代码来说,这些修养则主要体现在你的编程风格。
1.2 编程风格
1.2.1 使用注释(comment)
“如果你的程序不值得注释,那么它也很可能也不值得运行”。确实是这样,不要让自己象那些古板的程序员一样,洋洋洒洒几页代码,却从来不写一句注释。
C语言的注释符为“/*…*/”。C++语言中,程序块的注释常采用“/*…*/”,行注释一般采用“//…”。以下是注释通常适用的场合:
版本、版权声明;说明代码的来源、目的与内容。以下的代码Windows程序员一直都在用,它摘自于windows.h头文件:
/*
Copyright (c) 1985-1997, Microsoft Corporation
Module Name:
windows.h
Abstract:
Master include file for Windows applicati ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 11:50:42.0,共阅读2894次,回复0次 |
|
|
 |
Windows程式设计(文字输出函式)
|
|
| |
| Windows程式设计(文字输出函式)TextOut (hdc, xStart, yStart, pString, iCount) ;
参数xStart和yStart是逻辑座标上字串的起始点。通常,这是Windows开始绘制的第一个字母的左上角。TextOut需要指向字串的指标和字串的长度,这个函式不能识别以NULL终止的字串。
TextOut函式的xStart和yStart参数的含义可由SetTextAlign函式改变。TA_LEFT、TA_RIGHT和TA_CENTER旗标影响使用xStart在水平方向上定位字串的方式。预设值是TA_LEFT。如果在SetTextAlign函式中指定了TA_RIGHT,则後面的TextOut呼叫会将字串的最後一个字元定位於xStart,如果指定了TA_CENTER,则字串的中心位於xStart。
类似地,TA_TOP、TA_BOTTOM和TA_BASELINE旗标影响字串的垂直位置。TA_TOP是预设值, 它意味著字串的字母顶端位於yStart,使用TA_BOTTOM意味著字串位於yStart之上。可以使用TA_BASELINE定位字串,使基准线位於yStart。基准线是如小写字母p、q、y等字母下部的线。
如果您使用TA_UPDATECP旗标呼叫SetTextAlign,Windows就会忽略TextO ...
|
|
| 作者:不祥 jerry张贴于2004-04-07 21:39:47.0,共阅读3094次,回复0次 |
|
|