王敬彤's profile敬亭山PhotosBlogListsMore ![]() | Help |
|
June 30 心静自然凉 27-32度,晴转多云。闷的没有一丝风。看着窗外明晃晃的大太阳,想出去走走的念头立马打消了。
听着音乐,突然烦躁起来,觉得有点吵,一个字都思考不下去。关掉,继续手头的报告。
5月8号到现在,快2个月没有出过学校了,没有必要,也没有心情。
“感觉你最近一段时间心情比较浮躁”“好像过一天是一天似的”。听到师兄这样的询问,先是一愣,然后就是沉默,好像被当场揭穿了什么秘密一样。可能是最近压力比较大,有点情绪化,会莫名的悲伤,莫名的烦躁。对学习,对工作,都是很消极的态度。每天都是在混时间,看一些其实并不是很感兴趣的网页,没有效率的学习......好像在坐等开题的那天,坐等放假回家的那天......和身边奋战的姐妹比起来,我是幸运的,但是很堕落。孙博也说我的劲头明显不如刚来时足了,其实我觉得自己一直是这个样子啊,散漫浮躁,是他们错看了。
最近经常会看一下朋友的博客、空间之类的,想起大四的那个夏天,每天充裕的时间不知怎么打发,早上就到长安公园去散步,想象着自己穿着隐形衣,疾步穿行在人群中,思绪如天马行空般肆意的游荡,冷眼看身边的人和事。超喜欢这种感觉。难道现在又转到了网络上,想做网络上的一个隐形魂?呵呵。 人生不能等的三件事(转) 一个行囊,如果已经装的太满了,就会很沉,很重,很累。 一个生命背负太多的行囊,拖着疲惫的身躯走在人生大道上,我们注定要抛弃很多。果断的放弃是面对人生,面对生活的一种清醒的选择,只有学会放弃,生命才会轻装上阵一路高歌;只有学会放弃走出烦恼的困扰,生活才会倍感绚丽富有朝气。 生活中值得我们追求的东西很多,如果一味地纠缠在那些毫无意义结果的东西上,拼命地追求本该放弃的,本该苦苦追求的却毫不足惜的放弃,到头来竹篮打水一场空。如果说执着是一种精神,那么放弃是一种勇气和境界。得不到的或不该得的,就该果断放弃。匆匆的生命,有限的人生,不允许我们四面出击分散自己的时间和精力,在大好的时光中茫茫碌碌终无所成。执迷不悟的固执,是一意孤行的固执。不如正视现实,勇敢地放弃那力不从心却又苦撑硬撑的执着。在清醒地选择之后,明白自己意志的支点,一切都变的单纯而明朗般地宁静了。 扔掉扰心的烦恼,忘记失败的沮丧,封藏痛苦的记忆,坚定地把许多的过去踩在脚下,留在身后。选择了瞬间的清醒,就等于选择了瞬间的成长。及时调整心态坦然面对失去,正确看待失去学会忍受失去,让胸襟更豁达一些,让眼光更长远一些,为了成就一番事业,为了实现自己的人生目标,经常为自己整整枝,排除那些不必要的留念和顾盼,鞭策鞭策自我,以便集中精力于人生的追求。 人生犹如大海,广博深邃而又神秘莫测。我们每个人都像小孩一样在海边跑来跑去寻找着自己美丽的贝壳。有的人,只要是自己喜欢的统统揽在怀里,当他发现无法全部带走时,在取舍之间犹豫不决;有的人,只要找到一个或几个自己喜欢的就心满意足地回去了,今后永远不到海边,因为他已经有了自己的宝贝;有的人,东挑西拣的也没有发现自己最喜欢的美丽贝壳,带着无奈空手而归;有的人,不满足于沙滩上的贝壳,走向大海的深处,不仅拾到了美丽的贝壳,而且还意外的发现了珍珠... 回想过去的人生旅途,每个人无时无刻不在面临选择。上帝是公平的,因为他赐予每个人的机会是均等的,同时上帝赋予每个人以至高无上的权利--选择,选择一个怎样的人生取决于你自己,他不会告诉你该怎样选择,只是善意地提醒你人生会因选择的不同而产生不同的结果。 生命的价值也许就在于他的一次性,你永远没有后悔的机会。所有的快乐和伤痛,所有的微笑和泪水,只代表过去。选择了生,就放弃了死;选择了希望,就放弃了失望;选择了明天,就别在留恋今天! 人生三件不能等的事情 第一:贫穷不能等,因为时间久了,你将习惯贫穷,到时不但无法突破自我,甚至会抹杀了自己的梦想,而庸庸碌碌的过一辈子。 第二:梦想不能等,因为人生的阶段不同,会有不同的历练和想法,试想一个问题,如果你二十岁的梦想60岁才实现,那会是什么样的一个情况??? 第三:家人不能等,或许我们还年轻,未来有很多时间可以让我们摸索、打拼,但是家人呢?他们还有时间等我们成功吗???还有时间等我们挣到钱,让他们过好日子,让他们以我们为荣??? June 28 MFC实现拖放功能(转)1.对象拖放概念 对象拖放是指对某一指定的对象,利用鼠标拖动的方法,在不同应用的窗口之间、同一应用的不同窗口之间或同一应用的同一窗口内进行移动、复制(粘贴)等操作的技术。 对象拖放是在操作系统的帮助下完成的。 要开始一次拖动, 首先需要指定或生成被拖动的对象,然后指定整个拖放操作过程所使用的数据格式,并按指定的数据格式提供数据,最后启动对象拖放操作;当对象在某一窗口内落下时,拖放过程结束,接收拖放对象的窗口按指定的数据格式提取有关数据,并根据提取的数据生成对象。 2.MFC中用于对象拖放的类 MFC(Microsoft Foundation ClassLibrary)为实现对象拖放提供了如下三个类。为便于后边的 讨论我们先来熟悉一下这些类。 2.1.COleDataSource。用于启动一次拖放操作,并向系统提供拖放对象的数据。类中的成员 函数有如下三种: a.设定提供数据的方式和使用的数据格式。提供数据的方式有两种,一种是即时方式, 另一种是延迟方式;即时方式需要在拖动开始之前提供数据;延迟方式不需要立即提供数据,当系 统请求有关数据时,由OnRenderData()等虚函数提供所需的数据。 可以用CacheGlobalData()等函数指定使用即时方式提供数据,也可以用DelayRenderData ()等函数指定使用延时方式提供数据。 b.响应请求,提供数据。应当重载OnRenderFileData()或其他相应的虚函数,以提供有关 数据(后边将详细讨论)。 c.实施拖放操作。调用函数DoDragDrop(),开始实施拖放操作。 2.2.OleDataTarget。用于准备接收拖放对象的目标窗口;一个窗口要想能够接收拖放对象, 必须包含一个COleDataTarget对象,并注册该对象。类中主要成员函数: a.注册。函数Register()注册该对象,以便使窗口能够接收拖放对象。 b.响应拖放过程中的动作(虚成员函数) 当鼠标首次进入窗口时系统将调用 OnDragEnter(),当鼠标移出窗口时系统将调用OnDragLeave(), 当鼠标在窗口内移动, 系统将重复调用调用OnDragOver(),当对象在窗口内落下调用OnDrop()。 2.3.OleDataObject.用于接收拖放对象,类中主要成员函数有两种: a.确定可以使用的数据格式。IsDataAvailable()等函数确定指定数据格式是否可用; b.获取数据。GetData()、GetFileData()等函数用于按指定数据格式获得数据。 3.利用MFC实现对象拖放 要实现一次对象拖放,需要做三方面的工作:对象所在的窗口准备拖放对象并启拖动操作,接受对象的窗口响应有关拖放消息并接受落下的对象,以及拖放完成时的后期处理。以下分别予以 介绍。 3.1. 拖动操作的启动。拖放操作一般是从单击鼠标左键开始。在消息WM_LBUTTONDOWN的响应 函数OnLButtonDown(...)中,首先要判定是否选定了某一对象,如果未选定或选定多个,则不能进 行拖放操作;如果选定了一个对象,则可以进行拖放操作。 要启动一次拖放操作,需要先准备一个COleDataSource对象。注意到类COleClientIten和类 COleServerItem都是从类COleDataSource上派生的,如果选定的是COleClientItem对象或者是 COleServerItem对象,则可以直接使用;否则,需要生成一个COleDataSource对象,值得注意的 是:需要象上文中所说的,应该指定使用的数据格式,并按指定格式提供对象的有关数据。 下面给出准备数据源的例子: class myDataSource: public COleDataSource { public: COLORREF color; CString str; protected: virtual BOOL OnRenderFileData(LPFORMATETC,CFile*); //...... }; BOOL myDataSource::OnRenderFileData(LPFORMATETC lpFormatEtc,CFile* pFile) { if(lpFormatEtc->cfFormat==CF_TEXT) { pFile.Write("Test DragDrop",13); //Magic String pFile.Write(&color,sizeof(COLORREF)); int len= str.GetLength(); pFile.Write(&len,sizeof(int)); pFile.Write(str,len); return TRUE; } COleDataSource::OnRenderFileData(lpFormatEtc,pFile); return FALSE; } 有了以上数据源之后,就可以在消息WM_LBUTTON的响应函数OnLButtonDown()中,按如下方式,指定使用的数据格式: myDataSource* pItemDragDrop=new myDataSource; pItemDragDrop->str="This string will dragdrop to another place"; pItemDragDrop->DelayRenderFileData(CF_TEXT,NULL); 指定好使用的数据格式之后,调用此对象的成员函数DoDragDrop(...),启动对象拖放操作。需要注意的是,函数DoDragDrop(...)并不立即返回,而是要等到鼠标按钮弹起之后。 3.2. 拖放对象的接收。缺省情况下,一般的窗口是不能接收拖放对象的;要使窗口可以接收拖 放对象,需要在窗口类定义中加入成员对象COleDropTarget,并在生成窗口时调用函数 COleDataTarget::Register()。例如: Class myView : public CScrollView { private: COleDropTarget oleTarget; protected: virtual int OnCreate(LPCREATESTRUCT); //...... } int myView::OnCreate(LPCREATESTRUCT lpCreateStruct) { //...... dropTarget.Register(this); return 0; } 为实现拖放对象的接收,还应重载CView或COleDropTarget的虚函数:COnDragMove()、 OnDragEnter()和OnDrop()等。函数OnDragEnter()、OnDragMove()应根据鼠标在窗口中的位置, 返回以下数值: DROPEFFECT_MOVE---表明可以把对象复制到现在的窗口、现在的位置; DROPEFFECT_COPY---表明可以把对象从原来的窗口、原来的位置移到现在的窗口、现在的位置; DROPEFFECT_NONE---表明不能在该窗口的该位置放下。 下例只允许移动对象,而不允许复制对象: DROPEFFECT myView::OnDragEnter(......) { return DROPEFFECT_MOVE; } DROPEFFECT myView::OnDragOver(......) { return DROPEFFECT_MOVE; } 函数OnDrop()应处理拖动对象放下后的工作。该函数的参数pDataObjec指向一个 COleDataObject对象,利用指针,可以获取有关数据。该函数的一般实现是: a.检查对象的数据格式: 利用函数COleDataObject::IsDataAvailable(); b.按指定的格式获取数据:利用COleDataObject::GetFileData()等函数; c.建立对象(可能与原对象相同,也可能不建立对象仅使用对象中的数据):利用以上步骤 得到的数据建立对象。例如: char magic_string[13]; COLORREF color; CString str; int len; myDataSource* pMyData; if(IsDataAvailable(CF_TEXT)) { CFile file=GetFileData(CF_TEXT); file.Read(magic_string,13); if(strncmp(magic_string,"Test DragDrop",13)==0) { file.Read(&color,sizeof(COLORREF)); file.Read(&len,sizeof(int)); file.Read(str,len); CClientDC dc(this); dc.SetTextColor(color); dc.SetBkMode(TRANSPARENT); dc.TextOut(100,50,str,len); pMyData=new myDataSource; pMyData->color=color; pMyData->str=str; } } 对于COleClientItem或COleServerItem对象,可以按以下方法很容易地重建对象: COleClient* pItem=GetDocument()->CreateNewItem(); pItem->CreateFrom(pDataObject); 3.3. 拖放操作的结束函数DoDragDrop()返回时,拖放过程结束。函数DoDragDrop()的返回值, 表明了对象的拖放结果。 DROPEFFECT_MOVE:对象被放到他处,需删除原对象 DROPEFFECT_COPY:对象被复制到他处,不删除原对象 DROPEFFECT_NONE:未能实现拖放,无需删除原对象 例如: int DragEffect=pItemTracking->DoDragDrop(......); switch(DragEffect) { case DROPEFFECT_MOVE: delete pItemTracking; GetDocument()->UpdateAllItems(NULL); GetDocument()->UpdateAllViews(NULL); break; case DROPEFFECT_COPY: case DROPEFFECT_NONE: default: break; } June 27 Windows XP的服务分析(转)Windows XP的服务分析 1.Alerter 简介:通知所选用户和计算机有关系统管理级警报。如果服务停止,使用管理警报的程序将不会受到它们。如果此服务被禁用,任何直接依赖它的服务都将不能启动。一般家用计算机根本不需要传送或接收计算机系统管理来的警示(Administrative Alerts) 依存关系: 此服务依赖于Workstation 建议启动类型: 手动 2.Application Layer Gateway Service 简介:为 Internet 连接共享和 Internet 连接防火墙提供第三方协议插件的支持,如果不使用因特网联机共享 (ICS) 提供多台计算机的因特网存取和因特网联机防火墙 (ICF) 软件可以关闭该服务 依存关系: Internt Connection Firewall (ICF) / Internet Connection Sharing (ICS) 依赖于此服务 建议启动类型: 手动 3.Application Management 简介:提供软件安装服务,诸如分派,发行以及删除。 依存关系: 无 建议启动类型: 手动 4.Automatic Updates 简介:从 Windows Update 启用重要的 Windows 更新,能够让Windows XP自动到Microsoft 官方网站检查和下载补丁程序。如果停用此服务,可以手动从 Windows Update 网站上更新操作系统。 依存关系: 无 建议启动类型: 手动(系统的更新是系统管理员和用户应该时刻关注的) 5.Background Intelligent Transfer Service 简介:使用空闲的网络带宽传输数据。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 和 Workstation 建议启动类型: 手动 6.ClipBook 简介:启用“剪贴簿查看器”储存信息并与远程计算机共享。如果此服务终止,“剪贴簿查看器” 将无法与远程计算机共享信息。如果此服务被禁用,任何依赖它的服务将无法启动。通常计算机根本不需要把剪贴簿内的信息和其它计算机共享。 依存关系: 此服务依赖于Network DDE 建议启动类型: 手动 7.COM+ Event System 简介:支持系统事件通知服务(SENS),此服务为订阅组件对象模型(COM)组件事件提供自动分布功能。如果停止此服务,SENS 将关闭,而且不能提供登录和注销通知。如果禁用此服务,显式依赖此服务的其他服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC),同时System Event Notification依赖于此服务 建议启动类型: 手动 8.COM+ System Application 简介:管理 基于COM+ 组件的配置和跟踪。如果服务停止,大多数基于 COM+ 组件将不能正常工作。如果本服务被禁用,任何明确依赖它的服务都将不能启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 9.Computer Browser 简介:维护网络上计算机的更新列表,并将列表提供给计算机指定浏览。如果服务停止,列表不会被更新或维护。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。一般计算机不需要此服务。 依存关系: 此服务依赖于Server 和 Workstation 建议启动类型: 手动 10.Cryptographic Services 简介: 提供三种管理服务: 编录数据库服务,它确定 Windows 文件的签字; 受保护的根服务,它从此计算机添加和删除受信根证书机构的证书;和密钥(Key)服务,它帮助注册此计算机获取证书。如果此服务被终止,这些管理服务将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 11.DHCP Client 简介:通过注册和更改 IP 地址以及 DNS 名称来管理网络配置。使用 DSL/Cable 、ICS 和 IPSEC 都需要这个来指定动态 IP。 依存关系: 此服务依赖于AFD 网络支持环境、NetBT和TCP/IP Protocol Driver 建议启动类型: 手动 12.Distributed Link Tracking Client 简介:在计算机内 NTFS 文件之间保持链接或在网络域中的计算机之间保持链接。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 13.Distributed Transaction Coordinator 简介:协调跨多个数据库、消息队列、文件系统等资源管理器的事务。如果停止此服务,则不会发生这些事务。如果禁用此服务,显式依赖此服务的其他服务将无法启动。除非启用Message Queuing,一般用不到此服务。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 和 Security Accounts Manager 建议启动类型: 手动 14.DNS Client 简介:为此计算机解析和缓冲域名系统 (DNS) 名称。 依存关系: 此服务依赖于TCP/IP Protocol Driver 建议启动类型: 手动 15.Error Reporting Service 简介:服务和应用程序在非标准环境下运行时允许错误报告。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 16.Event Log 简介:启用在事件查看器查看基于 Windows 的程序和组件颁发的事件日志消息。无法终止此服务。 依存关系: Windows Management Instrumentation 依赖于此服务 建议启动类型: 自动 17.Fast User Switching Compatibility 简介:为在多用户下需要协助的应用程序提供管理。 依存关系: 此服务依赖于Terminal Services 建议启动类型: 手动 18.Help and Support 简介:启用在此计算机上运行帮助和支持中心。如果停止服务,帮助和支持中心将不可用。如果禁用服务,任何直接依赖于此服务的服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 19.Human Interface Device Access 简介:启用对智能界面设备 (HID)的通用输入访问,它激活并保存键盘、远程控制和其它多媒体设备上的预先定义的热按钮。如果此服务被终止,由此服务控制的热按钮将不再运行。 如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 20.IMAPI CD-Burning COM Service 简介:用 Image Mastering Applications Programming Interface (IMAPI) 管理 CD 录制。如果停止该服务,这台计算机将无法录制 CD。如果该服务被停用,任何依靠它的服务都无法启动。Windows XP 整合的 CD-R 和 CD-RW 光驱上拖放的刻录功能,比不上专业的刻录软件,例如Nero,关掉此服务可以加快其他刻录软件的开启速度。 依存关系:无 建议启动类型: 已禁用 21.Indexing Service 简介:本地和远程计算机上文件的索引内容和属性;通过灵活查询语言提供文件快速访问。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 已禁用 22.Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) 简介:为家庭或小型办公网络提供网络地址转换,定址以及名称解析和/或防止入侵服务。 如果不使用因特网联机共享(ICS)或是 Windows XP 内含的因特网联机防火墙(ICF)该服务可以关闭。 依存关系: 此服务依赖于Application Layer Gateway Service、Network Connections、Network Location Awareness(NLA)、Remote Access Connection Manager 建议启动类型: 手动 23.IPSEC Services 简介:管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序IPSec保护经由网络传送的数据,为虚拟私人网络 (VPN)提供安全性,使VPN 能够经由因特网安全地传输数据。在某些网络中需要,但是一般使用者是不需要该服务的。 依存关系: 此服务依赖于IPSEC driver、Remote Procedure Call (RPC)、TCP/IP Protocol Driver 建议启动类型: 手动 24.Logical Disk Manager 简介:监测和监视新硬盘驱动器并向逻辑磁盘管理器管理服务发送卷的信息以便配置。如果此服务被终止,动态磁盘状态和配置信息会过时。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Plug and Play和Remote Procedure Call (RPC),同时Logical Disk Manager Administrative Service 依赖于此服务 建议启动类型: 手动 25.Logical Disk Manager Administrative Service 简介:配置硬盘驱动器和卷。此服务只为配置处理运行,然后终止,只有使用 Microsoft Management Console(MMC)主控台的功能时才会用到。 依存关系: 此服务依赖于Plug and Play、Remote Procedure Call (RPC)、Logical Disk Manager 建议启动类型: 手动 26.Messenger 简介:传输客户端和服务器之间的 NET SEND 和 Alerter 服务消息。此服务与 Windows Messenger 无关。如果服务停止,Alerter 消息不会被传输。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。此服务允许网络之间互相传送提示信息,如利用net send发送信息。 依存关系: 此服务依赖于NetBIOS Interface、Plug and Play、Remote Procedure Call (RPC)、Workstation 建议启动类型: 已禁用 27.MS Software Shadow Copy Provider 简介:管理卷影复制服务拍摄的软件卷影复制。如果该服务被停止,软件卷影复制将无法管理。如果该服务被停用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 28.Net Logon 简介:支持网络上计算机 pass-through 帐户登录身份验证事件。 依存关系: 此服务依赖于Workstation 建议启动类型: 已停用 29.NetMeeting Remote Desktop Sharing 简介:允许经过授权的用户用 NetMeeting 在公司 intranet 上远程访问这台计算机,让使用者可以将计算机的控制权分享予网络上或因特网上的其它使用者,从安全的角度,此服务一定得关闭。如果服务被停止,远程桌面共享将不可用。如果服务被禁用,依赖这个服务的任何服务都会无法启动。 依存关系:无 建议启动类型: 已禁用 30.Network Connections 简介:管理“网络和拨号连接”文件夹中对象,在其中您可以查看局域网和远程连接。 依存关系: 此服务依赖于Remote Procedure Call (RPC),同时Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) 依赖于此服务 建议启动类型: 手动 31.Network DDE 简介:为在同一台计算机或不同计算机上运行的程序提供动态数据交换 (DDE) 的网络传输和安全。如果此服务被终止, DDE 传输和安全将不可用。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Network DDE DSDM,同时ClipBook依赖于此服务 建议启动类型: 手动 32.Network DDE DSDM 简介:管理动态数据交换 (DDE) 网络共享。如果此服务终止,DDE 网络共享将不可用。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: Network DDE 依赖于此服务 建议启动类型: 手动 33.Network Location Awareness (NLA) 简介:收集并保存网络配置和位置信息,并在信息改动时通知应用程序。 依存关系: 此服务依赖于AFD网络支持环境、TCP/IP Procotol Driver,同时Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) 依赖于此服务 建议启动类型: 手动 34.NT LM Security Support Provider 简介:为使用传输协议而不是命名管道的远程过程调用(RPC)程序提供安全机制。如果不使用 Message Queuing 或Telnet Server可以关闭此服务。 依存关系: Telnet依赖于此服务 建议启动类型: 手动 35.Performance Logs and Alerts 简介:收集本地或远程计算机基于预先配置的日程参数的性能数据,然后将此数据写入日志或触发警报。如果此服务被终止,将不会收集性能信息。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系:无 建议启动类型: 手动 36.Plug and Play 简介:并适应硬件的更改。终止或禁用此服务会造成系统不稳定。 依存关系: Logical Disk Manager、Logical Disk Manager Administrative Service、Messenger、Smart Card、Telephony、Windows Audio依赖于此服务。 建议启动类型: 自动 37.Portable Media Serial Number 简介:获取连接到本机的音乐播放器的序列号 依存关系:无 建议启动类型: 已禁用 38.Print Spooler 简介:将文件加载到内存中以便迟后打印,如果没有打印机,关闭此服务。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 无打印机则选择手动,有打印机或使用网络打印机则选择自动 39.Protected Storage 简介:提供对敏感数据(如私钥)的保护性存储,以便防止未授权的服务,过程或用户对其的非法访问。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 自动 40.QoS RSVP 简介:为依赖质量服务(QoS)的程序和控制应用程序提供网络信号和本地通信控制安装功能。 依存关系: 此服务依赖于AFD网络支持环境、TCP/IP Procotol Driver和Remote Procedure Call (RPC) 建议启动类型: 手动 41.Remote Access Auto Connection Manager 简介:无论什么时候当某个程序引用一个远程 DNS 或 NetBIOS 名或者地址就创建一个到远程网络的连接。有些 DSL/Cable 提供者,可能需要用此来处理登入程序。 依存关系: 此服务依赖于Remote Access Connection Manager、Telephony 建议启动类型: 手动 42.Remote Access Connection Manager 简介:创建网络连接。 依存关系: 此服务依赖于Telephony,同时Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS)和Remote Access Auto Connection Manager依赖于此服务 建议启动类型: 手动 43.Remote Desktop Help Session Manager 简介:管理并控制远程协助。如果此服务被终止,远程协助将不可用。终止此服务前,请参见“属性”对话框上的“依存”选项卡。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 44.Remote Procedure Call (RPC) 简介:提供终结点映射程序 (endpoint mapper) 以及其它 RPC 服务。 依存关系: 有38个服务依赖于此服务 建议启动类型: 自动 45.Remote Procedure Call (RPC) Locator 简介:管理 RPC 名称服务数据库。 依存关系: 此服务依赖于Workstation 建议启动类型: 手动 46.Remote Registry 简介:使远程用户能修改此计算机上的注册表设置。如果此服务被终止,只有此计算机上的用户才能修改注册表。如果此服务被禁用,任何依赖它的服务将无法启动。基于安全性考虑,除非必须要远程修改注册表,确保关闭此服务。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 已禁用 47.Removable Storage 简介:移动设备使用, 除非有 Zip 磁盘驱动器或是 USB 之类移动存储硬件或是 Tape 备份装置,关闭此服务 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 48.Routing and Remote Access 简介:在局域网以及广域网环境中为企业提供路由服务。 依存关系: 此服务依赖于NetBIOSGroup 和Remote Procedure Call (RPC) 建议启动类型: 已禁用 49.Secondary Logon 简介:启用替换凭据下的启用进程。如果此服务被终止,此类型登录访问将不可用。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系:无 建议启动类型: 自动 50.Security Accounts Manager 简介:存储本地用户帐户的安全信息。 依存关系: 此服务依赖于Remote Procedure Call (RPC),同时Distributed Transaction Coordinator 依赖于此服务 建议启动类型: 自动 51.Server 简介:支持此计算机通过网络的文件、打印、和命名管道共享。如果服务停止,这些功能不可用。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。 依存关系: Computer Browser 依赖于此服务 建议启动类型: 手动,如果需要使用Windows的文件/打印共享功能,启动类型选择自动 52.Shell Hardware Detection 简介:为自动播放硬件事件提供通知,一般使用在记忆卡或是CD、DVD设备上。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 53.Smart Card 简介:管理此计算机对智能卡的取读访问。如果此服务被终止,此计算机将无法取读智能卡。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Plug and Play 建议启动类型: 手动,如果有智能卡则选择自动 54.Smart Card Helper 简介:启用对此计算机使用的旧式(legacy)非即插即用智能卡读取器的支持。如果此服务被终止,此计算机将无法支持旧式取读器。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系:无 建议启动类型:手动,如果有智能卡则选择自动 55.SSDP Discovery Service 简介:自动发现网络上的 UPnP(Universal Plug and Play) 设备服务。UPnP 让计算机可以找到并使用网络上的设备,经 TCP/IP 来搜索设备,如数字相机或打印机。 依存关系: Universal Plug and Play Device Host 依赖于此服务 建议启动类型: 手动 56.System Event Notification 简介:跟踪系统事件,如登录 Windows,网络以及电源事件等。将这些事件通知给 COM+ 事件系统 “订阅者(subscriber)”。 依存关系: 此服务依赖于COM+ Event System 建议启动类型: 自动 57.System Restore Service 简介:执行系统还原功能。 要停止服务,请从“我的电脑”的属性中的系统还原选项卡关闭系统还原。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 58.Task Scheduler 简介:使用户能在此计算机上配置和制定自动任务的日程。如果此服务被终止,这些任务将无法在日程时间里运行。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 如果没有需要定时运行的程序,则选择手动,如果有,则选择自动 59.TCP/IP NetBIOS Helper 简介:允许对“TCP/IP 上 NetBIOS (NetBT)”服务以及 NetBIOS 名称解析的支持。 依存关系: 此服务依赖于AFD 网络支持环境和NetBT 建议启动类型: 自动 60.Telephony 简介:提供 TAPI 的支持,以便程序控制本地计算机,服务器以及 LAN 上的电话设备和基于 IP 的语音连接。一般的拨号调制解调器或是一些 DSL/Cable 可能用到。 依存关系: 此服务依赖于Plug and Play和Remote Procedure Call (RPC),同时Remote Access Connection Manager和Remote Access Auto Connection Manager依赖于此服务 建议启动类型: 手动 61.Telnet 简介:持多种 TCP/IP Telnet 客户,包括基于 UNIX 和 Windows 的计算机。如果此服务停止,远程用户就不能访问程序,任何直接依靠它的服务将会启动失败。基于安全方面的考虑,关闭此服务。 依存关系: 此服务依赖于NT LM Security Support Provider、Remote Procedure Call (RPC)、TCP/IP Protocol Driver 建议启动类型: 已禁用 62.Terminal Services 简介:允许多位用户连接并控制一台机器,并且在远程计算机上显示桌面和应用程序。这是远程桌面(包括管理员的远程桌面)、快速用户转换、远程协助和终端服务器的基础结构。 依存关系: 此服务依赖于Remote Procedure Call (RPC),同时Fast User Switching Compatibility依赖于此服务 建议启动类型: 已禁用 63.Themes 简介:为用户提供使用主题管理的经验。 依存关系:无 建议启动类型: 手动 64.Uninterruptible Power Supply 简介:管理连接到计算机的不间断电源(UPS)。 依存关系:无 建议启动类型: 如果有UPS则选择自动,如果没有则选择手动 65.Universal Plug and Play Device Host 简介: 提供对主机通用随插即用设备的支持,用来侦测安装通用随插即用设备,例如数码相机或打印机 依存关系: 此服务依赖于SSDP Discovery Service 建议启动类型: 手动 66.Volume Shadow Copy 简介:管理并执行用于备份和其它目的的卷影复制。如果此服务被终止,备份将没有卷影复制,并且备份会失败。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 67.WebClient 简介:使基于 Windows 的程序能创建、访问和修改基于 Internet 的文件,使用 WebDAV 将档案或数据夹上载到所有的 Web 服务。如果此服务被终止,将会失去这些功能。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于WebDav Client Redirector 建议启动类型: 手动 68.Windows Audio 简介:管理基于 Windows 的程序的音频设备。如果此服务被终止,音频设备及其音效将不能正常工作。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Plug and Play和Remote Procedure Call (RPC) 建议启动类型: 自动 69.Windows Image Acquisition (WIA) 简介:为扫描仪和照相机提供图像捕获。如果扫描仪和数码相机内部支持WIA功能的话,就可以直接看到图档,不需要其它的驱动程序。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 70.Windows Installer 简介:根据包含在 .MSI 文件中的指示来安装、修复或删除软件,协助使用者正确地安装、设定、追踪、升级和移除软件程序,该服务可管理应用程序建立和安装的标准格式,并且追踪例如程序组、登录项目及快捷方式等组件。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 71.Windows Management Instrumentation (WMI) 简介:提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windows 的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。 依存关系: 此服务依赖于Event Log和Remote Procedure Call (RPC) 建议启动类型: 自动 72.Windows Management Instrumentation Driver Extensions 简介:与驱动程序间交换系统管理信息。 依存关系:无 建议启动类型: 手动 73.Windows Time 简介:维护在网络上的所有客户端和服务器的时间和日期同步。如果此服务被停止,时间和日期的同步将不可用。如果此服务被禁用,任何明确依赖它的服务都将不能启动。 依存关系:无 建议启动类型: 手动 74.Wireless Zero Configuration 简介:为802.11 无线网络适配器提供自动配置 依存关系: 此服务依赖于NDIS用户模式I/O协议和Remote Procedure Call (RPC) 建议启动类型: 手动 75.WMI Performance Adapter 简介:从 WMI HiPerf 提供程序提供性能库信息。 依存关系: 此服务依赖于Remote Procedure Call (RPC) 建议启动类型: 手动 76.Workstation 简介:创建和维护到远程服务的客户端网络连接。如果服务停止,这些连接将不可用。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。 依存关系: Alerter、Background Intelligent Transfer Service、Computer Browser、Messenger、Net Logon、Remote Procedure Call (RPC) Locator 依赖于此服务 建议启动类型: 自动 June 26 熬到那一天 最近实验室搞的人心惶惶。临近开题,可很多人都要换方向,甚至有的同学题目还没有定下来。一个973,就需要我们这样义无反顾的献身吗?真的很崩溃。我对虚拟化没有什么兴趣,而且不希望自己这半年的努力付诸流水。加油。虽然难熬,也要挺过去。
June 20 转:蓝颜知己会不会变成“绿帽情敌”?转两篇文章,不加评论。(一)文/曾子航 http://user.qzone.qq.com/622005378/blog/10(二)hebeianguo的文集 曾子酷贫:红颜知己也好,蓝颜知己也罢,那都是配偶和情人之间的润滑剂,是男女感情之间的“灰色收入”,所以一定要适可而止,量力而行,一旦“收入”泛滥,就会犯“巨额情感来源不明罪”,“道德法庭”就会找上您,小心啊,“蓝颜知己”可别发展下去“变了色儿”成了“绿帽情敌”! 这是我男朋友写的。---《男女间有纯洁的友谊=有鬼》 通常我们一听到别人问男女之间有没有纯洁的友谊,脑袋里往往一片迷糊,张嘴想说可是又不知道该说什么,想了一会儿后只能带着不确定的语气说我相信是有的或没有,但却不能给予解释,回答有的会举出一些想不明白的例子来说明,回答没有的让他说说,他也道不出所以然来,反正就那么认为。其实问题的关键不在于有或者没有,而在于什么是纯洁的友谊,要是我们能给纯洁的友谊一个明确的定义,那回到这个问题也就容易了。就像别人问世上有没有鬼,不管你回答有或没有,你都很难给予解释,回答有的也会举出一些想不通的例子,那些回答没有的让他说说为什么,顶多再冒一句:“你傻呀,这世上哪有鬼”,反正就那么认为。 June 18 windows 中ActiveX控件注册方法 自从Microsoft公司于1996年推出ActiveX技术以来,ActiveX技术已得到了许多软件公司的支持和响应,并纷纷在其产品中融入ActiveX技术。而作为ActiveX技术之一的ActiveX控件也得到了迅猛的发展,不但各大软件公司推出了不少ActiveX 控件,ActiveX控件更是得到一般开发者的喜爱。那么,什么是ActiveX控件呢?ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件。由于ActiveX控件与开发平台无关,因此,在一种编程语言上开发的ActiveX控件可以无须任何修改,即可在另一种编程语言中使用,其效果如同使用Windows通用控件一样。如:在VC 中开发的ActiveX控件,不作任何修改即可应用于VB中。由此可见,通过使用ActiveX控件即可实现快速小型的组件重用、实现代码共享,从而提高编程效率。从上面亦可看出为何ActiveX控件如此广泛地受到开发者的欢迎。 因为ActiveX控件的可重用性,加上Internet的普及,ActiveX控件得到了极大的发展,目前,从Internet上可以得到相当多的ActiveX控件,而且品种繁多,所完成的任务几乎无所不包。对普通开发者来说,只要有耐心,都能从Internet上找到符合自己要求的ActiveX控件。 从Internet下载的ActiveX控件,或从其他途径得到的ActiveX控件,用户应该怎样做才能正确使用ActiveX控件或将其应用于自己的程序中呢?一般来说,一个外来ActiveX控件要在Windows中被正确使用,首先必须将控件文件(*.OCX)复制到硬盘中,然后将其在Windows中注册,未在Windows中注册过的ActiveX控件是不能使用的。注册ActiveX控件一般来说有三种途径: 1. 使用Regsvr32.exe程序对ActiveX控件进行注册; 2. 使用安装程序制作软件:InstallShield; 3. 在应用程序中加入注册代码。 上述方法适用范围不同,各有各的优点,下面分别讨论。 一、 使用Regsvr32.exe程序对ActiveX控件进行注册 对于未注册过的ActiveX控件可使用此软件对其进行注册,外来ActiveX控件要应用到自己的程序中也必须进行注册。该文件位于Windows目录的system子目录下。使用方法如下:点击“开始”→“运行”;在运行对话框中输入以下命令: regsvr32 < 文件名 > 注册一个ActiveX控件 regsvr32 /u < 文件名 > 解除某ActiveX控件的注册 我们使用一些带ActiveX控件的应用程序时,有时会出现不能运行的情况,这有可能是其自带ActiveX控件未注册所至,这时不妨使用上述命令一试。另外,VC 使用者若对regsvr32.exe的编码感兴趣的话,可在VC 的联机帮助中找到其源代码。若使用VC 6.0,则在MSDN光盘的sampleVC98MFCcontrols egsvr中。 二、 使用安装程序制作软件:InstallShield 使用regsvr32.exe来注册ActiveX控件虽然简单,但需要用户手工注册,在不用时还得手工解除注册,因此,这对一个应用程序来说并非好的解决方案。大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件注册是较为理想的一种方案。使用InstallShield可以制作出专业级的Setup,还可注册其中的ActiveX控件;而且,在以后携载软件时,自动注销掉以前注册的ActiveX控件。方法如下: 1. 启动InstallShield,使用Project Wizard建立一个新的项目; 2. 新建一个“File Group”,将需要注册的ActiveX控件文件放入此“File Group”中; 3. 将上述“File Group”的“Self-Registered”属性设置成“Yes”。 上述步骤仅为制作Setup中设置自动注册ActiveX控件几步,至于使用InstallShield怎样制作一个完整的Setup不在本文讨论范围之中,请读者自己参看有关书籍。 三、 在应用程序中加入注册代码 对于小型程序不宜采取第二种方法,较好的方法是在程序中嵌入注册代码,实现应用程序自注册。其编程方法是: 1. 使用Windows API函数LoadLibrary载入ActiveX控件; 2. 使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterServer)指针; 3. 调用注册函数DllRegisterServer(或注销函数DllUnregisterServer)。 下面以VC 6.0编写的RegActivex程序为例,介绍怎样在程序中自动注册(注销)ActiveX控件。RegActivex的主体框架由VC 6.0的AppWizard自动产生,在其基础上增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”。当选择“注册ActiveX控件”菜单时,将对控件toweratl.ocx(一个汉诺游戏)进行注册;当选择“注销ActiveX控件”菜单时,将解除控件toweratl.ocx的注册。 1. 使用VC 6.0建立一个单文档的应用程序RegActivex,其他项目接受默认设置; 2. 给应用程序增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”,步骤如下: ① 单击VC 6.0左边窗口的“ResoureView”,双击MENU项目下的IDR_MAINFRAME以打开菜单编辑器; ② 在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”; 3. 给新建的菜单项 “注册ActiveX控件” 和“注销ActiveX控件”增加响应函数: ① 在资源编辑其中,双击MENU中的IDR_MAINFRAME打开菜单编辑器,单击“注册ActiveX控件”,按Ctrl W打开MFC Class Wizard; ② 双击Messages框中的COMMAND,给“注册ActiveX控件”菜单项增加响应函数OnRegisterReg(),单击右边“Edit”按钮给OnRegisterReg()函数增加如下代码: void CMainFrame::OnRegisterReg() { //ActiveX控件的路径及文件名 LPCTSTR pszDllName="toweratl.ocx"; //装载ActiveX控件 HINSTANCE hLib = LoadLibrary(pszDllName); if (hLib < (HINSTANCE)HINSTANCE_ERROR) { MessageBox("不能载入Dll文件!","结果",MB_OK); return; } //获取注册函数DllRegisterServer地址 FARPROC lpDllEntryPoint; lpDllEntryPoint = GetProcAddress (hLib,_T("DllRegisterServer")); //调用注册函数DllRegisterServer if(lpDllEntryPoint!=NULL) { if(FAILED((*lpDllEntryPoint)())) { MessageBox("调用DllRegisterServer 失败!","结果",MB_OK); FreeLibrary(hLib); return; }; MessageBox("注册成功","结果",MB_OK); } else MessageBox("调用DllRegisterServer失败!" ,"结果",MB_OK); } ③ “注销ActiveX控件”菜单项响应函数的编写方法同上,代码也相似,只是将 “lpDllEntryPoint=GetProcAddress (hLib,_T("DllRegisterServer"));”改成: lpDllEntryPoint = GetProcAddress (hLib,_T("DllUnregisterServer"))。 4. 编译联接上述程序,即可得一个可执行文件。另需注意的是:应将ActiveX控件文件toweratl.ocx复制到Windows的system目录下。控件文件toweratl.ocx在微软出版的《Visual C 6.0程序员指南》所附光盘中可以找到。 5. 测试上述程序:运行《Visual C 6.0程序员指南》所附光盘中的game2程序,若使用RegActivex注册了toweratl.ocx控件,则该程序可以正常运行;若使用RegActivex注销了toweratl.ocx控件则game2不能运行 June 14 明天,一个新的开始 在识别机上确认了一下自己的指纹,明天就要开始打卡喽。用师兄的话说,以前还算是义工,以后就正式成为民工了。
只是句玩笑话,但过去的一年里,不管风吹日晒都要坚持到实验室,不能迟到早退的生活,对于他们来说应该是个难忘的过去时。
不能再熬夜了,早睡早起,明天,一个充实的开始。 C++中的二维数组本科学C++时就没有认真学习过这部分,都是一知半解,用的时候也很混乱。
趁着现在建模中要用到,就踏实的复习一下,总结一些东西。 常用数据类型转换先定义一些常见类型变量借以说明
int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="苟苟"; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2; 一、其它数据类型转换为字符串 短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换 长整型(long) ltoa(l,temp,10); 二、从其它包含字符串的变量中获取指向该字符串的指针 CString变量 str = "2008北京奥运"; buf = (LPSTR)(LPCTSTR)str; BSTR类型的_variant_t变量 v1 = (_bstr_t)"程序员"; buf = _com_util::ConvertBSTRToString((_bstr_t)v1); 三、字符串转换为其它数据类型 strcpy(temp,"123"; 短整型(int) i = atoi(temp); 长整型(long) l = atol(temp); 浮点(double) d = atof(temp); 四、其它数据类型转换到CString 使用CString的成员函数Format来转换,例如: 整数(int) str.Format("%d",i); 浮点数(float) str.Format("%f",i); 字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username; 五、BSTR、_bstr_t与CComBSTR CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。 char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据";///使用前需要加上头文件comutil.h 反之可以使用char *p=_com_util::ConvertBSTRToString(b); 六、VARIANT 、_variant_t 与 COleVariant VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子: VARIANT va; int a=2001; va.vt=VT_I4;///指明整型数据 va.lVal=a; ///赋值 对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: unsigned char bVal; VT_UI1 short iVal; VT_I2 long lVal; VT_I4 float fltVal; VT_R4 double dblVal; VT_R8 VARIANT_BOOL boolVal; VT_BOOL SCODE scode; VT_ERROR CY cyVal; VT_CY DATE date; VT_DATE BSTR bstrVal; VT_BSTR IUnknown FAR* punkVal; VT_UNKNOWN IDispatch FAR* pdispVal; VT_DISPATCH SAFEARRAY FAR* parray; VT_ARRAY|* unsigned char FAR* pbVal; VT_BYREF|VT_UI1 short FAR* piVal; VT_BYREF|VT_I2 long FAR* plVal; VT_BYREF|VT_I4 float FAR* pfltVal; VT_BYREF|VT_R4 double FAR* pdblVal; VT_BYREF|VT_R8 VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL SCODE FAR* pscode; VT_BYREF|VT_ERROR CY FAR* pcyVal; VT_BYREF|VT_CY DATE FAR* pdate; VT_BYREF|VT_DATE BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH SAFEARRAY FAR* FAR* pparray; VT_ARRAY|* VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT void FAR* byref; VT_BYREF _variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。 例如: long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i; COleVariant的使用与_variant_t的方法基本一样,请参考如下例子: COleVariant v3 = "字符串", v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal; CString转int、long、float
int InnerProid = atoi((char *)(LPCSTR)InnerPro); 如果数据库字段是int型 浮点转换成variant
COleVariant((float)alength) 整型转换成variant COleVariant((long)OuterInsulid,VT_I4) CString如何转换成char *
(char*)(LPCSTR)strYear COleVariant如何转变成CString
COleVariant var; CString smid; var = GetFieldValue(COleVariant("smid"); var.ChangeType(VT_BSTR); smid = var.bstrVal CString如何转变成COleVariant
CString ttt; COleVariant var; var.SetString((LPCSTR)ttt, VT_BSTR) 七、其它 对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如: LPARAM lParam; WORD loValue = LOWORD(lParam);///取低16位 WORD hiValue = HIWORD(lParam);///取高16位 对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如: WORD wValue; BYTE loValue = LOBYTE(wValue);///取低8位 BYTE hiValue = HIBYTE(wValue);///取高8位 CString str;int i;float f; //将字符串转换为整型 str="123"; i=atoi(str); //将字符串转换为单精度型 str="123.123"; f=atof(str); //将整型和单精度型转换为字符串。 i=123; f=123.123; VC中的文件操作收藏在下边,省了每次查MSDN之苦。第一篇文章利用的CFile类,第二篇文章利用的fstream
(一)
各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。 1.文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。 CString strFileTitle; CFileFind finder; BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab"); while(bWorking) { bWorking=finder.FindNextFile(); strFileTitle=finder.GetFileTitle(); } 2.文件的打开/保存对话框 让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。 在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。 CFileDialog mFileDlg(TRUE,NULL,NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, "All Files (*.*)|*.*||",AfxGetMainWnd()); CString str(" ",10000); mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000); str.ReleaseBuffer(); POSITION mPos=mFileDlg.GetStartPosition(); CString pathName(" ",128); CFileStatus status; while(mPos!=NULL) { pathName=mFileDlg.GetNextPathName(mPos); CFile::GetStatus( pathName, status ); } 3.文件的读写 文件的读写非常重要,下面将重点进行介绍。文件读写的最普通的方法是直接使用CFile进行,如文件的读写可以使用下面的方法: //对文件进行读操作 char sRead[2]; CFile mFile(_T("user.txt"),CFile::modeRead); if(mFile.GetLength()<2) return; mFile.Read(sRead,2); mFile.Close(); //对文件进行写操作 CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate); mFile.Write(sRead,2); mFile.Flush(); mFile.Close(); 虽然这种方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大。首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例。 //对文件进行写操作 CString strTemp; CFile mFile; mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite); CArchive ar(&mFile,CArchive::store); ar<< ar.Close(); mFile.Close(); //对文件进行读操作 CFile mFile; if(mFile.Open("d:\\dd\\try.TRY",CFile::modeRead)==0) return; CArchive ar(&mFile,CArchive::load); ar>>strTemp; ar.Close(); mFile.Close(); CArchive的 << 和>> 操作符用于简单数据类型的读写,对于CObject派生类的对象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()还可以进行类的读写,如: //存储CAboutDlg类 ar.WriteClass(RUNTIME_CLASS(CAboutDlg)); //读取CAboutDlg类 CRuntimeClass* mRunClass=ar.ReadClass(); //使用CAboutDlg类 CObject* pObject=mRunClass->CreateObject(); ((CDialog* )pObject)->DoModal(); 虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,因此虽然很多VC入门的书上花费大量篇幅讲述文档/视结构,但我建议你最好不要使用它的文档。关于如何进行文档/视的分离有很多书介绍,包括非常著名的《Visual C++ 技术内幕》。 如果你要进行的文件操作只是简单的读写整行的字符串,我建议你使用CStdioFile,用它来进行此类操作非常方便,如下例。 CStdioFile mFile; CFileException mExcept; mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &mExcept); CString string="I am a string."; mFile.WriteString(string); mFile.Close(); 4.临时文件的使用 正规软件经常用到临时文件,你经常可以会看到C:\Windows\Temp目录下有大量的扩展名为tmp的文件,这些就是程序运行是建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,你就可以用它来建立并操作文件了,如: char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH]; GetTempPath(_MAX_PATH, szTempPath); GetTempFileName(szTempPath,_T ("my_"),0,szTempfile); CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite); char m_char='a'; m_tempFile.Write(&m_char,2); m_tempFile.Close(); 5.文件的复制、删除等 MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。 (二)
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:
1、插入器(<<)
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。 2、析取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。 一、打开文件
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: void open(const char* filename,int mode,int access); 参数:
filename: 要打开的文件名 mode: 要打开文件的方式 access: 打开文件的属性 打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下: ios::app: 以追加的方式打开文件 ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性 ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 ios::in: 文件以输入方式打开 ios::out: 文件以输出方式打开 ios::nocreate: 不建立文件,所以文件不存在时打开失败 ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 ios::trunc: 如果文件存在,把文件长度设为0 可以用“或”把以上属性连接起来,如ios::out|ios::binary 打开文件的属性取值是:
0:普通文件,打开访问 1:只读文件 2:隐含文件 4:系统文件 可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。 例如:以二进制输入方式打开文件c:\config.sys fstream file1; file1.open("c:\\config.sys",ios::binary|ios::in,0); 如果open函数只有文件名一个参数,则是以读/写普通文件打开,即: file1.open("c:\\config.sys");<=>file1.open("c:\\config.sys",ios::in|ios::out,0); 另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了: fstream file1("c:\\config.sys"); 特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。
ifstream file2("c:\\pdos.def");//以输入方式打开文件 ofstream file3("c:\\x.123");//以输出方式打开文件 所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。 二、关闭文件 打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。 三、读写文件 读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式 1、文本文件的读写 文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下: file2<<"I Love You";//向文件写入字符串"I Love You" int i; file1>>i;//从文件输入一个整数值。 这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些 操纵符 功能 输入/输出
dec 格式化为十进制数值数据 输入和输出 endl 输出一个换行符并刷新此流 输出 ends 输出一个空字符 输出 hex 格式化为十六进制数值数据 输入和输出 oct 格式化为八进制数值数据 输入和输出 setpxecision(int p) 设置浮点数的精度位数 输出 比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
2、二进制文件的读写 ①put() put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。 ②get() get()函数比较灵活,有3种常用的重载形式: 一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。 另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。 还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='\n');这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'\n'。例如: file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。 ③读写数据块
要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下: read(unsigned char *buf,int num); write(const unsigned char *buf,int num); read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。 例: unsigned char str1[]="I Love You";
int n[5]; ifstream in("xxx.xxx"); ofstream out("yyy.yyy"); out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中 in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换 in.close();out.close(); 四、检测EOF
成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是int eof(); 例: if(in.eof())ShowMessage("已经到达文件尾!");
五、文件定位
和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下: istream &seekg(streamoff offset,seek_dir origin); ostream &seekp(streamoff offset,seek_dir origin); streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举: ios::beg: 文件开头 ios::cur: 文件当前位置 ios::end: 文件结尾 这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。 例: file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节 file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节 C中最简单的文件操作
头文件中加入<stdio.h>
FILE * fin,* fout;
fin=fopen("in.txt","r"); fout=fopen("out.txt","w"); float temp; float result[1000]; int i=0; while(!feof(fin))
{fscanf(fin,"%f",&temp); result[i]=temp; i++; cout<<result[i]<<endl;
fprintf( fout, "%f\n", temp); } fclose( fout );
fclose(fin); June 10 转:有影响力的数据挖掘软件列表以下介绍分别按:公司、数据挖掘工具及其特点、应用行业案例 三个方面。
9、NC Software, Inc.
19、MIS America (formerly MIS AG) 20、Oracle Corporation
23、Salford Systems 24、SAS 25、Seagate Software (division of Seagate Technology) 26、Search Software America 27、Silicon Graphics Inc. (SGI) 28、SLP InfoWare, Inc. 29、Speedware (Visionize.com) 30、SPSS, Inc. 31、SRA International 32、thinkAnalytics Corporation 33、Unica Corporation 34、Urban Science Applications Inc. 35、Visible Decisions, Inc. 36、Visual Insights 37、WhiteCross Systems 38、WizSoft, Inc. June 08 这个周末 事情很多,心情有点乱。趁着周末,梳理一下自己的生活。 June 07 又是一年高考时 嗯,高考,咱也是过来人了。也可以清清嗓子,说声“想当年我们高考那会儿”了。
高考头天晚上看黄磊演的《吕布与貂蝉》到11点,然后睡觉。第二天妹妹一大早起床复习古文,还被我耻笑。结果考场上要填个“驽马十驾”的句子,怎么也想不到这个是驽or弩,这也算是个印象深刻的小报应,一直耿耿于怀。中午回家别人问我作文题目,发现居然马上就忘记了。十年寒窗,就在4个半天画上了句号。向来都不太会估分,也乐的不去考虑什么。等成绩下来,强项语数外都考的很差,理综倒发挥超常,有喜有忧,总分也算是正常水平。
想到复读就觉得万分痛苦,觉得自己肯定坚持不下来,二来复读也存着很多变数,于是志愿就挑着稳妥的报。至于专业,原则是数理化的坚决不选,太偏文的也不适合,好像也只剩一些工科了,于是乎上了计算机这条贼船。
如果重头再来,高中会学习的踏实一点,选择金融或者法律专业,考上一个好一点的学校。 June 06 我的6月 6月份了,武汉的夏天到了。
家里人都打电话担心我热的受不了,朋友也纷纷发短信问武汉的夏天是不是很难熬。呵呵,看来武汉这个火炉的称号是“臭名远扬”了。其实还好,感觉和石家庄差别不是很大,也感谢校园里那么多可爱的树,路上不打阳伞也不会被晒到,实验室整天开空调也很凉快。
去年刚开学的时候,高温和蚊虫真是折磨人,晚上经常会有几个可恶的蚊子钻进蚊帐里,为了不被咬就用毛毯把自己从头到脚捂的严严实实,床单都是又潮又黏的,不能说一夜无眠,但对于我这种一直是一觉到天明的人来说,已经是一种煎熬了。今年感觉不是很热,同学还都在盖被子。也可能是真正热的时候还没到,秋老虎应该比较可怕。
6月份了,准研二生活开始了。
时间过的可真快,刚才群里发了07年应届生求职的电子书,大家都惊呼:要找工作了?已经适应了武汉的这种又潮又热的气候,适应了味道有点重的各色小吃,适应了武汉人直爽有点火爆的脾气。每天从西九到百景园,到东五,或快走,或散步,这条路已经太熟悉了。这几天师兄师姐都忙着填各种表,签字,办手续,实验室比往日显得热闹,但有点人去楼空的失落。轻飘飘的旧岁月,最后的校园时光,就这样溜走了。
而我们,面临着开题,找工作,写论文,答辩,马上也要奔波在实验室和大活之间,奔波在各种宣讲会,面试,笔试之间,在被拒和被BS中成长。可以预见未来的半年,未来的一年,我们会像忙碌的陀螺一样转个不停。现在每天发牢骚,盼着毕业;可能工作了,又会怀念现在的学生生涯。
下午路过附小,听到门口执勤的小朋友脆生生的喊“老师您好”,就一下子想到自己的童年,无忧无虑才是一种幸福。我们不能拒绝长大,也不能逃避责任。路还很长。以前想起这些,就会觉得很烦,但现在可以以平和的心态去面对了,毕竟有那么多的兄弟姐妹和我一起战斗,有亲人和朋友站在我的身边,一直支持着我鼓励着我。希望我可以一如既往的顺利。 June 05 80后校园爱情的空间难题 在腾讯新闻看到这样一篇文章——《大学毕业生网上寻人互换情侣》(http://news.qq.com/a/20070604/002771.htm)。一对大学生在父母的压力下,分别选择在自己的家乡就业。但并不是“毕业了,我们一起失恋”的老套故事,男主角在网上寻人互换情侣,希望可以仍然保持联系。
很多网友都评论这是心理变态,人格变态,这种行为跟换妻一样很不道德。说他连大学生的基本素质都没有,说80后的人什么荒唐事都做的出来。等等。
的确,这种另类想法让人难以接受,很荒诞也很幼稚。对于我来说,我觉得爱情的眼里容不得沙子,分手就要分的干干净净,如果我和男朋友分手了,应该是连朋友都做不成了......尤其是还互换情侣,那以后两个家庭都隐含着很多不安定因素。最好的办法,还是重新开始新的生活。
现在80后的大学生基本都是独生子女,绝大多数的家长都希望孩子回到身边,很多感情很好的恋人也因为空间难题而分手。毕竟父母于自己有生育培养之恩,他们岁数大了,需要自己留在身边尽孝,如果是我,尽管两难也会把天平倾到亲情的一边。幸好,我和GG家离的很近,不会面临这样的痛苦抉择。以前一直觉得这样很麻烦,觉得距离远一些会产生美,会少一些不必要的琐碎的事情。现在觉得还是很幸运的,以后节假日可以一起陪双方的父母,他们也可以互相照应,呵呵。真好。 June 03 熬夜的危害 总是磨磨蹭蹭的,结果导师给的任务都是拖到最后还没有完成。又要熬夜了,好痛苦。希望以后不用再熬夜,可以睡到自然醒。要走在时间的前头,把活提前赶完。
读研以来,MS就没有在12点之前睡过,每天在电脑前的时间应该超过10个小时了。我都能感觉到自己的视力在明显下降,暑假回家肯定又被骂“小瞎子”了。熬夜和电脑辐射都对皮肤和身体不好,怎么办呢?以后真的不想从事计算机方面的工作,尤其不想搞研发,压力大又辛苦。可是像移动、电信、银行这样的部门,大家都想进,竞争很激烈;销售、技术支持这种工作,要经常出差,都不太喜欢要女生;搞管理,又没有做企划案之类的经验;考公务员,又丢掉了专业......说是要开个可爱的西点屋,做自己最最喜欢的蛋糕,可这实在是对不起上的这么多年学,难以向家人社会交待。
很想做个职业规划,可是真的不太确定自己的兴趣所在。就想整天歇着,想去哪就去哪,想干点啥就干点啥,没人管。从小就希望可以“读万卷书,走万里路”,现在还是这样期待。
唉,慢慢想吧。今天先熬夜把这个程序搞了。
熬夜会对身体造成多种损害: ●经常疲劳,免疫力下降:人体经常熬夜,所造成的后遗症,最严重的就是疲劳、精神不继;人体的免疫力也会跟着下降,自然的,感冒、胃肠感染、过敏原等等的自律神经失调症状都会找上你。 ●头痛:熬夜的隔天,上班或上课时经常会头昏脑胀、注意力无法集中,甚至会出现头痛的现象,长期熬夜、失眠对记忆力也有无形的损伤。 ●黑眼圈、眼袋:夜晚是人体的生理休息时间,该休息而没有休息,就会因为过度疲劳,造成眼睛周围的血液循环不良,而引起黑眼圈、眼袋或是白眼球布满血丝。 ●皮肤干燥、黑斑、青春痘:晚上11时到凌晨3时是美容时间,也就是人体的经脉运行到胆、肝的时段。这两个器官如果没有获得充分的休息,就会表现在皮肤上,容易出现粗糙、脸色偏黄、黑斑、青春痘等问题。对于不习惯早睡的人来说,最迟也要在凌晨1时的养肝时间进入熟睡期。 而且,更糟糕的是,长期熬夜会慢慢地出现失眠、健忘、易怒、焦虑不安等神经、精神症状。 在不得不熬夜时,事先、事后做好准备和保护是十分必要的,至少可以把熬夜对身体的损害降到最低。 首先是虽然晚睡但按时进餐,而且要保证晚餐的营养丰富。多补充一些含维生素C或含有胶原蛋白的食物,利于皮肤恢复弹性和光泽。鱼类豆类产品有补脑健脑功能,也应纳入晚餐食谱。熬夜过程中要注意补水,可以喝枸杞大枣茶或菊花茶,既补又有去火功效。 其次,晚睡不“晚洗”。一般而言,皮肤的作息时间是在22:00~23:00之间进入晚间保养状态。这时是皮肤吸收养分的好时机。如果有条件的晚睡族群,在这段时间里,一定要进行一次皮肤清洁和保养。用温和的洁面用品清洁之后,涂抹一些保湿营养乳液,这样,皮肤在下一个阶段虽然不能正常进入睡眠,却也能正常得到养分与水分的补充。 熬夜之后,最好的保护措施自然是“把失去的睡眠补回来”。如果做不到,午间的10分钟小睡也是十分有用的。此外,打打羽毛球,多去户外走动,有助于你的身体健康和精神愉快,也是摆脱熬夜后萎靡状态的好办法。 ,多去户外走动,有助于你的身体健康和精神愉快,也是摆脱熬夜后萎靡状态的好办法。 毛球,多去户外走动,有助于你的身体健康和精神愉快,也是摆脱熬夜后萎靡状态的好办法。 June 02 Mr Right
往往许多人在抉择伴侣时,容易东想西想,不知所措,就是因为害怕一时做错决定,看错人,造成终生的遗憾。 |
|
|