摘要:VC++实现绘图操作,说白了也就是对API熟练操作了,下面介绍几种绘图1. 绘制线条具体实现代码如下:// 鼠标左键按下时的处理函数void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 originP=point; CEditView::OnLButtonDown(nFlags, point);}// 鼠标左键弹起时的处理函数,Point为弹起时鼠标的点坐标void CDrawView::OnLButtonUp(UINT nFlags, CPoint po... 阅读全文
posted @ 2014-01-06 12:44 Learning hard 阅读 (1750) 评论 (0) 编辑
摘要:一、引言在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多。然而容器又可以序列式容器和关联式容器两类,C++语言本身提供了一个序列式容器数组,另外STL又提供vector,list,deque等序列式容器,本专题将详细介绍下vector容器。二、vector详解2.1 vector容器介绍vector容器的数据结构为单端数组,其操作方式与数组的操作非常相似,唯一不同的是——数组是静态空间,一旦配置了数组大小就不能改变,而vector是动态空间,随着元素的插入,vector类内部机制会自行 阅读全文
posted @ 2014-01-04 11:42 Learning hard 阅读 (1762) 评论 (0) 编辑
摘要:一、引言上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序。MFC(Microsoft Foundation Class, 微软基础类库)是微软为了简化程序员的开发工作而将Windows API 封装到C++类中,利用这些类,程序员可以有效地完成Windows平台下应用程序的开发。本专题将详细剖析它。二、利用向导创建一个MFC程序用于帮助有效地开发Windows应用程序的类库除了MFC外,还有其他开源类库提供,比如说QT,只是QT不是微软开发的罢了,为了更好地剖析MFC,下面让我们用Visual Studio中的M 阅读全文
posted @ 2014-01-03 18:52 Learning hard 阅读 (6051) 评论 (10) 编辑
摘要:一、引言要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序就可以了,微软帮我们做了非常好的封装,以至于对于很多.NET开发人员至今也不清楚Windows 平台下程序运行的内部机制,所以本专题将深入剖析下Windows 程序的内部运行机制。二、Windows平台下几个基础概念有朋友会问,理解了程序运行的内部机制有什么用,因为在我们实际开发中用得微软提供的模板来进行编程?对于这个疑问,我的回答是——理解了Windows平台下程序的运行内部机制可以使我们更有自信 阅读全文
posted @ 2013-12-30 17:16 Learning hard 阅读 (4027) 评论 (5) 编辑
摘要:一、引言最近这段时间一直都在自学C++,所以这里总结下自己这段时间的学习过程,通过这种方式来巩固自己学到的内容和以备后面复习所用,另外,希望这系列文章可以帮助到其他自学C++的朋友们。由于本人之前主要研究C#语言,在自学C++的过程中,经常会把C++中内容与C#中内容进行对比来理解,所以这系列文章的内容也会与C#进行比较,从而来说明语言都是想通的,只要你掌握好一门语言,学习其他语言都可以举一反三。二、STL是什么STL全称为Standard Template Library,即标准模板库,该库提供一些常用的容器对象和一些通用的算法等,大家可以理解STL就是一个库,该库帮我们封装了很多容器类和通 阅读全文
posted @ 2013-12-26 15:45 Learning hard 阅读 (3180) 评论 (9) 编辑
摘要:一、引言提到模板,大家肯定不免想到生活中的“简历模板”、“论文模板”、“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下载下来的简历模板的格式都是相同的,然而我们下载下来简历模板之后我们可以根据自己的情况填充不同的内容要完成属于自己的简历。在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义。二、模板方法模式详细介绍2.1 模板方法模式的定义模板方法模式——在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载 阅读全文
posted @ 2013-10-28 23:08 Learning hard 阅读 (12283) 评论 (3) 编辑
摘要:一、引言在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象,然后客户端只需要访问代理对象,由代理对象去帮我们去请求目标对象并返回结果给客户端,这样的一个解决思路就是今天要介绍的代理模式。二、代理模式的详细介绍代理模式按照使用目的可以分为以下几种:远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是本电脑中,也可以在另一台电脑中。最典型的例子就是——客户端调用Web服务或WCF服务。虚拟(V 阅读全文
posted @ 2013-10-27 14:55 Learning hard 阅读 (19790) 评论 (8) 编辑
摘要:一、引言在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的。二、享元模式的详细介绍在前面说了,享元模式可以解决上面的问题了,在介绍享元模式之前,让我们先要分析下如果去解决上面那个问题,上面的问题就是重复创建了同一个对象,如果让我们去解决这个问题肯定会这样想:“既然都是同一个对象,能不能只创建一个对象,然后下次需要创建这个对象的时候,让它直接用已经创建好了的对象就好了”,也就是说 阅读全文
posted @ 2013-10-26 23:37 Learning hard 阅读 (11198) 评论 (11) 编辑
摘要:一、引言在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ”门面“模式。下面就具体介绍下外观模式。二、外观模式的详细介绍2.1 定义外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。2.2 外观模式实现介绍了外观模式的定义之后,让我们具体看 阅读全文
posted @ 2013-10-22 17:38 Learning hard 阅读 (10584) 评论 (2) 编辑
摘要:一、引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象在功能上区别,导致在操作过程中必须区分简单对象和复合对象,这样就会导致客户调用带来不必要的麻烦,然而作为客户,它们希望能够始终一致地对待简单对象和复合对象。然而组合模式就是解决这样的问题。下面让我们看看组合模式是怎样解决这个问题的。二、组合模式的详细介绍2.1 组合模式的定义组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。下 阅读全文
posted @ 2013-10-21 15:51 Learning hard 阅读 (13203) 评论 (5) 编辑
摘要:一、引言在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类)、AccessoriesPhone(挂件手机类)等,这样就会导致 ”子类爆炸“问题,为了解决这个问题,我们可以使用装饰者模式来动态地给一个对象添加额外的职责。下面让我们看看装饰者模式。二、装饰者模式的详细介绍2.1 定义装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。2.2 装饰者模式实现这里以手机和手机配件的例子来演示装饰者模式的实现,具体代码 阅读全文
posted @ 2013-10-18 11:33 Learning hard 阅读 (22109) 评论 (16) 编辑
摘要:一、引言这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下:这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推移,用户需要改变遥控器的功能,如:用户可能后面需要对遥控器添加返回上一个台等功能时,此时上面的设计就需要修改抽象类RemoteControl的提供的接口了,此时可能只需要向抽象类中添加一个方法就可以解决了,但是这样带 阅读全文
posted @ 2013-10-17 12:33 Learning hard 阅读 (15758) 评论 (14) 编辑
摘要:前言在这一年多的时间里,经常逛国内的一些技术社区和论坛,其中发现一个问题——现在很多朋友,大部分是学生和刚毕业参加工作的朋友,或工作1-2年的朋友都比较迷茫,不知道自己想要什么,想下决心努力学习但是又缺乏耐力坚持不了,所以经常会觉得非常迷茫。所以我决定写这篇文章来分享下本人成为微软最有价值专家(MVP)的一个经历,希望可以让处于迷茫的朋友有所感悟,并付诸行动地去寻找自己的目标并实现它。问题剖析对于坚持不了这个问题,主要原因还是缺乏明确的目标或者说定的目标太大太泛,因为有些朋友所定的目标都很大,例如:“我想成为技术大牛”,或“我想做架构师”、“我想获得赚月薪2万以上的工作”等这样的大而泛的目标, 阅读全文
posted @ 2013-10-13 21:45 Learning hard 阅读 (10470) 评论 (77) 编辑
摘要:一、引言在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。那么如果将“将现存的对象”在新的环境中进行调用呢?解决这个问题的办法就是我们本文要介绍的适配器模式——使得新环境中不需要去重复实现已经存在了的实现而很好地把现有对象(指原来环境中的现有对象)加入到新环境来使用。二、适配器模式的详细介绍2.1 定义下面让我们看看适配器的定义,适配器模式——把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。适配器模式有类的适配器模式和对象的适配器模式两种形式,下 阅读全文
posted @ 2013-10-13 10:24 Learning hard 阅读 (22877) 评论 (6) 编辑
摘要:一、引言在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配了多个一样的类实例对象,然后如果采用工厂模式来创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适,然而原型模式可以很好地解决这个问题,因为每个类实例都是相同的,当我们需要多个相同的类实例时,没必要每次都使用new运算符去创建相同的类实例对象,此时我们一般思路就是想——只创建一个类实例对象,如果后面需要更多 阅读全文
posted @ 2013-09-21 14:06 Learning hard 阅读 (19755) 评论 (17) 编辑
摘要:一、引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死... 阅读全文
posted @ 2013-09-17 17:14 Learning hard 阅读 (31332) 评论 (18) 编辑
摘要:一、引言在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是本专题所要介绍的内容。二、抽象工厂详细介绍这里首先以一个生活中抽象工厂的例子来实现一个抽象工厂,然后再给出抽象工厂的定义和UML图来帮助大家更好地掌 阅读全文
posted @ 2013-09-16 14:22 Learning hard 阅读 (41711) 评论 (35) 编辑
摘要:一、引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的。二、工厂方法模式的实现 工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。下面看下工厂模式的具体实现代码(这里还是.. 阅读全文
posted @ 2013-09-09 19:51 Learning hard 阅读 (48262) 评论 (22) 编辑
摘要:一、引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式。二、简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生... 阅读全文
posted @ 2013-09-05 17:56 Learning hard 阅读 (57532) 评论 (22) 编辑
摘要:今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常。于是开始“摆渡”,并寻找到了解决办法:赋予 NETWORK SERVICE 帐户以写权限。以下为晚上寻找到的资料:在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三种原因:1. 相应的帐户没有写权限。解决方法:赋予 NETWORK SERVICE 帐户以写权限。2. 指定的物理路径不存在。解决方法:在调用 Save 方 阅读全文
posted @ 2013-08-13 15:57 Learning hard 阅读 (549) 评论 (0) 编辑
摘要:一、引言今天在论坛中看到一位朋友提出这样的一个问题,问题大致(问题的链接为:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4633-a434-fc4d09f4d23d)是这样的: static void Main(string[] args) { object m1 =1 ; object m2 = 1; Console.WriteLine(m1==m2); Console.WriteLine(m1.Equals(m2... 阅读全文
posted @ 2013-08-12 19:43 Learning hard 阅读 (6451) 评论 (22) 编辑
摘要:一、问题描述今天在MSDN论坛中看到这样的一个问题,觉得非常锻炼思维能力,所以这里记录下来作为备份,题目的要求是这样的:假设有一组字符串数组{"0","0","1","2","3",“0”,"4","0","0"},如何查找使0等于离它最近的且不为0的元素,如果离它最近的不为0的元素有两个,则等于上一个元素,即想得到重新赋值后这样的数组{"1","1","1","2& 阅读全文
posted @ 2013-08-06 17:38 Learning hard 阅读 (1274) 评论 (1) 编辑
摘要:一、引言在ASp.NET网页的默认模型中,用户通过单击按钮或其他操作的方式来提交页面,此时客户端将当前页面表单中的所有数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器将重新实例化一个当前页面类的实例来响应这个请求,然后将整个页面的内容重新发送到客户端。这种处理方式对运行结果没什么影响,但页回发会导致处理开销,从而降低性能,且会让用户不得不等待处理并重新创建页,有时候,我们仅仅只需要传递部分数据而不需要提交整个表单,这种默认的处理方式(指的是提交整个表单进行回发方式)显得有点小题大做了,解决办法主要有三种: 纯 JS实现、 Ajax技术和回调技术,在这里仅仅介绍下Asp.net回调技术的 阅读全文
posted @ 2013-08-05 17:04 Learning hard 阅读 (2766) 评论 (5) 编辑
摘要:问题描述9个点画10条直线,要求每条直线上至少3个点,相信这道理题目很多朋友在面试的时候都遇到过的(同时自己在面试的时候也遇到过),所以这里记录下来以备复习。解决方法1: 阅读全文
posted @ 2013-07-23 18:12 Learning hard 阅读 (3068) 评论 (5) 编辑
摘要:一、引言最近在设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考。首先我介绍的是设计模式中比较简单的一个模式... 阅读全文
posted @ 2013-07-12 00:47 Learning hard 阅读 (99258) 评论 (70) 编辑
摘要:一、引言之前一直都是写一些C#基础知识的内容的,然而有些初学者可能看完了这些基础知识之后,会有这样一个疑惑的——我了解了这些基础知识之后,我想做一些工具怎么还是不会做的呢?那些基础知识到底有什么用的了?然而我刚开始写这个系列的初衷主要是我想系统地去研究下C#各个阶段的特性的,及时有些特性我知道它是怎么用的,但是每次遇到问题的时候确实百度可以可以解决很多问题,但是自己总是觉得有点“虚”,然而通过写完这个系列之后,我很多知识点都可以串起来了,可以做到一个举一反三的一个效果的,当我遇到实际问题的也不可能完全自己写出来,同样也会百度找解决方案,但是此时我却没有 “虚”的感觉,因为我知道这个东西,并且我 阅读全文
posted @ 2013-07-01 11:03 Learning hard 阅读 (10132) 评论 (19) 编辑
摘要:一、引言最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如:http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9, 所以这里就记录下来,希望给遇到同样问题的朋友有所参考的,同时也是对自己的一个积累。在介绍具体实现代码之前,我们必须明确解决这个问题的思路是什么的?下面只要分享我的一个思考的这个问题的方式:当我们点击一个exe文件时,此时该exe程序将会运行,我们可以看到该程序的界面,对于计算机而言,就是会在系统上开启一个该程序的进行,这个我们可以通过任务管理器来查看的(当我们 阅读全文
posted @ 2013-06-30 00:40 Learning hard 阅读 (14511) 评论 (36) 编辑
摘要:一、引言 在C#中,静态和非静态的特征对于我们来说是再熟悉不过了,但是很少看到有一篇文章去好好地总结静态和非静态它们之间的不同,为了帮助大家更好地去理解静态和非静态特征, 所以将在这篇文章中帮大家全面总结下它们之间的不同,包括静态类,静态成员和静态构造函数。希望在大家巩固基础的时候可以拿出来好好复习下的。下面废话不多了,直接进入我们今天的主题。二、为什么需要静态特征 在自定义类或看.NET Framework类库中都可以发现,类中大部分都是具体实例特征(也就是没有static标识的),同时我们也能看到一些具有静态特征的类或成员,例如我们经常使用的Console类以及WriteLine方法就.. 阅读全文
posted @ 2013-06-16 00:55 Learning hard 阅读 (3662) 评论 (5) 编辑
摘要:一、引言 对于一些初学者(包括工作几年的人在内)来说,有时候对于方法之间的参数传递的问题感觉比较困惑的,因为之前在面试的过程也经常遇到参数传递的基础面试题,这样的面试题主要考察的开发人员基础是否扎实,对于C#中值类型和引用类型有没有深入的一个理解——这个说的理解并不是简单的对它们简单一个定义描述,而在于它们在内存中分布。所以本文章将带领大家深入剖析下C#中参数传递的问题,并分享我自己的一个理解,只有你深入理解了才能在不运行程序的情况就可以分析出参数传递的结果的。二、按值传递对于C#中的参数传递,根据参数的类型可以分为四类:值类型参数的按值传递引用类型参数的按值传递值类型参数的按引用传递引用类. 阅读全文
posted @ 2013-06-11 23:44 Learning hard 阅读 (7385) 评论 (21) 编辑
摘要:本专题概要一、引言二、实现思路三、实现效果四、小结一、引言因为最近在MSDN中的论坛和CSDN论坛都看到有些朋友问到如何用C#实现一个像Windows自带的图片查看器的功能等类似的问题(当然还有如何如何旋转图片的,如何通过按钮来变换图片的功能等),所以为了帮助大家更好地解决类似的这样的问题,所以这篇文章将简单介绍下如何使用C#来实现一个图片查看器的功能的,该工具保存的功能有:可以通过“上一张” “下一张”这样的按钮来轮换浏览图片实现对图片的旋转实现对旋转后图片的保存功能。本程序不仅提供旋转90/180/270这样的实现,同时提供一个方法来完成旋转任意角度的实现该程序未实现Windows图片查看 阅读全文
posted @ 2013-06-02 18:13 Learning hard 阅读 (10144) 评论 (7) 编辑
摘要:最近对GDI+这个东西接触的比较多,也做了些简单的实例,比如绘图板,仿QQ截图等. 废话不多说了,我们先来认识一下这个GDI+,看看它到底长什么样. GDI+:Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能;在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用DirectX处理三维(3D)的图形图像,图形图像处理用到的主要命名空间是System . Drawing:提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、.. 阅读全文
posted @ 2013-05-24 00:41 Learning hard 阅读 (6880) 评论 (5) 编辑
摘要:引言有一个通讯录系统, 同时部署在几台服务器上, 但是主页上有个通讯录的链接, 链接到这个系统. 问题是, 有时候链接指向的服务器出故障, 于是希望在这个服务器出故障(服务不可用)的情况下, 能指向其他服务器的链接.解决方案一: XMLHTTP方案<script language= "javascript">function getURL(url) { var xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP"); xmlhttp.open("GET", url, false) 阅读全文
posted @ 2013-05-23 13:17 Learning hard 阅读 (372) 评论 (0) 编辑
摘要:因为最近在MSDN论坛和stackflow中看到一些朋友经常问到这个问题,所以写这篇文章来帮助大家遇到相同问题的时候可以很快的得到解决,下面就不啰嗦了,直接看代码如何解决这个问题的。首先,大家应该明确,现在没有可用的API来给我们动态地设置屏幕分辨率,我们要实现这个需求,我们只能在C#程序中调用Win32 API 函数来解决这个问题的,这里用C#代码调用Win32 API 就涉及到一个问题的,即.NET 互操作性的问题,关于这个大家可以参考我的互操作性系列文章。这里我就不过多解释了。我们要解决这个问题,首先大家肯定也会遇到一个经常遇到的问题,即如何获得用户的分辨率,对于这个问题,.NET中提供 阅读全文
posted @ 2013-05-23 01:29 Learning hard 阅读 (4501) 评论 (11) 编辑
摘要:本专题概要:引言同步代码存在的问题传统的异步编程改善程序的响应C# 5.0 提供的async和await使异步编程更简单async和await关键字剖析小结一、引言在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加——就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的。二、同步代码存在的问题对于同步的代码,大家肯定都不陌生,因为我们平常写的代码大部分都是同步的,然而同步代码却存在一 阅读全文
posted @ 2013-05-15 16:04 Learning hard 阅读 (32074) 评论 (101) 编辑
摘要:本专题概要引言什么是TAP——基于任务的异步模式介绍如何使用TAP——使用基于任务的异步模式来异步编程TAP与APM或EAP可以转换吗?——与其他异步模式的转换小结一、引言 在上两个专题中我为大家介绍.NET 1.0中的APM和.NET 2.0中的EAP,在使用前面两种模式进行异步编程的时候,大家多多少少肯定会感觉到实现起来比较麻烦, 首先我个人觉得,当使用APM的时候,首先我们要先定义用来包装回调方法的委托,这样难免有点繁琐, 然而使用EAP的时候,我们又需要实现Completed事件和Progress事件,上面两种实现方式感觉都有点繁琐,同时微软也意思到了这点,所以在.NET 4.0中提. 阅读全文
posted @ 2013-05-13 13:17 Learning hard 阅读 (5916) 评论 (21) 编辑
摘要:本专题概要:引言你听说过EAP吗?——基于事件异步编程模式介绍深入剖析BackgroundWorker组件类使用BackgroundWorker组件进行异步编程小结一、引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式——APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题——不支持对异步操作的取消和没有提供对进度报告的功能,对于有界面的应用程序来说,进度报告和取消操作的支持也是必不可少的,既然存在这样的问题,微软当然也应该提供给我们解决问题的方案了,所以微软在.NET 2.0的时候就为我们提供了一个新的异步编程模型,也就是我这个专题中介绍的. 阅读全文
posted @ 2013-05-11 01:19 Learning hard 阅读 (8910) 评论 (10) 编辑
摘要:本专题概要:引言你知道APM吗?你想知道如何使用异步编程模型编写代码吗?使用委托也可以实现异步编程,你知道否?小结一、引言 在前面的C#基础知识系列中介绍了从C#1.0——C#4.0中一些主要特性,然而.NET 4.5更新,除了提供了一些新的类和一些新的模板外,对于C#语言也做了一定的更新,最重要的就是.NET 4.5(对应于C#5.0)中提供了async和await两个关键字,这两个关键字是我们实现异步编程更加容易了,其实早在.NET 1.0开始微软就对异步编程做了相应的支持——即异步编程模型(APM), 之后在.NET 2.0中又提出了基于事件的异步编程模型(EAP),.NET 4.0中. 阅读全文
posted @ 2013-05-10 10:52 Learning hard 阅读 (16510) 评论 (27) 编辑
摘要:本专题概要引言实现思路遥控幻灯片程序的实现小结一、引言记得老师讲课的时候,经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课,当时觉得非常有趣,由于这段时间接触了VSTO相关的开发,了解到了Office的相关产品都公开了一些API来让我们对Office产品进行二次开发,这时候我就想,能不能用PowerPoint公开的对象来制作一个遥控幻灯片的程序呢?在本专题就向大家介绍下这个小工具的实现思路和效果。二、实现思路既然要实现的程序是遥控幻灯片,这样我们就需要先获得幻灯片应用程序的,在PowerPoint对象模型中,Microsoft.Office.Interop.PowerPoint.Applica 阅读全文
posted @ 2013-03-19 11:26 Learning hard 阅读 (6341) 评论 (4) 编辑
摘要:一、引言 在我们日常办公中,我们经常可能遇到一些重复性的工作的,比如,我们在写毕业设计的时候,有时候我们写的过程中不注意,当整篇毕业论文写完之后,发现在毕业论文中存在很多空白的段落,这是我们就需要人工重新审阅一遍论文,再手动删除一些空白行,由于毕业论文也不是一篇,有开题报告啊,文献翻译等等,这样就可能需要我们人工都去审阅一篇把一些空白行删除,这样既花时间,我们也看的累。然后还有一个例子就是——我们人事部门的MM们,一到月末的时候就需要给本月的寿星员工发送邮件来通知参加生日会,如果员工信息是在Excel中的话,这时候人事的MM就要手动地从中查找本月寿星的邮箱,然后用Outlook一个一个添加邮. 阅读全文
posted @ 2013-03-18 10:53 Learning hard 阅读 (8811) 评论 (14) 编辑
摘要:本专题概要引言Outlook对象模型自定义Outlook窗体小结一、引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案的,所以本专题中将为大家介绍下Outlook相关的内容。我们从Visual Studio 2010 中Office节点下的模板中我们可以看到,Outlook只有外接程序的模板,并没有提供像Word或Excel这样的文档级的模板,所以VSTO没有为Outlook解决方案创建宿主项和宿主控件(Excel和Word中VSTO都为他们提供了宿主项和宿主控件,因为这些控件是文档级别的。对于宿主控件和宿主项的具体内容可以参考本系列的专题一)。为了能够更好地创建Outlook. 阅读全文
posted @ 2013-03-10 18:43 Learning hard 阅读 (3191) 评论 (1) 编辑