- 博客(126)
- 资源 (4)
- 收藏
- 关注
原创 VS2010“起始页”不记录最近打开的工程——解决方案
菜单 —— 运行—— regedit ——打开下面的键值: HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer将 NoRecentDocsHistory 设置为 0 (点击右键修改)
2014-06-18 09:44:36
4109
转载 C++11引入智能指针std::unique_ptr
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的auto_ptr对象失效,可咋整呢?这个时候就要使用unique_ptr了,顾名思义嘛,uniq
2014-04-06 14:07:14
8148
1
原创 Xerces使用心得
1.新的Xerces-C++库3.1.1版本提供了静态库编译选项,编译产生静态库Xerces_c-static-3D.lib(用于Debug模式)或Xerces_c-static-3.lib(用于Release模式),使用这两个库用于静态链接的MFC程序时除了添加附加库目录和库名称外,还需要在工程预编译选项中加入XERCES_STATIC_LIBRARY宏定义,来关闭Xerces-C++库代码中的
2014-04-02 11:38:22
1726
转载 _splitpath,_makepath分析路径
生成路径,分解路径FROM MSDN:Example/* MAKEPATH.C */#include #include void main( void ){ char path_buffer[_MAX_PATH]; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAM
2014-03-28 20:31:21
1442
转载 windows路径操作API函数
PathRemoveArgs 去除路径的参数PathRemoveBackslash 去除路径最后的反斜杠"\"PathAddBackslash 在路径最后加上反斜杠"\"PathRemoveBlanks 去除路径前后的空格PathAddExtension 在文件路径后面加上扩展名PathRemoveExtension 去除文件路径扩展
2014-03-28 20:25:24
833
转载 MSXML的不同版本使用
我参与了IE7的开发过程,看到了在IE浏览器中形形色色使用MSXML的方法。显然有一些东西困扰着开发者:MSXML“混乱”的版本以及如何创建“正确”的实例。下面是一段非常常见的代码:if (Web.Application.get_type() == Web.ApplicationType.InternetExplorer) { var progIDs = [ 'Msxml2.DOMDocum
2014-03-11 19:41:24
6396
转载 COM组件简介
面向对象的思想难以适应这种分布式软件模型,于是组件化程序设计思想得到了迅速的发展。按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。为了实现这样的应用软件,组建程序和组建程序之间需要一些极为细致的规范, 只有组件程序遵守了这些共同的规范,然间系统才能正常运行。为此,OMG和Micro
2014-03-11 13:31:40
2207
转载 Schema中的xsd:any和xsd:anyAttribute
元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档! 元素 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档!下面这个例子是从名为 "family.xsd" 的 XML schema 中引用的片段。它展示了一个针对 "person" 元素的声明。通过使用 元素,我们可以通过任何元素(在 之后)扩展 "person" 的内容:
2014-03-09 23:15:28
2070
转载 Schema元素xsd:key和xsd:keyref
XML Schema可以通过将一个元素或属性定义为key,从而保证该元素或属性在一定范围内的唯一性。在XML实例文档中,key所代表的元素或属性的值组成一个集合,可以通过keyref来限定另一个元素或属性的值必须在这个集合中。 key的定义方法和unique的定义方法十分相似。首先选择一组元素做为范围,然后依据上下文关系指定某元素或属性为key。keyref的定义跟key的定义基
2014-03-09 21:22:32
2965
转载 Schema中xsd:unique元素的使用方法
XML Scheam允许指定某个元素或属性的值在一定得范围内是唯一的。为了指定元素或属性值的唯一性,可以使用元素,使用方法为选择一组xml示例元素作为范围,然后依据上下文关系定义一个field,这里的field就是要指定的唯一性的元素或属性。 1、元素唯一性xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema
2014-03-09 20:53:38
4831
转载 XML文件中xsi:schemaLocation声明
xsi:schemaLocation详解在实例中引用模式文档XML Schema提供了两个在实例文档中使用的特殊属性,用于指出模式文档的位置。这两个属性是:xsi:schemaLocation和xsi:noNamespaceSchemaLocation,前者用于声明了目标名称空间的模式文档,后者用于没有目标名称空间的模式文档,它们通常在实例文档中使用。4.5.7.1 xsi:sc
2014-03-08 22:09:04
4393
转载 MFC控件积累——CRichEdit控件
1.Rich Edit的字体问题在richedit20下,设置字体为某中文字体(比如楷体),输入汉字确实是楷体,但是一旦输入英文字符(在任何位置),这些英文字符字体立即变成了Arial字体(而且有意思的是,如果再输入汉字,汉字仍然是楷体的)。这不是bug,这是RichEdit2.0的特性。 Dual-font: support The keyboard can
2014-02-25 20:15:43
2736
转载 select函数详解及应用
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方
2014-02-19 15:59:27
1247
转载 MFC线程同步——CEvent的使用
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。CEvent 类提供了对事件的支持。事件是一个允许一个线程在某种情
2014-02-18 14:14:45
11057
转载 MFC中的线程同步
在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题
2014-02-18 13:53:57
893
转载 关于绑定IP地址与端口号的见解
客户和服务器通过调用函数bind时可以指定IP地址或端口号,可以都指定,也可以都不指定,根据期望的结果,对sin_addr和sin_port,或sin6_addr和sin6_port应置为什么值,下面做了总结:进程指定结果IP地址端口通配地址0内核选择IP地址和端口通配地址非0内核选择IP地址,进程指定端口本地IP地址0进程指定IP地址,内核选择
2014-02-13 09:46:15
3749
转载 客户端 用不用 bind 的区别
连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。 Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024是
2014-02-12 20:19:35
789
转载 TCP/IP和Socket的关系
要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和
2014-02-12 16:54:31
737
转载 TCP.普通socket(阻塞/非阻塞)模型
在此介绍window下的TCP普通socket编程.1.服务器端// CommonSocket.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "winsock2.h"#pragma comment(lib, "Ws2_32.l
2014-02-12 16:29:29
857
转载 Socket的阻塞模式和非阻塞模式
阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。在阻塞模式的套接字上,调用任何一个Windows Sockets API都会耗费不确定的等待时间。图所示,在调用
2014-02-12 16:00:33
776
原创 MFC控件积累——CContextMenuManager控件
1.使用VS2010或VS2008SP1提供的CMFCxxxx框架时,弹出菜单的调用发生了变化,但与之前使用CMenu产生弹出菜单相同的是都是响应窗口的WM_CONTEXTMENU消息中进行。2.使用CContextMenuManager产生的弹出菜单比CMenu产生的弹出菜单漂亮。3.不要继承或者手动实例化CContexMenuManager类,通过CWinAppEx::GetConte
2014-01-23 13:38:02
2869
1
转载 MFC控件积累——CFormView控件
CFormView是CView类的派生类,在CFormView类里可以放很多控件,可以看做是在CView中放置了一个对话框的集合体,这样可以直观地用资源创建View(并且必须用一个对话框资源去创建)。
2014-01-16 20:02:43
1978
转载 What static_cast<> is actually doing
IntroductionMost programmers learn C before C++, and get used to C style casting. When writing C++, sometimes we may be confused about when to use static_cast and when to use reinterpret_cast. I
2014-01-15 19:57:58
826
原创 CodeProject上的一些摘抄
1.问题:控件只读但不要背景变灰。 解决方案:(1)重载控件的WM_CTLCOLOR消息响应(ON_WM_CTLCOLOR_REFLECT())HBRUSH CReadOnlyEdit::CtlColor(CDC* pDC, UINT nCtlColor) { // TODO: Return a non-NULL brush if the paren
2014-01-15 19:09:21
818
转载 boost库中的智能指针向上转换
这里稍微解释下何谓指针类型的向下转换和向上转换。向下转换是指派生类指针转换为基类指针类型,向上转换是指基类指针类型转换为派生类类型。C++一般使用dynamic_cast转换符实现向上转换。智能指针可以毫无问题的进行向下类型转换,却不能使用dynamic_cast进行向上类型转换。例如:[cpp] view plaincopy#include
2014-01-14 14:13:23
887
转载 c++ shared_ptr智能指针使用注意事项
shared_ptr在boost中地位相当重要,其行为最接近原始指针,但又比指针更加安全,甚至还能提供基本的线程安全保证。它基本上解决了在使用c++开发过程中不可避免的使用指针而遇到的许多问题,常见的毫无疑问是内存泄漏和内存的提前释放,还有一些关于指针内存申请而产生的异常问题等。而要想较好的使用shared_ptr来完全取代指针绝非易事。下面简要说说使用shared_ptr需要注意的问题。
2014-01-14 14:11:55
1455
转载 C++ - 在容器(container)中 使用继承(inheritance)和虚函数(virtual function)
容器不支持混合类型, 如果直接把派生类对象, 存入基类容器中, 则无法使用派生-基转换(derived-base conversion);因为转换只能发生在指针和引用 过程中, 不能发生在 对象直接赋值, 如果是直接转换, 则会产生截断(sliced down);即派生类部分被切除, 只留下基类部分; 所以存入容器中的派生类 输出为基类部分 的虚函数;如果想在容器中, 进行
2014-01-14 14:08:33
791
转载 enable_shared_from_this和shared_from_this
shared_from_this()是enable_shared_from_this的成员 函数,返回shared_ptr。首先需要注意的是,这个函数仅在shared_ptr的构造函数被调用之后才能使 用。原因是enable_shared_from_this::weak_ptr并不在构造函数中设置,而是在shared_ptr的 构造函数中设置。 如下代码是错误的:cla
2014-01-14 10:34:28
1117
原创 项目中的设计亮点记录
1.当用到很多种树形数据结构时,虽然这些树形数据结构包含的数据类型或者内容不尽相同,但他们在“树形”方面有很多共性,应该抽象到它们的基类中,这样可以用它们共有“树节点”基类去进行树形数据的共同操作,这个是一种大大减少代码量的抽象方法。
2014-01-14 10:32:52
3890
转载 十步完全理解SQL
很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。我们每天都在写 SQL 并且应用在开源软件 jOOQ 中。于是我想把 SQL 之美介绍给那些仍然对它头疼不已的朋友,所以本文是为了以下读者而特地编写的:1、 在工作中会用到 SQL
2014-01-12 20:05:56
617
转载 TCP协议连接建立与连接断开过程(含断开时的TCP状态图)
TCP协议连接建立时3次握手的过程。简述TCP协议连接建立时3次握手的过程。根据TCP头部,说明下列3个包在连接建立过程中的次序.0020 00 50 83 aa 46 49 3e dd 33 96 37 a3 a0 12 ...P..FI>.3.7...0030 16 a0 c4 c0 00 00 02 04 05 b4 04 02 08
2014-01-09 15:19:37
1120
原创 MFC控件积累——CTreeCtrl控件
1.树控件插入节点:(1)HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct );(2)HTREEITEM InsertItem( UINT nMask,LPCTSTR lpszItem,int nImage,int nSelectedImage,UINT nState,UINT nStateMask,LPAR
2014-01-07 15:52:15
895
转载 MFC消息响应知识积累
1.关于消息响应函数中的WPARAM和LPARAM:在VC的函数参数中常出现WPARAM和LPARAM,这两个有什么特殊意义么?它们的含义是不是要事先定义? WPARAM和LPARAM一般在消息里面用的很多,其实没有特殊的含义的。 是两普通的变量 。 是怎样通过wParam,lParam传参数的呢?有时候表示点的坐标,有时
2014-01-06 10:26:29
694
原创 MFC控件积累——CMFCToolBar工具栏控件
在界面上经常用到创建多个工具栏的情况,但MFC自动生成的代码只创建了一个工具栏,经过我摸索,创建多个工具栏应注意以下问题:1.CMFCToolBarl类或其继承类对象创建应使用CreateEx()函数: virtual BOOL CreateEx( CWnd* pParentWnd, /* 父窗口,CFrameWndEx对象 */ DWORD dwCtrlSt
2014-01-03 10:24:06
4327
原创 MFC控件积累——CDockablePane控件
1.控制多个CDockablePane停靠在一起时,先停靠一个窗口:DockPane(&m_dockPane1);//使用CFrameWndEx::DockPane() void DockPane( CBasePane* pBar, //A pointer to the control bar to be docked. UINT nDockBarID=0
2014-01-02 20:30:34
5036
转载 socket选项自带的TCP异常断开检测
TCP异常断开是指在突然断电,直接拔网线等等情况下,如果通信双方没有进行数据发送通信等处理的时候,无法获知连接已经断开的情况. 在通常的情况下,为了使得socket通信不受操作系统的限制,需要自己在应用层实现心跳包机制,来检查异常断开的情况,一般的方式就是服务器在一段时间没有收到客户端数据包时,定时发包,然后客户端回应,如果已经出现异常断开则服务器接收会返回错误,而客户端在指定时间内没有收到
2014-01-02 16:35:31
983
原创 继续总结CWinThread实现多线程的问题
1.CWinThread的继承类实现的多线程或者AfxBeginThread()创建的用户界面线程,在结束的时候通过WM_QUIT消息退出消息循环,这样就要求在线程退出时消息循环仍然不能出错,而对于没有显式设定主窗口的子线程默认会将主线程的主窗口(CMainFrame)设定为自己的主窗口,因此要求子线程在退出时主窗口仍然有效(因为在消息循环中有断言ASSERT(::IsWindow(m_pMain
2013-12-31 11:30:20
4173
2
原创 MFC开发中的多线程封装
MFC开发中的多线程封装目录一、 基本知识:... 11. 线程的启动与结束... 11) 线程的启动... 12) 线程的结束... 23) 深入剖析线程的创建与结束函数... 24) 启动与结束的封装:... 22. 线程的执行过程... 41) 线程对象的
2013-12-27 19:45:26
1927
转载 MFC不能多线程操作控件的原因
对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: 1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! 2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应
2013-12-27 14:52:17
3298
GOOSE数据包ASN.1/BER数据编解码程序
2013-10-28
VC工程文件转换QT工程文件(python脚本)
2013-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人