博文

软件界面设计规则(2007-04-15 15:15:00)

摘要:优秀界面设计规则清单:   软件的安装很容易,步骤最少; 软件的安装不要求系统重新启动; 在使用软件前,用户不需要阅读自述文件和帮助文档; 用户生成的数据默认存储在“我的文档”中; 对于用户能够看见的文件,软件没有使用意义很模糊的名称; 软件没有在program files文件夹之外创建文件夹; 软件没有向硬盘的根目录写入文件; 软件没有在“开始”菜单上包括其“帮助”、“自述文件”和“卸载”等项目; 如果没有用户的允许,那么软件不会在Windows桌面上安装图标; 如果软件在启动时运行,那么它在加载时不会显示屏幕和对话框; 软件不任务栏通知区用于状态,启动软件或实用工具或询问属性,而是只使用通知区域来警告用户有一个重要的改变; 软件应该适当地应用用户在“控制面板”的“显示”程序中指定的颜色选项; 可以通过键盘使用软件; 如果用户改变增大了默认字体的大小,那么软件也可以正常的工作; 软件适当的支持标准键盘的快捷方式; 软件的卸载过程不会留下除用户创建的文件之外的其他的文件或注册表项目; 软件没有在用户界面上的文本中使用专门的术语,而是只有在用户清楚地了解特定的工业或技术术语时才使用它们; 当用户更改显示分辨率或使用多个显示器配置时,软件可以适当地进行调整;   一般情况下各种色彩给人的感觉是: 红色:代表热情、活泼、热闹、温暖、幸福、吉祥 橙色:代表光明、华丽、兴奋、甜蜜、快乐 黄色:代表明朗、愉快、高贵、希望 绿色:代表鲜明、平静、和平、柔和、安逸、青春 蓝色:代表深远、永恒、沉静、理智、诚实、寒冷 紫色:代表优雅、高贵、魅力、自傲 白色:代表纯洁、纯真、朴素、神圣、明快 灰色:代表忧郁、消极、谦虚、平凡、沉默、中庸、寂寞 黑色:代表崇高、坚实、严肃、刚健、粗莽......

阅读全文(2832) | 评论:0

Visual C++ MFC 中常用宏的含义(二)(2007-04-14 19:33:00)

摘要:文/cqfz   END_CATCH

  END_CATCH

  说明:

  标识最后的CATCH或AND_CATCH块的末尾。

  END_MESSAGE_MAP

  END_MESSAGE_MAP

  说明:

  使用END_MESSAGE_MAP宏结束用户的消息映射定义

  IMPLEMENT_DYNAMIC

  IMPLEMENT_DYNAMIC(class_name,base_class_name)

  说明:

  通过运行时在串行结构中为动态CObject派生类访问类名和位置来产生必要的C++代码。在.CPP文件中使用IMPLEMENT_DYNAMIC宏,接着一次链接结果对象代码

  IMPLEMENT_DYNCREATE

  IMPLEMENT_DYNCREATE(class_name,base_class_name)

  说明:

  通过DECLARE_DYNCREATE宏来使用IMPLEMENT_DYNCREATE宏,以允许CObject派生类对象在运行时自动建立。主机使用此功能自动建立对象,例如,但它在串行化过程中从磁盘读去一个对象时,他在类工具里加入IMPLEMENT_DYNCREATE宏。若用户使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏,那么接着使用RUNTIME_CLASS宏和CObject::IsKindOf成员函数以在运行时确定对象类。若declare_dyncreate包含在定义中,那么IMPLEMENT_DYNCREATE必须包含在类工具中。

  IMPLEMENT_SERIAL

  IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)

  说明:

  通过运行时在串行结构中动态CObject派生类访问类名和位置来建立必要的C++代码。在.CPP文件中使用IMPLEMENT_SERIAL宏,然后一次链接结果对象代码。

阅读全文(2409) | 评论:0

Visual C++ MFC 中常用宏的含义(一)(2007-04-14 19:33:00)

