<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gencheng的专栏]]></title><description><![CDATA[主要讨论VC++、Delphi语言在实际开发遇到的各种问题....]]></description><link>https://blog.youkuaiyun.com/gencheng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gencheng]]></copyright><item><title><![CDATA[三大MSG宏]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/90476012</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/90476012</guid><author>gencheng</author><pubDate>Thu, 23 May 2019 10:41:05 +0800</pubDate><description><![CDATA[//afxwin.h

struct AFX_MSGMAP
{
 const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
 const AFX_MSGMAP_ENTRY* lpEntries;
};

struct AFX_MSGMAP_ENTRY
{
 UINT nMessage;  // windows message
 UINT ...]]></description><category></category></item><item><title><![CDATA[MFC消息处理调用过程]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/90475993</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/90475993</guid><author>gencheng</author><pubDate>Thu, 23 May 2019 10:39:24 +0800</pubDate><description><![CDATA[1.窗口创建的时候调用CWnd::CreateEx()
CWnd::CreateEx()
--&gt;AfxHookWindowCreate() //安装一个WH_CBT钩子
--&gt;_AfxCbtFilterHook() //::SetWindowsHookEx(WH_CBT,_AfxCbtFilterHook, NULL, ::GetCurrentThreadId());

2.钩子安...]]></description><category></category></item><item><title><![CDATA[AFX_PMSG数据结构]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/90475930</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/90475930</guid><author>gencheng</author><pubDate>Thu, 23 May 2019 10:37:32 +0800</pubDate><description><![CDATA[AFX_PMSG数据结构
　　定义： typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);
　　
　　void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void); //AFX_MSG_CALL定义为空，只为强调是MSG_CALL
　　
　　void (CCmdTarget::*AFX_PMSG)(vo...]]></description><category></category></item><item><title><![CDATA[仿制金山毒霸专杀工具界面实现源码]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/81267949</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/81267949</guid><author>gencheng</author><pubDate>Sun, 29 Jul 2018 09:38:01 +0800</pubDate><description><![CDATA[网上有仿制金山毒霸专杀工具界面的实现方法，详见http://www.vckbase.com/module/articleContent.php?id=306
但却没有完整的实现源码，这次我认真了，花了几天时间把它详细的实现出来。

我把原来的金山毒霸专杀工具exe文件也打包上来了，方便你对照修改程序设计效果。如果你有兴趣也可以从它提取出原始资源文件。

源码：https://download.cs...]]></description><category></category></item><item><title><![CDATA[MFC数据交换和数据校验核心类CDataExchange]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/80924370</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/80924370</guid><author>gencheng</author><pubDate>Thu, 05 Jul 2018 11:36:24 +0800</pubDate><description><![CDATA[//===============类申明===============================class CDataExchange{// Attributespublic:	BOOL m_bSaveAndValidate;   // TRUE =&amp;gt; save and validate data  读写方向标志	CWnd* m_pDlgWnd;           // contai...]]></description><category></category></item><item><title><![CDATA[try catch throw用法]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/44806875</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/44806875</guid><author>gencheng</author><pubDate>Wed, 01 Apr 2015 14:53:01 +0800</pubDate><description><![CDATA[原贴：http://blog.youkuaiyun.com/sky04/article/details/6536011


要防止因为异常产生的内存泄漏，可以使用智能指针，也可以用 
__try 
{ 
} 
__finally 
{ 
} 
《Windows核心编程》一书第23~25章是很好的参考资料。
-----------------------------------------]]></description><category></category></item><item><title><![CDATA[重载数组下标操作符，使用operator]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/44806777</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/44806777</guid><author>gencheng</author><pubDate>Wed, 01 Apr 2015 14:43:39 +0800</pubDate><description><![CDATA[重载数组下标操作符，使用operator


原贴：http://blog.youkuaiyun.com/keeplooking2510/article/details/8042057

    数组在类的定义中确定好了长度之后，就会限制所要存储的元素的个数，假如我们要存储的元素的个数超过了已确定的数组的长度，那么就会导致数组越界。故最好的办法就是在创建对象的时候才确定要存储元素的个数，即数组的长度]]></description><category></category></item><item><title><![CDATA[CPaintDC类与 CClientDC类的区别]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/17354121</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/17354121</guid><author>gencheng</author><pubDate>Mon, 16 Dec 2013 15:43:14 +0800</pubDate><description><![CDATA[CPaintDC 与 CClientDC

　　CPaintDC 与 CClientDC都是从CDC类继承而来。所以，这两个类的外在行为高度的抽象一致。以致于初者会误以为两者的使用可以替换(或者说MFC初学者很容易将两者的使用混淆)。事实上，MFC将两者都从CDC继承，是为了让用户在不同的场景下更加方便，高效的使用DC。如果不理解两者内部运作原理，混淆使用，就会出现屏幕绘制不能达到客户调用结果]]></description><category></category></item><item><title><![CDATA[不用写一行代码，用MFC向导实现的文本编辑器(类似Windows下的记事本)]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/17091915</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/17091915</guid><author>gencheng</author><pubDate>Tue, 03 Dec 2013 10:35:12 +0800</pubDate><description><![CDATA[不用写一行代码，用MFC向导实现的文本编辑器(类似Windows下的记事本)
源码下载：http://download.youkuaiyun.com/detail/gencheng/6647927


　　这个东西是给懒人准备的，没有写一行代码，只是用应用程序向导（AppWizard）和资源编辑器加了个菜单和图标，就完成了一个文本编辑器，它实现了“文件”菜单下的新建、打开、保存、另存为、页面设置、打印]]></description><category></category></item><item><title><![CDATA[MFC中的Dump示例]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/16981361</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/16981361</guid><author>gencheng</author><pubDate>Wed, 27 Nov 2013 10:47:56 +0800</pubDate><description><![CDATA[测试代码：// trace.cpp

#include 
#include 

// Define the application class
class CApp : public CWinApp
{
public:
	virtual BOOL InitInstance();
};

CApp App;  

// Define the window class
class CWindow :]]></description><category></category></item><item><title><![CDATA[VC获取应用程序路径]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/16960119</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/16960119</guid><author>gencheng</author><pubDate>Tue, 26 Nov 2013 10:05:04 +0800</pubDate><description><![CDATA[http://lw1957625.blog.163.com/blog/static/53634885201032472034979/
VC获取应用程序路径

//获取应用程序所在路径
CString CLogFile::GetFilePath()
{
      CString m_FilePath;
      GetModuleFileName(NULL,m_FilePath.G]]></description><category></category></item><item><title><![CDATA[字体序列化保存读写]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/16947109</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/16947109</guid><author>gencheng</author><pubDate>Mon, 25 Nov 2013 17:02:48 +0800</pubDate><description><![CDATA[字体序列化保存读写
　　在实际开发中，程序中经常需要用到保存窗口大小、窗口位置、字体设置功能，以便程序在下次运行后，自动恢复上次的用户的使用设置(比如窗口的大小、位置、字体等等)，这样做会给用户带来良好的软件操作体验，提高用户的使用满意度。
　　软件配置的读取，可以采用多种方法实现：数据库、INI文件、注册表等都可以实现。不过，在VC开发中，使用MFC的序列化机制大概是所有方法中最方便、最好用]]></description><category></category></item><item><title><![CDATA[MFC Windows 编程符号]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/16341909</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/16341909</guid><author>gencheng</author><pubDate>Fri, 15 Nov 2013 16:31:04 +0800</pubDate><description><![CDATA[MFC Windows 编程符号

　　这些符号也是 MFC 支持文件的组成部分，但它们支持标准的 Windows 应用程序功能和操作。 这些符号主要用于菜单。 当在菜单编辑器中处理菜单时，这些符号将出现在与公共菜单命令关联的“属性”窗口中。 例如，如果应用程序具有带“退出”命令的“文件”菜单，该命令将与“属性”窗口中的符号 ID_APP_EXIT 关联。

ID_APP_ABOUT
I]]></description><category></category></item><item><title><![CDATA[AppWizard向导产生的MFC框架中文件菜单项动作的缺省处理行为]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/16338003</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/16338003</guid><author>gencheng</author><pubDate>Fri, 15 Nov 2013 11:35:32 +0800</pubDate><description><![CDATA[AppWizard向导产生的MFC框架中文件菜单项动作的缺省处理行为

　　可能大家用AppWizard向导后会有一个疑惑，AppWizard向导产生的菜单，比如“文件”菜单，我们没写一行代码，但却自动实现了相应的功能，它是怎么实现的？我们只能知道一个常识：一定是MFC框架在幕后做了一些事情，所以才会实现这些功能，这些功能自己是不会从天上掉下来的。
　　你应该知道，AppWizard向导产生]]></description><category></category></item><item><title><![CDATA[查找（替换）对话框在VC中的使用]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/13293707</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/13293707</guid><author>gencheng</author><pubDate>Mon, 28 Oct 2013 15:06:57 +0800</pubDate><description><![CDATA[查找（替换）对话框在VC中的使用


1.弹出查找（替换）对话框
   CString findString;
   findReplaceDialog = new CFindReplaceDialog;
   findReplaceDialog->Create( TRUE, findString, "" );
   
  


2.如何实现在点击上图对话框中的“查找下一个”]]></description><category></category></item><item><title><![CDATA[Bit、Byte、Word、DWord之间的关系]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/12994169</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/12994169</guid><author>gencheng</author><pubDate>Thu, 24 Oct 2013 10:29:31 +0800</pubDate><description><![CDATA[Bit、Byte、Word、DWord之间的关系


Bit：位   
 字长 1
 范围：0，1


Byte： 字节 
 字长 8
 范围：0~255


Word:  字 
 字长 16
 范围：0~65535


Dword: 双字 
 字长 32
 范围：0~4294967296


换算关系：  
  1Dword = 2Word]]></description><category></category></item><item><title><![CDATA[MFC消息处理宏和消息处理函数原型]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/12744863</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/12744863</guid><author>gencheng</author><pubDate>Tue, 15 Oct 2013 09:15:59 +0800</pubDate><description><![CDATA[ON_COMMAND(, )
afx_msg void memberFxn();


ON_COMMAND_EX(, )
afx_msg BOOL memberFxn(UINT);


ON_COMMAND_EX_RANGE(, , )
afx_msg BOOL memberFxn(UINT);


ON_COMMAND_RANGE(, , )
afx_msg void ]]></description><category></category></item><item><title><![CDATA[MFC框架中消失的WinMain()]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/12676021</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/12676021</guid><author>gencheng</author><pubDate>Sun, 13 Oct 2013 09:31:18 +0800</pubDate><description><![CDATA[学过一段时间的MFC之后，很多人大概都有一个疑问：在MFC中，WinMain()哪去了？因为任何一个使用过Win32 SDK编程的人都知道，WinMain()函数是Win32程序开始的入口点，可是在MFC的框架使用中，一般我们只知道从CWinApp类继承得到一个新类，然后重写InitInstance()虚函数，程序框架就可以运行了。哪么，在MFC中，WinMain()倒底去哪了？
　　似乎微软就]]></description><category></category></item><item><title><![CDATA[MFC六大关键技术]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/12654051</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/12654051</guid><author>gencheng</author><pubDate>Sat, 12 Oct 2013 16:43:15 +0800</pubDate><description><![CDATA[MFC六大关键技术
原文链接：http://blog.youkuaiyun.com/master_max/article/details/1540204

MFC六大关键技术之初始化过程
我并不认为MFC减轻了程序员们的负担，MFC出现的目的虽然似乎是为了让程序员不用懂得太多就可以进行视窗编程，但本人在MFC里徘徊了很久很久（因为那时没有书本详细介绍MFC的原理），毫无收获。可能朋友们会说，怎么一定要]]></description><category></category></item><item><title><![CDATA[绘图基础--橡皮筋画线]]></title><link>https://blog.youkuaiyun.com/gencheng/article/details/11901259</link><guid>https://blog.youkuaiyun.com/gencheng/article/details/11901259</guid><author>gencheng</author><pubDate>Sun, 22 Sep 2013 16:21:32 +0800</pubDate><description><![CDATA[绘图基础--橡皮筋画线
橡皮筋画线:用户点击鼠标左键定下一个起点，然后把鼠标拖到目标终点，这时程序就会在起始点间画线。




// rubber.cpp

#include 

// Define the application class
class CApp : public CWinApp
{
public:
	virtual BOOL InitInstance();
};

]]></description><category></category></item></channel></rss>