<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[博雅宇轩]]></title> 
<link>http://www.lewensky.cn/index.php</link> 
<description><![CDATA[Lewen的软件世界]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[博雅宇轩]]></copyright>
<item>
<link>http://www.lewensky.cn/read.php/231.htm</link>
<title><![CDATA[VC++:如何将程序最小化到托盘]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Tue, 16 Jun 2009 00:33:18 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/231.htm</guid> 
<description>
<![CDATA[ 
	所谓的“托盘”，在Windows系统界面中，指的就是下面任务条右侧，有系统时间等等的标志的那一部分。在程序最小化或挂起时，但有不希望占据任务栏的时候，就可以把程序放到托盘区。其实，托盘区的编程很简单，下面简要阐述一下子喽^_^ <br/><br/>二、托盘编程相关函数 <br/><br/>其实呢，把程序放到托盘上的本质就是先在托盘区绘制一个图标，然后把程序隐藏不见，再对托盘的图标进行消息处理，就可以了。 <br/><br/>绘制图标以及确定图标所传送消息的函数只有一个，那就是—————— <br/><br/>WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( <br/>DWORD dwMessage, <br/>PNOTIFYICONDATA pnid <br/>); <br/><br/>这个函数呢，负责向系统传递消息，以添加、修改或删除托盘区的图标。她的返回值呢，是个布尔类型的。就是说，如果返回0，那就是成仁啦，非0才成功。 <br/><br/>参数dwMessage 是表示这个函数的应用功能是哪一方面，是添加、删除，还是修改图标。如果是添加，则它的值为NIM_ADD；删除则是NIM_DELETE；而修改是NIM_MODIFY。参数pnid就是具体的和程序在托盘区的图标有关系的结构了。它的定义如下： <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E7%25A8%258B%25E5%25BA%258F/" rel="tag">程序</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%2589%2598%25E7%259B%2598/" rel="tag">托盘</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/230.htm</link>
<title><![CDATA[在非MFC程序中引用CString]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 12 Jun 2009 01:21:12 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/230.htm</guid> 
<description>
<![CDATA[ 
	作者：阿半<br/>　　CString在当今软件设计界里还是小有名气的，说它是MFC中使用的最多的类一点也不过，然而在使用sdk编windows程序的时候，确不能利用CString类，只能用sdk的运行时库，比如strlen，strcpy，strstr等等，本文讨论的是在非mfc程序中使用CString类的方法，算是个引子，如果有更好的实现方法，欢迎大家讨论。<br/>　　为了使用CString类，首先源文件必须是以cpp结尾的，这是因为vc默认对不同的扩展名采用不同的编译方法和错误检查，mfc的支持文件Afx.h只有由cpp为扩展名的文件包含才能够正常编译。对于exe和库要采用不同的方式。下面分别讨论：<br/><br/>一、在非dll或者lib的工程里，使用CString非常容易，只要两步：<br/><br/>1、对于没有包含<Windows.h>的stdafx.h中，只要包含了afx.h即可，而对于已经包含了<windows.h>的stdafx.h, 一定需要保证afx.h在windows.h之前被包含。另外由于默认的控制台程序采用的单线程运行库，我们要把它改成多线程库，这些工作只要在stdafx.h中进行修改就可以了（详细信息可以参考候捷的<<mfc 深入浅出>>），我使用的一个stdafx.h的例子如下（这是一个从向导生成的win32位GUI的程序的stdafx.h修改的）： <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/mfc/" rel="tag">mfc</a> , <a href="http://www.lewensky.cn/go.php/tags/cstring/" rel="tag">cstring</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/217.htm</link>
<title><![CDATA[VC+ADO动态创建Access数据库]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 27 May 2009 15:47:15 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/217.htm</guid> 
<description>
<![CDATA[ 
	<br/>ado技术目前已经成为连接数据库的主流技术，下面我来介绍如何使用ado来动态创建access数据库。<br/>为了使用ado，必须引入微软的两个动态连接库msadox.dll和msado15.dll：<br/><span style="color: #ff1493;">#pragma warning (disable: 4146)<br/>#import "c:&#92;Program Files&#92;Common Files&#92;system&#92;ado&#92;msadox.dll"<br/>#import "c:&#92;Program Files&#92;Common Files&#92;system&#92;ado&#92;msado15.dll" no_namespace rename("EOF", "EndOfFile")<br/>#pragma warning (default: 4146)</span><br/>将上述代码加入到stdafx.h文件中，由于ado是com组件，因此使用ado之前还要初始化com环境：<br/><span style="color: #ff1493;">CoInitialize(NULL);</span><br/>下面是一个在access数据库中创建表的sql语句的例子：<br/>create table test<br/>(<br/>name text(20) WITH COMPRESSION not null,<br/>score decimal(12,4) not null default 0,<br/>ID smallint not null default 0,<br/>birthday date,<br/>sex char(1),<br/>CONSTRAINT CK_CH_SEX Check(SEX in ('N','V')),<br/>CONSTRAINT PK_ID Primary Key (ID)<br/>);<br/>使用ADOX::CatalogPtr来创建mdb文件：<br/><span style="color: #ff1493;">HRESULT hr = S_OK;<br/>//Set ActiveConnection of Catalog to this string<br/>CString strcnn(_T("Provider=Microsoft.JET.OLEDB.4.0;Data source = d:&#92;&#92;test.mdb"));<br/></span><br/><span style="color: #ff1493;">try<br/>&#123;<br/>ADOX::_CatalogPtr m_pCatalog = NULL;<br/>hr = m_pCatalog.CreateInstance(__uuidof (ADOX::Catalog));</span><br/><span style="color: #ff1493;">if(FAILED(hr))</span><br/><span style="color: #ff1493;">&#123;</span><br/><span style="color: #ff1493;">_com_issue_error(hr);</span><br/><span style="color: #ff1493;">&#125;</span><br/><span style="color: #ff1493;">else</span><br/><span style="color: #ff1493;">&#123;<br/>m_pCatalog->Create(_bstr_t(strcnn)); //Create MDB</span><br/><span style="color: #ff1493;">&#125;<br/>&#125; <br/>catch(_com_error &e)<br/>&#123;<br/>// Notify the user of errors if any.<br/>AfxMessageBox(_T(“error“));<br/>&#125;</span><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/ado/" rel="tag">ado</a> , <a href="http://www.lewensky.cn/go.php/tags/access/" rel="tag">access</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/216.htm</link>
<title><![CDATA[vc++ ADO连接access（摘）详解+实例]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 27 May 2009 15:45:27 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/216.htm</guid> 
<description>
<![CDATA[ 
	ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口，是建立在OLE DB之上的高层数据库访问技术，即使你对OLE DB，COM不了解也能轻松对付ADO,因为它非常简单易用，甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用，并不失灵活性。本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发，并给出示例代码。为了使读者朋友都能测试本例提供的代码，我们采用Access数据库，您可以直接在我们提供的示例代码中找到这个test.mdb。 <br/>一、实现方法<br/><br/>万事开头难，任何一种新技术对于初学者来说最重要的还是"入门"，掌握其要点。让我们来看看ADO数据库开发的基本流程吧！它的基本步骤如下：<br/><br/>（1）初始化COM库，引入ADO库定义文件<br/><br/>（2）用Connection对象连接数据库<br/><br/>（3）利用建立好的连接，通过Connection、Command对象执行SQL命令，或利用Recordset对象取得结果记录集进行查询、处理。<br/><br/>（4）使用完毕后关闭连接释放对象。<br/><br/>下面我们将详细介绍上述步骤并给出相关代码。<br/><br/>1、COM库的初始化<br/><br/>我们可以使用AfxOleInit()来初始化COM库，这项工作通常在CWinApp::InitInstance()的重载函数中完成，请看如下代码:<br/><br/>BOOL CADOTest1App::InitInstance()<br/>&#123;<br/>AfxOleInit();<br/>......<br/>&#125;<br/><br/>2、用#import指令引入ADO类型库<br/><br/>为了引入ADO类型库，需要在项目的stdafx.h文件中加入如下语句：<br/><br/>#import "c:&#92;program files&#92;common files&#92;system&#92;ado&#92;msado15.dll"<br/>no_namespace rename("EOF","adoEOF")<br/><br/>这一语句有何作用呢？其最终作用同我们已经十分熟悉的#include类似，编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。<br/><br/>需要读者朋友注意的是：您的开发环境中msado15.dll不一定在这个目录下，请按实际情况修改；在编译的时候可能会出现如下警告，对此微软在 MSDN中作了说明，并建议我们不要理会这个警告：msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/ado/" rel="tag">ado</a> , <a href="http://www.lewensky.cn/go.php/tags/access/" rel="tag">access</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/215.htm</link>
<title><![CDATA[非模态对话框在任务栏上显示]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 27 May 2009 15:42:26 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/215.htm</guid> 
<description>
<![CDATA[ 
	方法1:<br/><br/>pdlg->ModifyStyleEx(0,&nbsp;&nbsp;WS_EX_APPWINDOW);//任务栏显示 <br/>pdlg->ShowWindow(SW_SHOW); <br/><br/><br/><br/><br/>方法2:创建的时候以桌面为父窗口:&nbsp;&nbsp;&nbsp;&nbsp; <br/>例如:&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>pDlg->Create(IDD_DIALOG1,GetDesktopWindow()); <br/><br/><br/><a href="http://topic.csdn.net/t/20060920/15/5035694.html" target="_blank">http://topic.csdn.net/t/20060920/15/5035694.html</a><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E9%259D%259E%25E6%25A8%25A1%25E6%2580%2581/" rel="tag">非模态</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%25AF%25B9%25E8%25AF%259D%25E6%25A1%2586/" rel="tag">对话框</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E4%25BB%25BB%25E5%258A%25A1%25E6%25A0%258F/" rel="tag">任务栏</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/214.htm</link>
<title><![CDATA[vc的模态对话框和非模态对话框]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 27 May 2009 15:35:10 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/214.htm</guid> 
<description>
<![CDATA[ 
	<br/><span style="color: red;">Generally Speaking</span><br/>(1)创建一非模态对话框&nbsp;&nbsp;<br/>&nbsp;&nbsp;CMyDlg*&nbsp;&nbsp; pMainWnd&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; CMyDlg;&nbsp;&nbsp;<br/>&nbsp;&nbsp;pMainWnd->Create();&nbsp;&nbsp;<br/>&nbsp;&nbsp;(2)创建一模态对话框&nbsp;&nbsp;<br/>&nbsp;&nbsp;CMyDlg&nbsp;&nbsp; dlg；&nbsp;&nbsp;<br/>&nbsp;&nbsp;dlg.Domdal();&nbsp;&nbsp;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;非模态的对话框是独立的，就是说和主程序可以同时交换数据，而模态的对话框则只能和自己交换。换句话说，模态对话框很霸道，你开了它就无法在同一个应用程序中的其他地方干活了，比如那个经常用的openfile dialog。非模态对话框就很随和，开了它你还可以爱干嘛干嘛。还有一个区别在于内存分配,new在堆中,另一在栈中,一般说两者一样,但如果你在对话框中开了很大的空间做成员,第二种就会有问题了,因为栈空间是受限的。但据说解决栈溢出用static申明，在全局数据区分配内存就可以了（我没试过）!模态消息不进message&nbsp;&nbsp; loop;非模态消息进入message&nbsp;&nbsp; loop。&nbsp;&nbsp; <br/>&nbsp;&nbsp; <br/><span style="color: red;">如何使用vc的非模态对话框</span><br/>1、非模态对话框的模板必须具有Visible风格，否则对话框将不可见，而模态对话框则无需设置该项风格。更保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框，而不管对话框是否具有Visible风格。<br/>2、非模态对话框对象是用new操作符在堆中动态创建的，而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量，通过该指针可访问对话框对象。<br/>3、*通过调用CDialog::Create函数来启动对话框，而不是CDialog::DoModal，这是模态对话框的关键所在。由于Create函数不会启动新的消息循环，对话框与应用程序共用同一个消息循环，这样对话框就不会垄断用户的输入。Create在显示了对话框后就立即返回，而DoModal是在对话框被关闭后才返回的。众所周知，在MFC程序中，窗口对象的生存期应长于对应的窗口，也就是说，不能在未关闭屏幕上窗口的情况下先把对应的窗口对象删除掉。由于在Create返回后，不能确定对话框是否已关闭，这样也就无法确定对话框对象的生存期，因此只好在堆中构建对话框对象，而不能以局部变量的形式来构建之。<br/>4、代码示例：<br/>对话框资源ID为：IDD_MYDIALOG<br/>对话框的类定义为：CMyDialog<br/>CMyView的成员变量为：CMyDialog* m_myDlg<br/>CMyView::OnOpenDialogButton()<br/>&#123;<br/>&nbsp;&nbsp;CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd();<br/>&nbsp;&nbsp;ASSERT_VALID(pWnd);&nbsp;&nbsp;&nbsp;&nbsp;//定义父窗口指针pWnd<br/>&nbsp;&nbsp;m_myDlg=new CMyDialog(pWnd);&nbsp;&nbsp;&nbsp;&nbsp;//堆分配非模态对话框内存空间，&nbsp;&nbsp; //CMyDialog(CWnd* pParent=NULL)为构造函数<br/>&nbsp;&nbsp;m_myDlg->Create(IDD_MYDIALOG,pWnd);<br/>&nbsp;&nbsp;m_myDlg->ShowWindow(SW_SHOW);<br/>&nbsp;&nbsp;//可用this指针代替pWnd指针，则省略头两行<br/>&#125;<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%25A8%25A1%25E6%2580%2581/" rel="tag">模态</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%25AF%25B9%25E8%25AF%259D%25E6%25A1%2586/" rel="tag">对话框</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E9%259D%259E%25E6%25A8%25A1%25E6%2580%2581/" rel="tag">非模态</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/209.htm</link>
<title><![CDATA[在VC中按回车不会关闭对话框的办法 ]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Tue, 26 May 2009 01:42:34 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/209.htm</guid> 
<description>
<![CDATA[ 
	大家都知道用VC刚设计出来的对话框在build并debug的时候会出现个问题就是不管操作什么一按回车就会关闭对话框，这是VC默认的调用onok()这个函数，而默认的这个函数就是关闭功能，所以有两种方法去解决，在网上都能查到，我这里用重载PreTranslateMessage函数，在classwizard中选择对应对话框的类，然后在message中选择PreTranslateMessage，双击它即可，具体代码如下：<br/>//CKaoqinDlg是我以前做课程设计时写的对话框名称<br/><br/><br/><div class="code">BOOL CKaoqinDlg::PreTranslateMessage(MSG* pMsg) <br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your specialized code here and/or call the base class<br/>&nbsp;&nbsp;&nbsp;&nbsp;if((pMsg-&gt;message==WM_KEYDOWN) &amp;&amp; (pMsg-&gt;wParam==VK_RETURN))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true；<br/>&nbsp;&nbsp;&nbsp;&nbsp;return CDialog::PreTranslateMessage(pMsg);<br/>&#125; </div><br/><br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%259B%259E%25E8%25BD%25A6/" rel="tag">回车</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%25AF%25B9%25E8%25AF%259D%25E6%25A1%2586/" rel="tag">对话框</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/208.htm</link>
<title><![CDATA[RichEdit 小结]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Tue, 26 May 2009 01:37:50 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/208.htm</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 12px;"><strong>一般性问题</strong></span><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;代码编译通过了，运行后RichEdit控件不显示，在InitInstance中添加<br/>BOOL CWinApp::InitInstance ()<br/>&#123;<br/>…<br/>AfxInitRichEdit(); - RichEdit 1.0<br/>或 AfxInitRichEdit2(); - RichEdit 2.0<br/>…<br/>&#125;<br/> <br/>2.&nbsp;&nbsp;&nbsp;&nbsp;升级默认的RichEdit版本，默认的版本有BUG，在<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/richedit/" rel="tag">richedit</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/195.htm</link>
<title><![CDATA[CIPAddressCtrl类的使用(IP地址与CString的互相转化)]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 17 Apr 2009 08:11:25 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/195.htm</guid> 
<description>
<![CDATA[ 
	<br/><br/>//将CString&nbsp;&nbsp; 型IP地址在IPAddressCtrl中显示&nbsp;&nbsp;<br/>CString&nbsp;&nbsp; strIP="192.168.0.10";&nbsp;&nbsp;<br/>DWORD&nbsp;&nbsp; dwIP;&nbsp;&nbsp;<br/>dwIP&nbsp;&nbsp; =&nbsp;&nbsp; inet_addr(strIP);&nbsp;&nbsp;<br/>unsigned&nbsp;&nbsp; char&nbsp;&nbsp; *pIP&nbsp;&nbsp; =&nbsp;&nbsp; (unsigned&nbsp;&nbsp; char*)&dwIP;&nbsp;&nbsp;<br/>m_ipAddr.SetAddress(*pIP,&nbsp;&nbsp; *(pIP+1),&nbsp;&nbsp; *(pIP+2),&nbsp;&nbsp; *(pIP+3));&nbsp;&nbsp;<br/><br/>//将IPAddressCtrl中的IP地址获得并转换成CString型&nbsp;&nbsp;<br/>unsigned&nbsp;&nbsp; char&nbsp;&nbsp; *pIP;&nbsp;&nbsp;<br/>CString&nbsp;&nbsp; strIP;&nbsp;&nbsp;<br/>DWORD&nbsp;&nbsp; dwIP;&nbsp;&nbsp;<br/>m_ipAddr.GetAddress(dwIP);&nbsp;&nbsp;<br/>pIP&nbsp;&nbsp; =&nbsp;&nbsp; (unsigned&nbsp;&nbsp; char*)&dwIP;&nbsp;&nbsp;<br/>strIP.Format("%u.%u.%u.%u",*(pIP+3),&nbsp;&nbsp; *(pIP+2),&nbsp;&nbsp; *(pIP+1),&nbsp;&nbsp; *pIP); <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/cipaddressctrl/" rel="tag">cipaddressctrl</a> , <a href="http://www.lewensky.cn/go.php/tags/cstring/" rel="tag">cstring</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/194.htm</link>
<title><![CDATA[VC中使用CFileDialog进行文件操作]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 17 Apr 2009 08:10:12 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/194.htm</guid> 
<description>
<![CDATA[ 
	一般来讲你不需要派生新的类，因为基类已经提供了常用的功能。而且在创建并等待对话框结束后你可以通过成员函数得到用户在对话框中的选择。 <br/><br/>CFileDialog文件选择对话框的使用：首先构造一个对象并提供相应的参数，构造函数原型如下： <br/>CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY &#124; OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );参数意义如下： <br/><br/>bOpenFileDialog 为TRUE则显示打开对话框，为FALSE则显示保存对话文件对话框。 <br/>lpszDefExt 指定默认的文件扩展名。 <br/>lpszFileName 指定默认的文件名。 <br/>dwFlags 指明一些特定风格。 <br/>lpszFilter 是最重要的一个参数，它指明可供选择的文件类型和相应的扩展名。参数格式如： <br/>"Chart Files (*.xlc)&#124;*.xlc&#124;Worksheet Files (*.xls)&#124;*.xls&#124;Data Files (*.xlc;*.xls)&#124;*.xlc; *.xls&#124;All Files (*.*)&#124;*.*&#124;&#124;";文件类型说明和扩展名间用 &#124; 分隔，同种类型文件的扩展名间可以用 ; 分割，每种文件类型间用 &#124; 分隔，末尾用 &#124;&#124; 指明。 <br/>pParentWnd 为父窗口指针。 <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/cfiledialog/" rel="tag">cfiledialog</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%2596%2587%25E4%25BB%25B6/" rel="tag">文件</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/149.htm</link>
<title><![CDATA[VC使用ADO访问SQL Server 2000进行查询并获得返回值]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 09 Oct 2008 09:46:41 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/149.htm</guid> 
<description>
<![CDATA[ 
	1、引入ADO库文件 <br/><br/>使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示： <br/><br/>用#import引入ADO库文件<br/><br/><div class="code">#import &quot;c:&#92;program files&#92;common files&#92;system&#92;ado&#92;msado15.dll&quot;no_namespaces rename(&quot;EOF&quot; adoEOF&quot;) </div><br/><br/><br/>这行语句声明在工程中使用ADO，但不使用ADO的名字空间，并且为了避免常数冲突，将常数EOF改名为adoEOF。现在不需添加另外的头文件，就可以使用ADO接口了。 <br/><br/>2、初始化OLE/COM库环境<br/>必须注意的是，ADO库是一组COM动态库，这意味应用程序在调用ADO前，必须初始化OLE/COM库环境。在MFC应用程序里，一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。<br/><br/><div class="code">if(!AfxOleInit())//这就是初始化COM库<br/>&#123;<br/>AfxMessageBox(“OLE初始化出错!”);<br/>return FALSE;<br/>&#125; </div><br/><br/>3、使用_ConnectionPtr接口<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/ado/" rel="tag">ado</a> , <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%259F%25A5%25E8%25AF%25A2/" rel="tag">查询</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/147.htm</link>
<title><![CDATA[教你用VC++制作QQ自动登陆软件]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 03 Oct 2008 03:11:10 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/147.htm</guid> 
<description>
<![CDATA[ 
	　　近日由于在华为培训，期间因为导师们忙得要紧，没那么多时间去教导我们，只是给我们看文档和代码，看完了，没事就想出这个来玩玩了。这里要先用SPY++来找到QQ登陆框的各个窗口标题或ID号。 <br/><br/><br/>　　原理：其实不难，只要找到QQ登陆框的号码输入和密码输入框，然后向其填数据就是了。<br/><br/>　　这里填数据就是向其发送消息，模拟键盘 罢了。<br/><br/><br/>　　一、先是查看QQ登陆框是否开启，否则开启它。<br/><br/>[code]//找QQ的登陆对话框，如果QQ没有启动，则先启动它。<br/>pWnd = FindWindow(_T(&quot;<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/qq/" rel="tag">qq</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E7%2599%25BB%25E9%2599%2586%25E5%2599%25A8/" rel="tag">登陆器</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/145.htm</link>
<title><![CDATA[VC多线程编程(转) ]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 02 Oct 2008 09:01:49 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/145.htm</guid> 
<description>
<![CDATA[ 
	<br/>VC中多线程使用比较广泛而且实用,在网上看到的教程.感觉写的挺好. <br/><br/>一、问题的提出<br/><br/>编写一个耗时的单线程程序：<br/><br/>　　新建一个基于对话框的应用程序SingleThread，在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮，ID为IDC_SLEEP_SIX_SECOND，标题为“延时6秒”，添加按钮的响应函数，代码如下： <br/><br/>void CSingleThreadDlg::OnSleepSixSecond() <br/>&#123;<br/> Sleep(6000); //延时6秒<br/>&#125;<br/><br/>　　编译并运行应用程序，单击“延时6秒”按钮，你就会发现在这6秒期间程序就象“死机”一样，不在响应其它消息。为了更好地处理这种耗时的操作，我们有必要学习——多线程编程。<br/>二、多线程概述<br/><br/>　　进程和线程都是操作系统的概念。进程是应用程序的执行实例，每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成，进程在运行过程中创建的资源随着进程的终止而被销毁，所使用的系统资源在进程终止时被释放或关闭。<br/>　　线程是进程内部的一个执行单元。系统创建好进程后，实际上就启动执行了该进程的主执行线程，主执行线程以函数地址形式，比如说main或WinMain函数，将程序的启动点提供给Windows系统。主执行线程终止了，进程也就随之终止。<br/>　　每一个进程至少有一个主执行线程，<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E5%25A4%259A%25E7%25BA%25BF%25E7%25A8%258B/" rel="tag">多线程</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/135.htm</link>
<title><![CDATA[在VC项目中使用自定义资源]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 26 Sep 2008 05:34:36 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/135.htm</guid> 
<description>
<![CDATA[ 
	<br/><a href="http://www.vckbase.com/code/downcode.asp?id=2803" target="_blank">下载源代码</a><br/>关键字：VC 自定义资源<br/>一、前言<br/>　　在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外，它还支持自定义资源类型（Custom Resource），我们自定义的资源类型能做些什么呢？呵呵，用处多多。<br/>默认的皮肤压缩包或语言包。一些支持换肤的软件特别是一些媒体播放器常常有自定义的皮肤文件（你可以尝试将Media Player或千千静听等软件的Skins目录下的文件的扩展名改为.zip，然后使<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc%25E8%25B5%2584%25E6%25BA%2590/" rel="tag">vc资源</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/134.htm</link>
<title><![CDATA[vc中将一个独立的dll(exe)，作为资源加入资源文件中]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 26 Sep 2008 05:32:02 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/134.htm</guid> 
<description>
<![CDATA[ 
	具体怎么加入、释放资源这个就不必多说了吧 <br/><br/>加入资源：Insert－Resource－Import <br/>要求填入类型名称，随便填个即可，比如“EXEANDDLL” <br/><br/>释放资源： <br/><br/>//////////////////////////////////////////// <br/>// 加载资源、生成文件 <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E8%25B5%2584%25E6%25BA%2590%25E6%2596%2587%25E4%25BB%25B6/" rel="tag">资源文件</a> , <a href="http://www.lewensky.cn/go.php/tags/exe/" rel="tag">exe</a> , <a href="http://www.lewensky.cn/go.php/tags/dll/" rel="tag">dll</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/133.htm</link>
<title><![CDATA[CString转char的方法总结]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 25 Sep 2008 08:43:44 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/133.htm</guid> 
<description>
<![CDATA[ 
	1.传给未分配内存的const char* （LPCTSTR）指针. <br/><br/><br/><div class="code">&nbsp;&nbsp; CString cstr(asdd);<br/><br/>&nbsp;&nbsp; const char* ch = (LPCTSTR)cstr;</div><br/><br/> ch指向的地址和cstr相同。但由于使用const保证ch不会修改，所以安全.<br/><br/>2.传给未分配内存的指针.<br/><br/><br/><div class="code">&nbsp;&nbsp;&nbsp;&nbsp;CString cstr = &quot;ASDDSD&quot;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cstr.ReleaseBuffer();</div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//修改ch指向的值等于修改cstr里面的值.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.<br/><br/>3.把CString 值赋给已分配内存的char *。<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/cstring/" rel="tag">cstring</a> , <a href="http://www.lewensky.cn/go.php/tags/char/" rel="tag">char</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/132.htm</link>
<title><![CDATA[实现程序互斥运行的几种方法]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 25 Sep 2008 03:28:03 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/132.htm</guid> 
<description>
<![CDATA[ 
	一、在VC下的实现<br/><br/>Visual C++ 是WIN32编程最主要也是最强大的编程工具这一，引用一名话来说VC就是“只有你想不到的，没有VC做不到的”。废话少说，下面看看用VC是如何这个功能。<br/><br/>A． 使用编译器来实现（使用MFC框架）：<br/><br/>在.cpp文件开头加上以下几行： <br/><br/><div class="code">#pragma data_seg(&quot;Shared&quot;)&nbsp;&nbsp;&nbsp;&nbsp; <br/>int volatile g_lAppInstance =0;<br/>#pragma data_seg()</div><br/><br/>我们来看一下上面的内容：<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/mfc/" rel="tag">mfc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E4%25BA%2592%25E6%2596%25A5/" rel="tag">互斥</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/128.htm</link>
<title><![CDATA[在Visual C++中用ADO进行数据库编程]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 19 Sep 2008 01:07:02 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/128.htm</guid> 
<description>
<![CDATA[ 
	　1. 生成应用程序框架并初始化OLE/COM库环境 <br/><br/>　　创建一个标准的MFC AppWizard(exe)应用程序，然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库（因为ADO库是一个COM DLL库）。<br/>本例为： <br/><br/>[code]　BOOL CAdotestDlg::OnInitDialog()<br/>　&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::CoInitialize(NULL); //初始化OLE/COM库环境 <br/>&nbsp;&nbsp<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/ado/" rel="tag">ado</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/127.htm</link>
<title><![CDATA[VC++调用ADO运行带参数的存储过程 ]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 18 Sep 2008 06:39:40 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/127.htm</guid> 
<description>
<![CDATA[ 
	最近由于工作之需，要利用VC进行一些高级的数据库操作，如执行存储过程等。遍寻网络资源发现好使的不多（经常#30XX错误，大部分应该是COM的VARIANT数据类型所致，其实有个讨巧的方法，请看下文），在自己的实验下小有所得。记下学习笔记以备参考：<br/><br/>1 进行ADO编程的必备步骤：引入msado15.dll<br/><br/><br/><div class="code"> #import &quot;c:&#92;program files&#92;common files&#92;system&#92;ado&#92;msado15.dll&quot; no_namespace rename(&quot;EOF&quot;,&quot;adoEOF&quot;)//避免与文件的结束符号混淆，将EOF改为adoEOF</div><br/><br/> 当然要记得在所有#include之后加入啊<br/><br/><br/>2 也是必备的：初始化Com库<br/><br/><br/><div class="code"> ::CoInitialize(NULL);///初始化COM库</div><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc%252B%252B/" rel="tag">vc++</a> , <a href="http://www.lewensky.cn/go.php/tags/sql/" rel="tag">sql</a> , <a href="http://www.lewensky.cn/go.php/tags/ado/" rel="tag">ado</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%25AD%2598%25E5%2582%25A8%25E8%25BF%2587%25E7%25A8%258B/" rel="tag">存储过程</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/126.htm</link>
<title><![CDATA[VC下ADO开发实践之一]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 18 Sep 2008 04:39:16 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/126.htm</guid> 
<description>
<![CDATA[ 
	一、ADO简介<br/><br/>ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口，是建立在OLE DB之上的高层数据库访问技术，请不必为此担心，即使你对OLE DB，COM不了解也能轻松对付ADO,因为它非常简单易用，甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用，并不失灵活性。本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发，并给出示例代码。<br/><br/><br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/ado/" rel="tag">ado</a> , <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/125.htm</link>
<title><![CDATA[解决vc 6在vista下的一些兼容问题 ]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Mon, 15 Sep 2008 09:01:46 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/125.htm</guid> 
<description>
<![CDATA[ 
	<br/>虽然vs系列的2008sp1版都出了，但是vs 2003以后的版本大多是都是在.Net上做修改，对我们vc程序员使用的MFC的修改很少。所以，许多VC程序员还是习惯用VC 6.0（包括我）。可是由于微软长时间不更新vc6。使得vc6在vista下出现了许多兼容性问题。在这里给大家提供一些解决方法 <br/>问题一：与UAC冲突 <br/>描述：由于UAC对Program Files进行了保护，导致无法调试。 <br/>解决方案： <br/>一、 <br/>1.找到vc6的主程序文件。 <br/>2.右键，属性，选择到兼容性选项卡，勾选”请以管理员身份运行该程序“如图1所示。 <br/><a href="http://bbs.crsky.com/1128632305/Mon_0808/139_185032_3212b7b890b1f94.jpg" target="_blank"><img src="http://bbs.crsky.com/1128632305/Mon_0808/139_185032_3212b7b890b1f94.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图1 <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vista/" rel="tag">vista</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/123.htm</link>
<title><![CDATA[CButtonST使用技巧]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 12 Sep 2008 01:39:01 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/123.htm</guid> 
<description>
<![CDATA[ 
	类文件及演示程序下载：<a href="http://file.ddvip.com/2006_07/1153228347_ddvip_2485.rar" target="_blank">http://file.ddvip.com/2006_07/1153228347_ddvip_2485.rarl</a><br/><br/>　　CButtonST使我目前见过的最强大，功能最全的CButton派生类。撰写本文的目的不在于技术的讨论，而是希望能够为各位提供关于CButtonST的使用参考，以提高编写程序的速度。<br/>　　下图是用CButtonST做的几个按钮<br/><a href="http://img.ddvip.com/2006_04/1144183919_ddvip_9863.gif" target="_blank"><img src="http://img.ddvip.com/2006_04/1144183919_ddvip_9863.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/> <br/>　　以下是CButtonST类的一些版本信息，方便大家可以及时获得它的最新版本。<br/>　　作者：Davide Calabro<br/>　　邮箱地址：davide_calabro@yahoo.com<br/>　　个人主页：<a href="http://www.softechsoftware.it" target="_blank">http://www.softechsoftware.it</a><br/>　　CButtonST类主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp四个文件。如果你打算使用CButtonST的窗口不止一个，那么我建议你在VC++的Workspace &#124; FileView中导入以上的四个文件之后，然后在SdtAfx.h文件中添加合适的include语句，如#include "BtnST.h"。<br/>　　以下是Basic Features的演示界面：<br/><a href="http://img.ddvip.com/2006_07/1153228233_ddvip_5438.gif" target="_blank"><img src="http://img.ddvip.com/2006_07/1153228233_ddvip_5438.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/> <br/>　　效果一：在按钮上加入Icon，使Icon和文字同时显示<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/cbuttonst/" rel="tag">cbuttonst</a> , <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%258C%2589%25E9%2592%25AE/" rel="tag">按钮</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/121.htm</link>
<title><![CDATA[CString的函数(收集)]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 11 Sep 2008 05:15:21 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/121.htm</guid> 
<description>
<![CDATA[ 
	<br/><span style="color: #0000ff;"><br/><span style="font-size: 14px;">CString::MakeUpper<br/></span><br/></span><br/>void MakeUpper( );<br/>Remarks<br/>备注Converts this CString object to an uppercase string.<br/>将原对象的所有小写英文字母转换为大写。（只是将小写的英文字母转换为大写，对于其它的字符不做变化，例如：大写字符，数字，汉字）<br/>Example实例<br/>The following example demonstrates the use of CString::MakeUpper.<br/>// example for CString::MakeUpper<br/>CString s( "abc" );<br/>s.MakeUpper();<br/>ASSERT( s == "ABC" );<br/>---------------------------------------------------------------------------------------------------------------------------<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/cstring/" rel="tag">cstring</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%2587%25BD%25E6%2595%25B0/" rel="tag">函数</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/120.htm</link>
<title><![CDATA[MFC中常用类，宏，函数介绍]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 11 Sep 2008 05:06:01 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/120.htm</guid> 
<description>
<![CDATA[ 
	 <br/><span style="color: #000080;">常用类</span><br/><br/><span style="color: #000080;">CRect：用来表示矩形的类，拥有四个成员变量：top left bottom right。分别表是左上角和右下角的坐标。可以通过以下的方法构造： </span><br/>[color=#000080]<br/>CRect( int l, int t, int r, int b ); 指明四个坐标 <br/>CRect( const RECT& srcRect ); 由RECT结构构造 <br/>CRect( LPCRECT lpSrcRect ); 由RECT结构构造<br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E5%25AE%258F/" rel="tag">宏</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%2587%25BD%25E6%2595%25B0/" rel="tag">函数</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/119.htm</link>
<title><![CDATA[LPCTSTR的用法！]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 11 Sep 2008 05:00:34 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/119.htm</guid> 
<description>
<![CDATA[ 
	L表示long指针 <br/><span style="font-size: 12px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是为了兼容Windows 3.1等16位操作系统遗留下来的，在win32中以及其他的32为操作系统中， long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P表示这是一个指针；C表示是一个常量；T表示在Win32环境中， 有一个_T宏，这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏，那么这个字符或者字符串将被作为UNICODE字符串，否则就是标准的ANSI字符串；STR表示这 个变量是一个字符串。所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。同样， LPCSTR就只能是一个ANSI字符串，在程序中我们大部分时间要使用带T的类型定义。</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR == const TCHAR *，<br/>CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换，没什么奇特的，最简单的C++操作符重载而已。 <br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/lpctstr/" rel="tag">lpctstr</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/118.htm</link>
<title><![CDATA[AfxMessageBox()与MessageBox()的区别]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 11 Sep 2008 04:38:22 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/118.htm</guid> 
<description>
<![CDATA[ 
	AfxMessageBox的函数原型<br/>int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );<br/>int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) –1 );<br/>在第一种形式中，lpszText表示在消息框内部显示的文本，消息框的标题为应用程序的可执行文件名（如Hello）。在第二种形式中， nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/messagebox/" rel="tag">messagebox</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%2587%25BD%25E6%2595%25B0/" rel="tag">函数</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/115.htm</link>
<title><![CDATA[VC++ Tab Control控件的使用]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 10 Sep 2008 00:41:09 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/115.htm</guid> 
<description>
<![CDATA[ 
	网上介绍使用Tab Control控件,好像说的都不是很详细, 我一小菜这边随便说说, 见笑.<br/><br/>1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish.<br/><br/><br/>2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.<br/><br/><br/>3. 在对话框的初始化函数OnInitDialog里面添加如下代码:<br/><br/><div class="code">m_tab.InsertItem(0,&quot;参数一&quot;);&nbsp;&nbsp;//添加参数一选项卡<br/><br/>m_tab.InsertItem(1,&quot;参数二&quot;);&nbsp;&nbsp;//添加参数二选项卡<br/><br/>m_tab.InsertItem(2,&quot;结果&quot;);&nbsp;&nbsp;&nbsp;&nbsp;//添加结果选项卡 </div><br/><br/>4.在对话框资源里面添加三个对话框资源, ID分别命名为IDD_PARA1, IDD_PARA2, IDD_RESULT. 字体为宋体, 字号为9,<span style="color: #FF0000;"> style为Child, Border为None,</span> 宽度调整为161. 再分别为其添加对应的基于CDialog类CPara1, CPara2, CResult. <br/><br/><br/>5. 在CMyTabDlg类中添加三个成员变量m_para1, m_para2, m_result, 分别是三个子对话框的实例. 代码如下:<br/><br/><br/><div class="code">CResult m_result;<br/><br/>CPara2 m_para2;<br/><br/>CPara1 m_para1;</div><br/><br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/tab_control/" rel="tag">tab control</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%2595%2599%25E7%25A8%258B/" rel="tag">教程</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/114.htm</link>
<title><![CDATA[VC++6.0相关编程工具推荐下载]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Tue, 09 Sep 2008 03:16:45 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/114.htm</guid> 
<description>
<![CDATA[ 
	Visual.C++.6.0.with.SP6┊可视化应用程序开发工具┊大企业龙卷风集成安装版 <br/><br/><img src="http://www.greendown.cn/uploadfiles/2006-09-16/20060916_033632_775.gif"><br/><br/>下载：<br/><br/><a href="http://www.greendown.cn/soft/4288.html" target="_blank">http://www.greendown.cn/soft/4288.html</a><br/><br/><br/><br/>VC++6.0编程助手：<br/><br/><a href="http://www.lewensky.cn/read.php/61.htm" target="_blank"><img src="http://botu.bokee.com/photodata2/2008-4-21/001/168/952/15453965/15453965_h.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>下载：<a href="http://www.azure.net.ru/read.php/61.htm" target="_blank">http://www.azure.net.ru/read.php/61.htm</a><br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc6/" rel="tag">vc6</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E7%25BC%2596%25E7%25A8%258B/" rel="tag">编程</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">下载</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/113.htm</link>
<title><![CDATA[Skin++ 使用教程（VC软件外观美化工具）]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sun, 07 Sep 2008 02:05:31 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/113.htm</guid> 
<description>
<![CDATA[ 
	一.加载Skin++<br/>0.将SkinPlusPlusDLL.lib,SkinPlusPlus.h,XPCorona.ssk都复制到当前目录<br/><br/>1.在(VC7)"项目->属性->链接器->输入->附加依赖项"中加入SkinPlusPlusDLL.lib <br/>或 在(VC6)"Project->Settings->Link->Object/library"中加入SkinPlusPlusDLL.lib <br/>在工程中加入SkinPlusPlus.h文件。<br/><br/>2.在你的程序中包含头文件<br/>#include "SkinPlusPlus.h"<br/><br/>3.在程序中加入初始化语句InitInstance()<br/><br/>InitializeSkin(_T("XPCorona.ssk");<br/><br/>注：以上假定，如果不是请更改路径设置。<br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/skin%252B%252B/" rel="tag">skin++</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E7%25A0%25B4%25E8%25A7%25A3/" rel="tag">破解</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%2595%2599%25E7%25A8%258B/" rel="tag">教程</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/112.htm</link>
<title><![CDATA[SkinMagic 进行皮肤设置 （SkinMagic使用教程）]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sun, 07 Sep 2008 01:50:26 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/112.htm</guid> 
<description>
<![CDATA[ 
	[准备工作]<br/><br/>1、将SkinMagicTrial.dll放置在调试目录<br/><br/>2、设置库文件目录，在项目[连接器]的[附加依赖项]中加入库SkinMagicTrial.lib<br/><br/>3、在项目的stdafx.h文件中加入头文件 #include "SkinMagicLib.h"<br/><br/>[创建过程]<br/><br/>1、初始化SkinMagic库：<br/><br/>要使用SkinMagic，这一步必不可少。在应用程序类的InitInstance()函数中行加入如下代码（粗体部分）：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;CWinApp::InitInstance();<br/><br/><br/><div class="code">VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL , NULL, NULL ));</div><br/><br/>说明:<br/>int InitSkinMagicLib(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //初始化SkinMagic工具库<br/>HINSTANCE hInstance,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//应用程序句柄<br/>char* szApplication ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//皮肤文件中定义的应用程序名，置为NULL即可<br/>char* szRegCode,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SkinMagic的使用注册码。若无置为NULL<br/>char* szReserved2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保留位，为NULL<br/>);<br/> <br/>............<br/>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/111.htm</link>
<title><![CDATA[vc中debug和release的不同]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sun, 07 Sep 2008 01:22:11 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/111.htm</guid> 
<description>
<![CDATA[ 
	在使用VC开发软件的过程中，正当要享受那种兴奋的时候突然发现：release与debug运行结果不一致，甚至出错，而release又不方便调试，真的是当头一棒啊，可是疼归疼，问题总要解决，下面将讲述一下我的几点经验，看看是不是其中之一：<br/><br/><br/>1. 变量。<br/>大家都知道，debug跟release在初始化变量时所做的操作是不同的，debug是将每个字节位都赋成0xcc(注1)，而release的赋值近似于随机(我想是直接从内存中分配的，没有初始化过)。这样就明确了，如果你的程序中的某个变量没被初始化就被引用，就很有可能出现异常：用作控制变量将导致流程导向不一致；用作数组下标将会使程序崩溃；更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简单有效的办法，否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到，如debug方式下数组越界也大多不会出错，在release中就暴露出来了，这个找起来就比较难了:( 还是自己多加注意吧<br/><br/>2. 自定义消息的消息参数。<br/>MFC为我们提供了很好的消息机制，更增加了自定义消息，好处我就不用多说了。这也存在debug跟release的问题吗？答案是肯定的。在自定义消息的函数体声明时，时常会看到这样的写法：afx_msg LRESULT OnMessageOwn(); Debug情况下一般不会有任何问题，而当你在Release下且多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。导致这个错误直接原因是消息体的参数没有添加，即应该写成：afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam); (注2)<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/release/" rel="tag">release</a> , <a href="http://www.lewensky.cn/go.php/tags/debug/" rel="tag">debug</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/109.htm</link>
<title><![CDATA[vc 操作剪切板]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sat, 06 Sep 2008 07:42:17 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/109.htm</guid> 
<description>
<![CDATA[ 
	拷贝与粘贴文本&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;下边的源代码演示了如何将文本（包含在CString对象“source”中）拷贝到剪贴板上。&nbsp;&nbsp; <br/><br/><div class="code">&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;CString&nbsp;&nbsp; source;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;//put&nbsp;&nbsp; your&nbsp;&nbsp; text&nbsp;&nbsp; in&nbsp;&nbsp; source&nbsp;&nbsp; <br/>&nbsp;&nbsp;if(OpenClipboard())&nbsp;&nbsp; <br/>&nbsp;&nbsp;&#123;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HGLOBAL&nbsp;&nbsp; clipbuffer;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp; *&nbsp;&nbsp; buffer;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EmptyClipboard();&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clipbuffer&nbsp;&nbsp; =&nbsp;&nbsp; GlobalAlloc(GMEM_DDESHARE,&nbsp;&nbsp; source.GetLength()+1);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;&nbsp; =&nbsp;&nbsp; (char*)GlobalLock(clipbuffer);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer,&nbsp;&nbsp; LPCSTR(source));&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GlobalUnlock(clipbuffer);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetClipboardData(CF_TEXT,clipbuffer);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseClipboard();&nbsp;&nbsp; <br/>&nbsp;&nbsp;&#125;&nbsp;&nbsp; </div><br/>&nbsp;&nbsp;<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E5%2589%25AA%25E5%2588%2587%25E6%259D%25BF/" rel="tag">剪切板</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/108.htm</link>
<title><![CDATA[使用WindowsXP风格的对话框（VC实现XP风格）]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sat, 06 Sep 2008 02:38:54 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/108.htm</guid> 
<description>
<![CDATA[ 
	1、插入资源，选择"Custom"，输入“24”作为资源的内型。<br/><br/>2、拷贝如下XML脚本到资源编辑器。<br/><br/><br/><div class="code"><br/>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt; <br/>&lt;assembly xmlns=&quot;urn:schemas-microsoft-com:asm.v1&quot; manifestVersion=&quot;1.0&quot;&gt;<br/>&lt;assemblyIdentity<br/>type=&quot;win32&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;name=&quot;DelphiApplication&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;version=&quot;1.0.0.0&quot; <br/>processorArchitecture=&quot;*&quot;/&gt;<br/>&lt;dependency&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependentAssembly&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;assemblyIdentity<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;win32&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=&quot;Microsoft.Windows.Common-Controls&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version=&quot;6.0.0.0&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicKeyToken=&quot;6595b64144ccf1df&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;language=&quot;*&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processorArchitecture=&quot;*&quot;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependentAssembly&gt;<br/>&lt;/dependency&gt;<br/>&lt;/assembly&gt;<br/></div><br/><br/><br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/xp/" rel="tag">xp</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E9%25A3%258E%25E6%25A0%25BC/" rel="tag">风格</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/107.htm</link>
<title><![CDATA[VC自绘XP按钮样式的实现]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 05 Sep 2008 00:47:24 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/107.htm</guid> 
<description>
<![CDATA[ 
	原标题：<strong>自绘按钮的实现</strong><br/><br/>如果你希望能够在自己的程序中表现出新意，那么你一定不会仅仅满足于MFC提供那些标准控件。这时，我们就必须自己另外多做些工作了。就改变控件外观这一点来说，主要是利用控件的自绘功能（Owner Draw）实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类，目的不在于介绍CXPButton类的使用技巧，而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用的话，也可以把它的源文件保存下来，直接加入到自己的项目中。<br/>本篇要点：<br/>一、准备工作<br/>二、实现原理及难点<br/>三、按钮类的使用<br/>四、小结与提示<br/>五、附录<br/><br/><a href="attachment.php?fid=19">点击这里下载文件</a><br/><br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E6%258C%2589%25E9%2592%25AE/" rel="tag">按钮</a> , <a href="http://www.lewensky.cn/go.php/tags/cbutton/" rel="tag">cbutton</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/106.htm</link>
<title><![CDATA[VC++ MFC 常用技巧（一）]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 03 Sep 2008 23:47:07 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/106.htm</guid> 
<description>
<![CDATA[ 
	<p>（－）. 下面是常见的Afx全局函数：</p><p>AfxFormatString1：类似printf一般地将字符串格式化</p><p>AfxFormatString2：类似printf一般地将字符串格式化</p><p>AfxMessageBox：类似Windows API 函数 MessageBox</p><p>AfxOuputDebugString：将字符串输往除错装置</p><p>AfxGetApp：获得application object (CwinApp派生对象)的指针</p><p>AfxGetMainWnd：获得程序主窗口的指针</p><p>AfxGetInstance：获得程序的instance handle</p><p><strong><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/mfc/" rel="tag">mfc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%258A%2580%25E5%25B7%25A7/" rel="tag">技巧</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/105.htm</link>
<title><![CDATA[VC实现串口通信例程]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 03 Sep 2008 23:41:22 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/105.htm</guid> 
<description>
<![CDATA[ 
	<p><span class="line"><font color="#386490">　　WIN95界面下的VC++串口通讯程序在WIN32下是不建议对端口进行操作的，在WIN32中所有的设备都被看成是文件，串行口也不例外也是作为文件来进行处理的。这是我的一份关于串口编程的读书笔记，对于使 用VC进行编程的同行应该有一定的帮助。 </font></span></p><p class="line"><font color="#386490"><b>1.打开串口：</b> <br /><br />　　在Window 95下串行口作为文件处理，使用文件操作对串行口进行处理。使用CreateFile()打开串口，CreateFile()将返回串口的句柄。 <br />　　HANDLE CreateFile( <br />　　LPCTSTR lpFileName, // pointer to name of the file <br />　　DWORD dwDesiredAccess, // access (read-write) mode <br />　　DWORD dwShareMode, // share mode <br />　　LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes <br />　　DWORD dwCreationDistribution, // how to create <br />　　DWORD dwFlagsAndAttributes, // file attributes <br />　　HANDLE hTemplateFile // handle to file with attributes to copy <br />　　); <br />　　lpFileName: 指明串口制备，例：COM1，COM2 <br />　　dwDesiredAccess: 指明串口存取方式，例：GENERIC_READ&#124;GENERIC_WRITE <br />　　dwShareMode: 指明串口共享方式 <br />　　lpSecurityAttributes: 指明串口的安全属性结构,NULL为缺省安全属性 <br />　　dwCreateionDistribution: 必须为OPEN_EXISTIN <br />　　dwFlagAndAttributes: 对串口唯一有意义的是FILE_FLAG_OVERLAPPED <br />　　hTemplateFile: 必须为NULL <strong><font color="#000000"><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E4%25B8%25B2%25E5%258F%25A3/" rel="tag">串口</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E9%2580%259A%25E4%25BF%25A1/" rel="tag">通信</a> , <a href="http://www.lewensky.cn/go.php/tags/com/" rel="tag">com</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/104.htm</link>
<title><![CDATA[直接用socket实现HTTP协议(下载专用)（可获取HTTP服务器返回信息）]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 03 Sep 2008 15:55:15 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/104.htm</guid> 
<description>
<![CDATA[ 
	<a href="attachment.php?fid=20">点击这里下载文件</a><br/><br/>　　从HTTP服务器上下载一个文件有很多方法，“热心”的微软提供了 WinInet 类，用起来也很方便。当然，我们也可以自己实现这些功能，通过格式化请求头很容易就能实现断点续传和检查更新等等功能 。本文附带的工程中有一个支持 HTTP1.1 协议，直接用 Socket 实现下载功能的 DLL，实现了以下功能： <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接主机 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格式化请求头 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置接收,发送超时 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接收并分析回应头 <br/><br/>连接，发送，设置超时，接收数据等我就不细说了，windows socket早就做好了，调用相应的函数就OK了。<br/>　　要想从服务器下载文件，首先要向服务器发送一个请求。HTTP 请求头由若干行字符串组成。下面结合实例说说 HTTP 请求头的格式。假设要下载 <a href="http://www.sina.com.cn/index.html" target="_blank">http://www.sina.com.cn/index.html</a> 这个网页 ，那么请求头的写法如下：<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/socket/" rel="tag">socket</a> , <a href="http://www.lewensky.cn/go.php/tags/http/" rel="tag">http</a> , <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/c%252B%252B/" rel="tag">c++</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/103.htm</link>
<title><![CDATA[CFileDialog文件选择对话框的使用]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 03 Sep 2008 15:33:11 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/103.htm</guid> 
<description>
<![CDATA[ 
	首先构造一个对象并提供相应的参数，构造函数原型如下：<br/>CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY &#124; OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );<br/>参数意义如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>bOpenFileDialog 为TRUE则显示打开对话框，为FALSE则显示保存对话文件对话框。&nbsp;&nbsp;&nbsp;&nbsp; <br/>lpszDefExt 指定默认的文件扩展名。&nbsp;&nbsp;&nbsp;&nbsp; <br/>lpszFileName 指定默认的文件名。&nbsp;&nbsp;&nbsp;&nbsp; <br/>dwFlags 指明一些特定风格。&nbsp;&nbsp;&nbsp;&nbsp; <br/>lpszFilter 是最重要的一个参数，它指明可供选择的文件类型和相应的扩展名。参数格式如： "Chart Files (*.xlc)&#124;*.xlc&#124;Worksheet Files (*.xls)&#124;*.xls&#124;Data Files (*.xlc;*.xls)&#124;*.xlc; *.xls&#124;All Files (*.*)&#124;*.*&#124;&#124;";文件类型说明和扩展名间用 &#124; 分隔，同种类型文件的扩展名间可以用 ; 分割，每种文件类型间用 &#124; 分隔，末尾用 &#124;&#124; 指明。&nbsp;&nbsp;&nbsp;&nbsp; <br/>pParentWnd 为父窗口指针。<br/>创建文件对话框可以使用DoModal()，在返回后可以利用下面的函数得到用户选择：<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/cfiledialog/" rel="tag">cfiledialog</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/102.htm</link>
<title><![CDATA[Visual C++开发工具与调试技巧整理]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 03 Sep 2008 00:57:32 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/102.htm</guid> 
<description>
<![CDATA[ 
	<h2>&nbsp;</h2><div class="t_msgfont" id="postmessage_1253378">自己总是用VC平台来开发东西，但是有时候总是出这样那样的问题，在这里把Visual C++开发工具与调试技巧整理摘录如下，希望对大家有用，省去大家再去搜索的烦恼。　　<br /><strong>1.如何在Release状态下进行调试</strong><br />　　Project-&gt;Setting=&gt;ProjectSetting对话框，选择Release状态。C/C++标签中的Category选General，Optimizations选Disable(Debug)，Debut info选Program Database。在Link标签中选中Generate debug info复选框。<br />　　注：只是一个介乎Debug和Release的中间状态，所有的ASSERT、VERIFY都不起作用，函数调用方式已经是真正的调用，而不查表，但是这种状态下QuickWatch、调用队列跟踪功能仍然有效，和Debug版一样。<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E5%25B7%25A5%25E5%2585%25B7/" rel="tag">工具</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E8%25B0%2583%25E8%25AF%2595/" rel="tag">调试</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/101.htm</link>
<title><![CDATA[MFC的定时器]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sat, 30 Aug 2008 12:49:35 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/101.htm</guid> 
<description>
<![CDATA[ 
	<p>Timer事件，即定时器事件，是在游戏编程中，经常使用的一个事件。借助它可以产生定时执行动作的效果。这篇文章，就和大家一起探讨一下如何使用SetTimer（）函数。</p><p><font size="3">1、SetTimer定义在那里？</font></p><p><font size="3">SetTimer表示的是定义个定时器。根据定义指定的窗口，在指定的窗口（CWnd）中实现OnTimer事件，这样，就可以相应事件了。</font></p><p><font size="3">SetTimer有两个函数。一个是全局的函数::SetTimer()</font></p><p><font size="3"><div class="quote"><div class="quote-title">引用</div><div class="quote-content">UINT SetTimer(<br />HWND<em> hWnd</em>, // handle of window for timer messages<br />UINT<em> nIDEvent</em>, // timer identifier<br />UINT<em> uElapse</em>, // time-out value<br />TIMERPROC<em> lpTimerFunc</em> // address of timer procedure<br />);</div></div></font><font size="2"><strong><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/mfc%252C%25E5%25AE%259A%25E6%2597%25B6%25E5%2599%25A8/" rel="tag">mfc,定时器</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/100.htm</link>
<title><![CDATA[SetTimer函数的用法]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Sat, 30 Aug 2008 12:24:15 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/100.htm</guid> 
<description>
<![CDATA[ 
	<p>什么时候我们需要用到SetTimer函数呢？当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。 使用定时器的方法比较简单，通常告诉WINDOWS一个时间间隔，然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现：发送WM_TIMER消息和调用应用程序定义的回调函数。 <br />&nbsp;</p><p>&nbsp;</p><p>1.1 用WM_TIMER来设置定时器<br />&nbsp;</p><p>先请看SetTimer这个API函数的原型 <br />&nbsp;</p><div class="quote"><div class="quote-content"><p>UINT_PTR SetTimer(<br />HWND hWnd, // 窗口句柄<br />UINT_PTR nIDEvent, // 定时器ID，多个定时器时，可以通过该ID判断是哪个定时器<br />UINT uElapse, // 时间间隔,单位为毫秒<br />TIMERPROC lpTimerFunc // 回调函数<br />);<br />&nbsp;</p></div></div><p>例如 <br />SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器<br />在MFC程序中SetTimer被封装在CWnd类中，调用就不用指定窗口句柄了<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/settimer/" rel="tag">settimer</a> , <a href="http://www.lewensky.cn/go.php/tags/mfc/" rel="tag">mfc</a> , <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/99.htm</link>
<title><![CDATA[类似Dreamweaver的颜色选择器]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 29 Aug 2008 13:41:49 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/99.htm</guid> 
<description>
<![CDATA[ 
	<span style="color: #006600;">一、前言</span><br/>用过Dreamweaver的朋友一定对它的颜色选择器留下深刻的印象，因为它确实相当好用，其中的一项比较实用的功能是可以选取屏幕上任意一点的颜色。笔者按此思路封装了一个称为CColorPicker的类实现了类似的功能,并修正了Dreamweaver颜色选择器将屏幕上选取的颜色作近似处理的缺点。本文详细介绍了CColorPicker类的使用方法，并提供示例工程供读者参考。<br/><br/>下载示例工程 17.2K：<a href="attachment.php?fid=21">点击这里下载文件</a><br/><br/><br/>下图便是示例代码的执行效果图<br/><a href="http://www.vckbase.com/document/journal/vckbase11/images/colorpicker.gif" target="_blank"><img src="http://www.vckbase.com/document/journal/vckbase11/images/colorpicker.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/> <br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E9%25A2%259C%25E8%2589%25B2/" rel="tag">颜色</a> , <a href="http://www.lewensky.cn/go.php/tags/vc/" rel="tag">vc</a> , <a href="http://www.lewensky.cn/go.php/tags/color/" rel="tag">color</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/94.htm</link>
<title><![CDATA[系统托盘编程完全指南]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 22 Aug 2008 01:29:45 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/94.htm</guid> 
<description>
<![CDATA[ 
	<a href="http://www.vckbase.com/code/downcode.asp?id=1717" target="_blank">下载本文例子源代码</a><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;自从Windows 95面市以来，系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱。使用系统托盘UI的Windows应用程序数不胜数，比如"金山词霸"、"Winamp"、"RealPlayer"等等。那么如何编写自己的托盘应用呢？本文是系列文章中的第一篇，这些文章将比较系统地描述托盘应用的编程。并创建自己的C++类来增强系统托盘应用的特性。读完这些文章，再参照例子，相信读者能轻松自如地在自己的程序中应用系统托盘。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大家知道，MFC框架没有提供任何现成的类应用于系统托盘UI，那么如何将表示应用程序的图标添加到任务栏中呢？方法很简单，只用到一个API函数，它就是Shell_NotifyIcon。这个函数本身也相当容易理解和使用。看看它的原型就知道了：<br/><br/><br/><div class="code">BOOL Shell_NotifyIcon(<br/>&nbsp;&nbsp;&nbsp;&nbsp;DWORD dwMessage, <br/>&nbsp;&nbsp;&nbsp;&nbsp;PNOTIFYICONDATA pnid<br/>); </div>&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E6%2589%2598%25E7%259B%2598/" rel="tag">托盘</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/90.htm</link>
<title><![CDATA[MFC 文本文件的简单操作]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Tue, 19 Aug 2008 08:32:45 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/90.htm</guid> 
<description>
<![CDATA[ 
	<p>CFile的派生类CStdioFile提供了对文件进行流式的操作功能。其中函数void CStdioFile::WriteString( LPCTSTR lpsz )写入一个字符串，需要给字符串lpsz的末尾加上换行标志&rdquo;&#92;r&#92;n&rdquo;;函数bool CStdioFile::ReadString(CString &amp;rString )从文件中读取一行，如果文件未读完返回true,否则返回false。 <br />比如:写入文件的例子 <br /><br />//创建文件 <br /><br /><br />CStdioFile file;<br <br/>............<br/>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/89.htm</link>
<title><![CDATA[巧妙实现超链接控制]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Fri, 15 Aug 2008 09:50:52 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/89.htm</guid> 
<description>
<![CDATA[ 
	　　我们用MFC开发应用程序时，通常在窗口中放置大量的控件，通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息，例如我们在对话窗口中加入一个静态文本控件(CState类)，这时在ClassWizard中此控件没有任何消息，也就无法完成所要求的控制。VC＋＋中为我们提供了一个API函数GetWindowRect()，此函数可以获得窗口中所有控件的位置，这样我们就可以在窗口的消息中利用位置判断来实现事件控制。 <br/>　　基于以上原理，可以轻松的实现超链接控制和动态提示以及窗口区域事件捕获等功能。以超链接控制为例，通常我们在对话框中加入电子邮件或主页的超链接，超链接一般要求获得焦点后鼠标变形，并且能响应OnClick事件，下面简单介绍其实现原理。<br/><br/>　　1.首先创建基于对话框的Sample工程。<br/><br/>　　2.在Sample工程的资源文件中引入光标文件将其ID设为“IDC_HAND”，在SAMPLE工程中的DIALOG对话框中加入静态文本控件将其ID设为“IDC_LINK”，Caption设为“<a href="http://netvc.6to23.com" target="_blank">http://netvc.6to23.com</a>”<br/><br/>　　3.在对话类的头文件(SampleDlg.h)添加数据成员<br/><br/>　　 protected:<br/><br/>　　 RECT m_pRectLink; //用于保存静态文本框的屏幕坐标<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/%25E8%25B6%2585%25E9%2593%25BE%25E6%258E%25A5/" rel="tag">超链接</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/86.htm</link>
<title><![CDATA[MFC中改变STATIC文字的颜色]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Thu, 14 Aug 2008 15:14:49 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/86.htm</guid> 
<description>
<![CDATA[ 
	 这个问题MS让很多人伤透了脑筋~偶最初也因为不知道如何改变颜色而浪费了很多时间~后来经过Google+MSDN和自己的摸索，找到了其中的一种方法。（MFC中实现同一种效果往往有很多方法）<br/><br/>&nbsp;&nbsp;首先我们在对话框中添加OnCtlColor消息映射函数，函数作用/函数原型/参数解释请看MSDN描述~<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>CWnd::OnCtlColor See Also<br/>CWnd Overview &#124; Class Members &#124; Hierarchy Chart &#124; CDC::SetBkColor<br/>The framework calls this member function when a child control is about to be drawn.<br/><br/>afx_msg HBRUSH OnCtlColor(<br/>&nbsp;&nbsp; CDC* pDC,<br/>&nbsp;&nbsp; CWnd* pWnd,<br/>&nbsp;&nbsp; UINT nCtlColor <br/>);<br/>Parameters<br/>pDC <br/>Contains a pointer to the display context for the child window. May be temporary. <br/>pWnd <br/>Contains a pointer to the control asking for the color. May be temporary. <br/>nCtlColor <br/>Contains one of the following values, specifying the type of control: <br/>CTLCOLOR_BTN&nbsp;&nbsp; Button control <br/>CTLCOLOR_DLG&nbsp;&nbsp; Dialog box <br/>CTLCOLOR_EDIT&nbsp;&nbsp; Edit control <br/>CTLCOLOR_LISTBOX&nbsp;&nbsp; List-box control <br/>CTLCOLOR_MSGBOX&nbsp;&nbsp; Message box <br/>CTLCOLOR_SCROLLBAR&nbsp;&nbsp; Scroll-bar control <br/>CTLCOLOR_STATIC&nbsp;&nbsp; Static control <br/>Return Value<br/>OnCtlColor must return a handle to the brush that is to be used for painting the control background.<br/></div></div><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/static/" rel="tag">static</a> , <a href="http://www.lewensky.cn/go.php/tags/%25E6%258E%25A7%25E4%25BB%25B6/" rel="tag">控件</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/83.htm</link>
<title><![CDATA[一个简单的 Microsoft Speech SDK 5_1 例子]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 13 Aug 2008 16:18:29 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/83.htm</guid> 
<description>
<![CDATA[ 
	<p>刚刚从 Microsoft 网站下栽了 Speech SDK 5.1 和中日文发声补丁，参考 Speech SDK文档写了几个小程序，尽管我也是刚刚接触 Speech若干小时的初学者，还是拿出来共享吧：</p><p>&nbsp;</p><p>Speech SDK 采用 COM 的形式封装，和大多数COM对象一样，下面是一个似曾相识的初始化：</p><p>&nbsp;</p><p>CoInitialize(NULL);</p><p>&nbsp;</p><p>CLSIDFromProgID(L&quot;SAPI.SpVoice&quot;, &amp;CLSID_SpVoice);</p><p>&nbsp;</p><p>ISpVoice * pSpVoice = NULL;</p><p>&nbsp;</p><p>if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,</p><p>CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&amp;pSpVoice)))</p><p>&#123;</p><p>cout &lt;&lt; &quot;Failed to create instance of ISpVoice!&quot; &lt;&lt; endl;</p><p>return -1;</p><p>&#125;</p><p>&nbsp;</p><p>现在我们用它来说 &ldquo;Hello World&rdquo;，非常简单：</p><p>&nbsp;</p><p>pSpVoice-&gt;Speak(L&quot;Hello World!&quot;, SPF_DEFAULT, NULL);</p><p>&nbsp;</p><p>最后，清除这一切</p><p>&nbsp;</p><p>pSpVoice-&gt;Release();</p><p>&nbsp;</p><p>CoUninitialize();</p><p>&nbsp;</p><p>很容易，是不是？下面我们稍微改变一下：<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/microsoft/" rel="tag">microsoft</a> , <a href="http://www.lewensky.cn/go.php/tags/speech/" rel="tag">speech</a> , <a href="http://www.lewensky.cn/go.php/tags/sdk/" rel="tag">sdk</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/82.htm</link>
<title><![CDATA[基于Speech SDK开发中英文混合朗读程序]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 13 Aug 2008 16:17:28 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/82.htm</guid> 
<description>
<![CDATA[ 
	<div align="center">曾爱国</div><div align="center">(五邑大学信息学院，广东 江门 529020)</div><div><strong>摘 要</strong>　中英文混合朗读一直是个难点，本文在分析Microsoft Speech SDK中英文引擎的基础上，提出了根据文本类型实时切换中英文引擎的方法，在Visual C++6.0中实现了一个示例程序。</div><div><strong>关键词</strong>　Speech SDK；中英文混合朗读；Visual C++</div><p><br />&nbsp;</p><h1><span style="font-size: small">1 Speech SDK简介</span></h1><div>语音识别(SR)和语音合成(TTS)一直是计算机应用的热点，如果你想在Windows平台上开发具有语音识别和语音合成功能的应用程序，使用 Microsoft Speech SDK是较好的选择。现在许多应用程序的语音识别和语音合成部分，例如金山词霸，就是在此基础上开发的。</div><div>Microsoft Speech SDK是微软公司推出的支持语音应用程序开发的工具包，其最新版本是5.1，可以在微软的网站免费下载，如果要支持中文，还要下载相应的Language Pack。下载后先安装Speech SDK，再安装简体中文语言包，这样你的计算机就具有中英文语音能力了。</div><div>下面介绍在Visual C++6.0中如何利用Speech SDK开发中英文全文朗读的程序。<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/speech/" rel="tag">speech</a> , <a href="http://www.lewensky.cn/go.php/tags/sdk/" rel="tag">sdk</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/80.htm</link>
<title><![CDATA[Windows 语音编程初步]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 13 Aug 2008 16:16:40 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/80.htm</guid> 
<description>
<![CDATA[ 
	<p><span style="font-size: small">一、SAPI简介</span></p><p><span style="font-size: small">软件中的语音技术包括两方面的内容，一个是语音识别(speech recognition) 和语音合成(speech synthesis)。这两个技术都需要语音引擎的支持。微软推出的应用编程接口API，虽然现在不是业界标准，但是应用比较广泛。</span></p><p><span style="font-size: small">SAPI全称 The Microsoft Speech API.相关的SR和SS引擎位于Speech SDK开发包中。这个语音引擎支持多种语言的识别和朗读，包括英文、中文、日文等。</span></p><p><span style="font-size: small">SAPI包括以下组件对象（接口）：</span></p><p><span style="font-size: small">（1）Voice Commands API。对应用程序进行控制，一般用于语音识别系统中。识别某个命令后，会调用相关接口是应用程序完成对应的功能。如果程序想实现语音控制，必须使用此组对象。<br />（2）Voice Dictation API。听写输入，即语音识别接口。<br />（3）Voice Text API。完成从文字到语音的转换，即语音合成。<br />（4）Voice Telephone API。语音识别和语音合成综合运用到电话系统之上，利用此接口可以建立一个电话应答系统，甚至可以通过电话控制计算机。<br />（5）Audio Objects API。封装了计算机发音系统。</span></p><p><span style="font-size: small">SAPI是架构在COM基础上的，微软还提供了ActiveX控件，所以不仅可用于一般的windows程序，还可以用于网页、VBA甚至EXCEL的图表中。如果对COM感到陌生，还可以使用微软的C++ WRAPPERS，它用C++类封装了语音SDK COM对象。<br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/windows/" rel="tag">windows</a>
]]>
</description>
</item><item>
<link>http://www.lewensky.cn/read.php/77.htm</link>
<title><![CDATA[VC读写INI文件（转）]]></title> 
<author>Lewen &lt;lewensky@gmail.com&gt;</author>
<category><![CDATA[MFC/VC++]]></category>
<pubDate>Wed, 13 Aug 2008 16:13:23 +0000</pubDate> 
<guid>http://www.lewensky.cn/read.php/77.htm</guid> 
<description>
<![CDATA[ 
	我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:<br />　　一.将信息写入.INI文件中.<br />　　1.所用的WINAPI函数原型为: <br />BOOL WritePrivateProfileString(<br />LPCTSTR lpAppName,<br />LPCTSTR lpKeyName,<br />LPCTSTR lpString,<br />LPCTSTR lpFileName<br />); <br />　　其中各参数的意义:<br />　　　LPCTSTR lpAppName 是INI文件中的一个字段名.<br />　　　LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.<br />　　　LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.<br /><br />LPCTSTR lpFileName 是完整的INI文件名.<br /><br/>............<br/><br/>Tags - <a href="http://www.lewensky.cn/go.php/tags/ini/" rel="tag">ini</a>
]]>
</description>
</item>
</channel>
</rss>