摘要:文/cqfz   AND_CATCHAND_CATCH

  AND_CATCH(exception_class,exception _object_point_name)

  说明:

  定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。AND_CATCH可标记CATCH或AND_CATCH块的末尾。

  注释:

  AND_CATCH块被定义成为一个C++作用域(由花括号来描述)。若用户在此 作用域定义变量,那么记住他们只在此作用域中可以访问。他也用于exception_object_pointer_name变量。

  ASSERT

  ASSERT(booleanExpression)

  说明:

  计算变量的值。如果结构的值为0,那么此宏便打印一个诊断消息并且成讯运行失败。如果条件为非0,那么什么也不做。 诊断消息的形式为: assertion failed in file in line 其中name是元文件名,num是源文件中运行失败的中断号。 在Release版中,ASSERT不计算表达式的值也就不中断程序。如果必须计算此表达式的值且不管环境如何那么用VERIFY代替ASSERT。

  注释:

  ASSERT只能在Debug版中用

  ASSERT_VAILD

  ASSERT_VAILD(pObject)

  说明:

  用于检测关于对象的内部状态的有效性。ASSERT_VALID调用此对象的AssertValid成员函数(把它们作为自己的变量来传递)。在Release版中ASSERT_VALID什么也不做。在DEBUG版中,他检查指针,以不同于NULL的方式进行检查,并调用对象自己的AssertValid成员函数。如果这些检测中有任何一个失败的话,那么他会以与ASS......

阅读全文(2232) | 评论:0

软件调试的十大重要基本准则(2007-04-14 19:31:00)

摘要:本文是在David J. Agans所著Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems的基础之上写的。在书中,David罗列了他从实际经验中总结出来的9条debug原则。我希望大家都能读一下这本书。该书篇幅短、且通俗易懂,还穿插了一些有趣的故事。不过,还是有些开发人员不愿意花时间去看这样一本薄薄的书,所以我想对这本书的内容做一个总结还是有意义的。 我增加了第十条准则——debug数据。十个基本准则包括: 1、debug数据(Debug the data)——检查数据是否是你所期望的 2、了解系统(Understand the system) 3、制造失败(Make it fail)——重复制造问题 4、不要想、而要看(Quit thinking and look)——不要急匆匆地下结论 5、分而治之(Divide and conquer)——缩小除虫范围。 6、一次只改一个地方(Change just one thing at a time) 7、坚持做复查(Keep an audit) 8、先找明显的bug(Check the obvious first) 9、询问其他人(Ask someone else)——询问朋友或同事,因为阐明一个问题有助于你理清头绪,并集中精力找到问题所在。 10、  如果你不解决问题,问题将依然存在(If you didn't fix it then it's not fixed)——Bug不会自己消失,需要你来解决。 更多内容,请见http://www.gipsysoft.com/articles/debug-rules/......

阅读全文(2392) | 评论:0

如何配置global.asax(转)(2007-04-14 19:02:00)

摘要:主要定义应用初始化、结束,会话开始、结束,请求开始、结束等事件发生时,应用要做的事情。   <script language="VB" runat="server"> Sub Application_Start(Sender As Object, E As EventArgs) End Sub   Sub Application_End(Sender As Object, E As EventArgs) End Sub   Sub Session_Start(Sender As Object, E As EventArgs) End Sub   Sub Session_End(Sender As Object, E As EventArgs) End Sub   Sub Application_BeginRequest(Sender As Object, E As EventArgs) End Sub   Sub Application_EndRequest(Sender As Object, E As EventArgs) End Sub  </script> 主程序 创建一个应用程序我们可以先在web服务器上创建一个虚拟目录或者在发布目录下创建一个新的目录。装过Windows 2000 Advance Server的读者会知道,安装完成后,会有一个c:/inetpub/wwwroot的目录,你可以通过IIS管理工具来创建一个新的目录或者虚拟目录。一个应用程序可能含有大量的.aspx文件、.ascx文件、由其他工具产生的assembly集合以及页面中用到的各种资源文件(声音、图片、动画等等),这里就不再一一介绍了。          下面我们就创建一个简单的aspx页面来说明一个Application的应用,它只含有一个.aspx文件,在用户浏览时显示“hello world”,可谓最简单的web应用了。   <!-- 文件名:application/FormAppHellp.aspx --> <%@Page Langu......

阅读全文(4189) | 评论:1

如何编写global.asax(转)(2007-04-14 19:01:00)

摘要:为了编写用户界面的应用程序,开发者可以把应用程序标准的逻辑和时间处理的代码加到Web Application 里面。这些代码不产生用户界面,也不想英单个得页面的请求。事实上,这些代码处理更高水平的事件,如Application_Start, Application_End, Session_Start, Session_End,等等。开发者通过放在web应用程序根目录下面的Global.asax来响应这些事件。               Asp.net通过一个动态的.NET FrameWork 类自动解析和编译这个文件,这个类就是HttpApplication基类,在第一时间里面,在这个文件里面的应用程序的资源将会被响应。               首先,在包含有请求的应用程序名字空间中被访问之前,Global.asax将被解析和编译成.NET Framework的一个类。这个文件本身有拒绝被访问的配置。               下面我们来看看这个文件里面的具体内容,首先我们声明这个文件的使用语言、运行环境:               <script language=”VB” runat=server>        ‘相关方法        </script>   然后我们就可以定义各种方法了,               Sub Application_Start() ......

