<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[人在旅途/章鸽  的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/geeeeeeee</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; geeeeeeee]]></copyright><item><title><![CDATA[Tomcat Server的组成]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6803691</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6803691</guid><author>geeeeeeee</author><pubDate>Fri, 23 Sep 2011 13:48:35 +0800</pubDate><description><![CDATA[1 - Tomcat Server的组成部分 

1.1 - Server 
A Server element represents the entire Catalina servlet container. (Singleton) 
1.2 - Service 
A]]></description><category></category></item><item><title><![CDATA[软件架构设计]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6573603</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6573603</guid><author>geeeeeeee</author><pubDate>Tue, 28 Jun 2011 20:59:00 +0800</pubDate><description><![CDATA[软件架构是具有一定形式的结构化元素，即构件的集合，包括处理构件、数据构件和连接构件。而架构问题包括总体组织和全局控制、通信协议、同步、数据存取，给设计元素分配特定功能，设计元素的组织，规模和性能，在各设计方案间进行选择等。 一、软件架构建模：1、结构模型:以架构的构件、连接件和其他概念来刻画结构2、框架模型：比结构模式更侧重整体3、动态模型：对结构模式和框架模型的补充，研究系统“大]]></description><category></category></item><item><title><![CDATA[MVC框架]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6573501</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6573501</guid><author>geeeeeeee</author><pubDate>Tue, 28 Jun 2011 20:00:00 +0800</pubDate><description><![CDATA[    MVC (Model View Controler)本来是存在于Desktop程序中的，M是指数据模型，V是指用户界面，C则是控制器。使用MVC的目的是将M和V的实现代码分离，从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步，一旦M改变，V应该同步更新。      MVC强制性的使应用程序的输入、处理和输出分开]]></description><category></category></item><item><title><![CDATA[MFC框架中对最近文件列表的支持 ]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6566704</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6566704</guid><author>geeeeeeee</author><pubDate>Fri, 24 Jun 2011 22:43:00 +0800</pubDate><description><![CDATA[MFC建立的标准框架程序中有记录最近操作文件的能力，这些最近文件的路径被记录到注册表，在程序运行时，又将添加到文件菜单中。   在CWinApp中有个   CRecentFileList*   m_pRecentFileList;指针管理这些信息。   以下对此过程进行分析，采用类似的方法，可以保存其他一些固定条数的最近数据。   1.CRecentFileList对象的建立,记录读入]]></description><category></category></item><item><title><![CDATA[GDI+编程基础（一）GDI+ Vs GDI]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6566540</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6566540</guid><author>geeeeeeee</author><pubDate>Fri, 24 Jun 2011 20:29:00 +0800</pubDate><description><![CDATA[一、GDI　　GDI是位于应用程序与不同硬件之间的中间层，这种结构让程序员从直接处理不同硬件的工作中解放出来，把硬件间的差异交给了GDI处理。GDI通过将应用程序与不同输出设备特性相隔离，使Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。例如，我们可以在不改变程序的前提下，让能在Epson点式打印机上工作的程序也能在激光打印机上工作。它把windows系统中的图形]]></description><category></category></item><item><title><![CDATA[ON_COMMAND_EX  ON_COMMAND]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6566015</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6566015</guid><author>geeeeeeee</author><pubDate>Fri, 24 Jun 2011 16:06:00 +0800</pubDate><description><![CDATA[ON_COMMAND  命令消息普通映射宏ON_COMMAND_EX  命令消息扩展映射宏扩展映射宏和对应的普通映射宏的参数个数相同，含义一样。但是扩展映射宏的消息处理函数的原型和对应的普通映射宏相比，有两个不同之处：一是多了一个UINT类型的参数，另外就是有返回值（返回BOOL类型）。回顾4.4.2章节，范围映射宏ON_COMMAND_RANGE的消息处理函数也有一个这样的参]]></description><category></category></item><item><title><![CDATA[OnBarCheck   ON_COMMAND_EX]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6565956</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6565956</guid><author>geeeeeeee</author><pubDate>Fri, 24 Jun 2011 15:49:00 +0800</pubDate><description><![CDATA[  CFrameWnd提供了OnBarCheck来响应与ID_VIEW_STATUS_BAR、ID_VIEW_TOOLBAR菜单项对应的命令。 消息映射： ON_COMMAND_EX(ID_VIEW_STATUS_BAR,   OnBarCheck) ON_COMMAND_EX(ID_VIEW_TOOLBAR,   OnBarCheck) 这里，使用了扩展命令消息映射宏把ID_VIEW]]></description><category></category></item><item><title><![CDATA[windows内核对象 ]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564661</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564661</guid><author>geeeeeeee</author><pubDate>Thu, 23 Jun 2011 23:34:00 +0800</pubDate><description><![CDATA[有哪些内核对象？如下：存取符号对象、事件对象、文件对象、文件映射对象、I / O 完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程对象和等待计时器对象等。这些对象都是通过调用函数来创建的。 什么是内核对象？内核对象只是内核分配的一个内存块，并且只能由该内核访问。该内存块是一种数据结构，它的成员负责维护该对象的各种信息。有些数据成员（如安全性描述符、使用]]></description><category></category></item><item><title><![CDATA[WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564420</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564420</guid><author>geeeeeeee</author><pubDate>Thu, 23 Jun 2011 21:05:00 +0800</pubDate><description><![CDATA[ WM_KEYDOWN和WM_CHAR都是键盘消息。TranslateMessage函数已经将按键消息转换成字符消息了，那么WndProc函数中需要对事件进行选择。如：键入“D”键，就应该选择WM_CHAR，因为WM_CHAR 只是字母，不包含特殊字符如Ctrl等。如果键盘键入的是“Ctrl+D”，则应该选择WM_KEYDOWN，因为WM_KEYDOWN既包含字母也包含特殊字符。       WM]]></description><category></category></item><item><title><![CDATA[线程与消息队列 ]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564405</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564405</guid><author>geeeeeeee</author><pubDate>Thu, 23 Jun 2011 20:56:00 +0800</pubDate><description><![CDATA[当一个线程第一次被创建时，系统假定线程不会用于任何与用户相关的任务。这样可以减少线程对系统资源的要求。但是，一旦该线程调用一个与图形用户界面有关的函数 ( 如检查它的消息队列或建立一个窗口 )，系统就会为该线程分配一些另外的资源，以便它能够执行与用户界面有关的任务。特别是，系统分配了一个THREADINFO结构，并将这个数据结构与线程联系起来。 THREADINFO结构体如下： 1.将消息发送到线]]></description><category></category></item><item><title><![CDATA[CView]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564386</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6564386</guid><author>geeeeeeee</author><pubDate>Thu, 23 Jun 2011 20:38:00 +0800</pubDate><description><![CDATA[文档负责了数据真正在永久介质中的存储和读取工作，视图呈现只是将文档中的数据以某种形式向用户呈现，因此一个文档可对应多个视图。 Invalidate(TRUE)将整个窗口设置为需要重绘的无效区域，它会产生WM_PAINT消息，这样OnDraw将被调用。 void CView::OnPaint() { 　　// CPaintDC类维护显示设备 　　CPaintDC dc(this)]]></description><category></category></item><item><title><![CDATA[MFC中的消息处理/AfxWndProc/WM_COMMAND路由]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6561455</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6561455</guid><author>geeeeeeee</author><pubDate>Wed, 22 Jun 2011 16:32:00 +0800</pubDate><description><![CDATA[窗口消息概述:     所有的窗口消息的基本形式都是一样的,有3个部分:(1).一个无符号整数,包含消息的实际内容.(2)WPARAM,一个4字节整数.(3)LPARAM,一个4字节参数.无符号数是实际消息.     含MFC在内的任何WINDOWS程序的核心都是消息泵.消息泵是一个循环,它取出消息并将消息送给恰当的窗口消息处理函数.下面是个消息泵的示例:     while(GetMessage]]></description><category></category></item><item><title><![CDATA[关于FD_WRITE、FD_READ]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/6559636</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/6559636</guid><author>geeeeeeee</author><pubDate>Tue, 21 Jun 2011 20:58:00 +0800</pubDate><description><![CDATA[只有在三种条件下，才会发出FD_WRITE通知：■ 使用connect或WSAConnect，一个套接字首次建立了连接。■ 使用accept或WSAAccept，套接字被接受以后。■ 若send、WSASend、sendto或WSASendTo操作失败，返回了WSAEWOULDBLOCK错误，而且缓冲区的空间变得可用因此，作为一个应用程序，自收到首条FD_WRITE消息开始，便应认为自己必然能]]></description><category></category></item><item><title><![CDATA[WPF学习摘要09.09.03]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/4516483</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/4516483</guid><author>geeeeeeee</author><pubDate>Thu, 03 Sep 2009 18:12:00 +0800</pubDate><description><![CDATA[学习课程摘自 MSDN/.net开发中的 WindowsPresentationFoundation===1、概述===WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎，旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心，这些功能包括 可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包]]></description><category></category></item><item><title><![CDATA[Effective C++摘要《第7章：杂项 真正认识C++》20090210]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/3874592</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/3874592</guid><author>geeeeeeee</author><pubDate>Tue, 10 Feb 2009 16:32:00 +0800</pubDate><description><![CDATA[===条款45: 弄清C++在幕后为你所写、所调用的函数===一个空类什么时候不是空类？ ---- 当C++编译器通过它的时候。如果你没有声明下列函数，体贴的编译器会声明它自己的版本。这些函数是：一个拷贝构造函数，一个赋值运算符，一个析构函数，一对取址运算符。另外，如果你没有声明任何构造函数，它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说，如果你这么写：class Empty{}]]></description><category></category></item><item><title><![CDATA[Effective C++摘要《第6章：继承和面向对象设计》20090210]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/3872420</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/3872420</guid><author>geeeeeeee</author><pubDate>Tue, 10 Feb 2009 01:46:00 +0800</pubDate><description><![CDATA[===条款35: 使公有继承体现 "是一个" 的含义===当写下类D（"Derived" ）从类B（"Base"）公有继承时，你实际上是在告诉编译器（以及读这段代码的人）：类型D的每一个对象也是类型B的一个对象，但反之不成立；class Student: public Person { ... };在C++世界中，任何一个其参数为Person类型的函数（或指针或引用）可以实际取一个Student对]]></description><category></category></item><item><title><![CDATA[体验C++中接口与实现分离的技术]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/3871671</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/3871671</guid><author>geeeeeeee</author><pubDate>Mon, 09 Feb 2009 21:11:00 +0800</pubDate><description><![CDATA[在用C++写要导出类的库时，我们经常只想暴露接口，而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明，类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与实现分离的技术。　　下面用一个最简单的例子来说明。　　类ClxExp是我们要导出的类，其中有一个私有成员变量是ClxTest类的对象，各个文件内容如下： 　　lxTest.h文件内容：]]></description><category></category></item><item><title><![CDATA[Effective C++摘要《第5章：类和函数：实现》20090209]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/3871512</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/3871512</guid><author>geeeeeeee</author><pubDate>Mon, 09 Feb 2009 19:14:00 +0800</pubDate><description><![CDATA[===条款29: 避免返回内部数据的句柄===假设b是一个const string对象：class string {public:  string(const char *value);        // 具体实现参见条款11  ~string();                        // 构造函数的注解参见条款m5  operator char *() const;        ]]></description><category></category></item><item><title><![CDATA[Effective C++摘要《第4章：类和函数：设计与声明》20090209]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/3870392</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/3870392</guid><author>geeeeeeee</author><pubDate>Mon, 09 Feb 2009 13:38:00 +0800</pubDate><description><![CDATA[===条款18: 争取使类的接口完整并且最小======条款19: 分清成员函数，非成员函数和友元函数===结论：假设f是想正确声明的函数，c是和它相关的类·虚函数必须是成员函数。如果f必须是虚函数，就让它成为c的成员函数。·operator>>和operator>或operator·只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换，让f成为非成员函数。如果f还需要访]]></description><category></category></item><item><title><![CDATA[Effective C++摘要《第3章：构造函数、析构函数、赋值操作符》20090207]]></title><link>https://blog.youkuaiyun.com/geeeeeeee/article/details/3867951</link><guid>https://blog.youkuaiyun.com/geeeeeeee/article/details/3867951</guid><author>geeeeeeee</author><pubDate>Sat, 07 Feb 2009 21:49:00 +0800</pubDate><description><![CDATA[===条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符===对于有些类，当实现拷贝构造函数和赋值操作符非常麻烦的时候，特别是可以确信程序中不会做拷贝和赋值操作的时候，去实现它们就会相对来说有点得不偿失。这种情况下，很简单，照本条款的建议去做：可以只声明这些函数（声明为private成员）而不去定义（实现）它们这就防止了会有人去调用它们，也防止了编译器去生成它们===条款12:]]></description><category></category></item></channel></rss>