阅读全文(3698) | 评论:0

ASP.NET配置详解(转)(2007-04-14 18:59:00)

摘要:ASP.NET提供了一个丰富而可行的配置系统,以帮助管理人员轻松快速的建立自己的WEB应用环境。ASP.NET提供的是一个层次配置架构,可以帮助WEB应用、站点、机器分别配置自己的扩展配置数据。ASP.NET的配置系统具有以下优点: ●              ASP.NET允许配置内容可以和静态内容、动态页面和商业对象放置在同一应用的目录结构下。当管理人员需要安装新的ASP.NET应用时,只需要将应用目录拷贝到新的机器上即可。 ●              ASP.NET的配置内容以纯文本方式保存,可以以任意标准的文本编辑器、XML解析器和脚本语言解释、修改配置内容。 ●              ASP.NET 提供了扩展配置内容的架构,以支持第三方开发者配置自己的内容。 ASP.NET配置文件的更修被系统自动监控,无须管理人员手工干预 配置文件的规则 ASP.NET的配置文件是基于XML格式的纯文本文件,存在于应用的各个目录下,统一命名为“config.web”。它决定了所在目录及其子目录的配置信息,并且子目录下的配置信息覆盖其父目录的配置。 WINNT\Microsoft.NET\Framework\版本号\下的config.web为整个机器的根配置文件,它定义了整个环境下的缺省配置。 缺省情况下,浏览器是不能够直接访问目录下的config.web文件。 在运行状态下,ASP.NET会根据远程URL请求,把访问路径下的各个config.web配置文件叠加,产生一个唯一的配置集合。举例来说,一个对URL: http://localhost\webapp\owndir\ test.aspx的访问,ASP.NET会根据以下顺序来决定最终的配置情况:        1..\Microsoft.NET\F......

阅读全文(4785) | 评论:1

七条对于中国大学软件专业同学一些建议(转)(2007-04-14 18:50:00)

摘要: 七条对于中国大学软件专业同学一些建议 鬼才写于2006-7-8 12:25:00 Seven Suggestions to Computer Science Students

1,不要玩游戏,至少不要玩网络游戏
我认识计算机专业比较好的大学朋友中没有一个玩网络游戏的.

2,不要用分数衡量自己专业能力。
自己一定要多去写程序,多去看代码肯定是对的。对于软件专业同学千万不要认为一分纸上试题可以代表尼专业的能力。最初学习程序语言都是坚持每天写50-100行以上代码,这样才能快速熟悉语法和程序入门基础。

3,培养学习的能力。
老师带领下学会一个东西很容易,尝试之前自己去学习,然后再去学,这样可以学习可以发现自己什么地方学习能力不足。学习的能力是一种大学最需要培养的专业能力的核心,如果你即时一个专业或者程序语言学习再好,但是却不能自我学习的能力,势必会被日益发展的技术所淘汰的。

4,培养团队意识
不要吝啬自己的代码,多去主动分享,好的代码都是改出来的。如果可以在大学中建立或者加入一个团队一起学习,将可以获得意外的收获。

5,把自己放到软件行业去衡量,而不是自己的学校。
不要在同学之间互相竞争,你需要对比的是所有从事软件行业的专业人员,因为软件专业是没有年龄的。

6,不要忽视基础。
基础像地基,如果没有基础房屋到后面就很难扩展了。基础和武侠小说中的内功是一样的,没有内功的招式是没有用的。

7, 不要被外界环境干扰。
自我控制对于今天在中国大学一起学习的同学是非常重要的,大多数同龄的学生最初进入大学都是非常好学的,但是不少人由于外界环境诱惑而失去自我的目标。......

阅读全文(2149) | 评论:0

堆栈溢出原理(2007-04-14 18:48:00)

摘要:堆栈 堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先处(LIFO)队列. 堆栈中定义了一些操作.  两个最重要的是PUSH和POP。 PUSH操作在堆栈的顶部加入一 个元素。POP操作相反, 在堆栈顶部移去一个元素, 并将堆栈的大小减一。
为什么使用堆栈?
现代计算机被设计成能够理解人们头脑中的高级语言。 在使用高级语言构造程序时 最重要的技术是过程(procedure)和函数(function)。 从这一点来看, 一个过程调用可 以象跳转(jump)命令那样改变程序的控制流程, 但是与跳转不同的是, 当工作完成时, 函数把控制权返回给调用之后的语句或指令。 这种高级抽象实现起来要靠堆栈的帮助。 堆栈也用于给函数中使用的局部变量动态分配空间, 同样给函数传递参数和函数返 回值也要用到堆栈。
堆栈区域
堆栈是一块保存数据的连续内存。 一个名为堆栈指针(SP)的寄存器指向堆栈的顶部。 堆栈的底部在一个固定的地址。 堆栈的大小在运行时由内核动态地调整。 CPU实现指令 PUSH和POP, 向堆栈中添加元素和从中移去元素。 堆栈由逻辑堆栈帧组成。 当调用函数时逻辑堆栈帧被压入栈中, 当函数返回时逻辑 堆栈帧被从栈中弹出。 堆栈帧包括函数的参数, 函数地局部变量, 以及恢复前一个堆栈 帧所需要的数据, 其中包括在函数调用时指令指针(IP)的值。 堆栈既可以向下增长(向内存低地址)也可以向上增长, 这依赖于具体的实现。 在我 们的例子中, 堆栈是向下增长的。 这是很多计算机的实现方式, 包括Intel, Motorola, SPARC和MIPS处理器。 堆栈指针(SP)也是依赖于具体实现的。 它可以指向堆栈的最后地址, 或者指向堆栈之后的下一个空闲可用地址。 在我们的讨论当中, SP指向堆栈的最后地址。 除了堆栈指针(SP指向堆栈顶部的的低地址)之外, 为了使用方便还有指向帧内固定 地址的指针叫做帧指针(FP)。 有些文章把它叫做局部基指针(LB-local base pointer)。 从理论上来说, 局部变量可以用SP加偏移量来引用。 然而, 当有字被压栈和出栈后, 这 些偏移量就变了。 尽管在某些情况下编译器能够跟......

阅读全文(3689) | 评论:0

献给迷茫中的初学者 — 如何去学习编程(转)(2007-04-14 18:42:00)

摘要: 献给迷茫中的初学者 — 如何去学习编程 鬼才写于2006-7-8 12:18:00 最近看到很多朋友问到如何学习编程这个问题,我想这个问题应该是所有初学者都非常关注的问题了,在论坛上回答了很多也讲了很多,但是总是无法让所有朋友得到一个解答,所以我想写一下自己的经验,希望对大家有所帮助,不过在此先声明,我并非什么高手,我也只是刚刚入门而已,也只是希望通过写一点个人的体会帮助一些和我遇到相同问题的朋友,高手就免看了,以免班门弄斧。

在学习程序之前,我想大家首先应该对程序员这个行业熟悉一下,更加要对编程的语言以及所涉及到的工具有所了解。因为如何了解这些是很难去给自己一个明确的目标的。所以首先我想在这里先为大家介绍一下这个行业以及一些相关的内容。

程序员,相信在很多人眼中是一个非常神秘,非常特别又或者说非常有趣的职业。因为在这个行业里面实在出现了太多的英雄,每一个英雄的事迹都足以让我们热血沸腾。但是,又有谁知道在这些英雄的背后,藏着多少辛酸,藏着多少的努力。程序员这个行业并非如大家所想象的那样美好。程序员是一个没有白天黑夜概念的行业,程序员是一个让人筋疲力尽的行业。你们看到的是一些英雄的光辉历史,但是却忽略了大多数程序员的艰辛。所以在这里我奉劝各位,如果你是为了这个行业充满传奇色彩而想加入,如果你是为了这个行业薪水高而想加入,那么请你现在退出吧,因为它不适合你。这个行业需要的是拥有努力、认真、坚持等品质的人。

讲到如何学习编程,那么必不可少的就要讲到编程语言了,相信大家都知道编程语言有很多种,包括C、C++、BASIC、PASIC、ASP、PHP等等,当中还分为很多不同的领域,所以在学习编程之前一定要为自己定下一个目标,一个自己即将要进入的领域。有些人想进行底层开发,有些人想做网站开发,有些人想做商业软件开发等等,由于计算机的普及,软件行业所涉及的领域也就越来越多,一个人是不可能涉及所有的领域的,所以必须在学习之前给自己一个定位,这个是很重要的,如果没有这个定位的话在未来学习编程的日子里将会很迷茫。

目标的定位当然不能少了工具的因素,因为不同的领域使用的开发工具也不同,在这里想重新再次郑重的向所有朋友声明一次,不要把开发工具和开发语言混为一谈,语言是编程的基础,而......

阅读全文(2279) | 评论:1