<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[烛光的专栏]]></title><description><![CDATA[C C++]]></description><link>https://blog.csdn.net/yann2</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; yann2]]></copyright><item><title><![CDATA[同步Socket Send执行流程]]></title><link>https://blog.csdn.net/yann2/article/details/6541005</link><guid>https://blog.csdn.net/yann2/article/details/6541005</guid><author>yann2</author><pubDate>Mon, 13 Jun 2011 13:00:00 +0800</pubDate><description><![CDATA[这里只描述同步Socket的send函数的执行流程当调用该函数时，send先比较待发送数据的长度len和套接字s的发送缓冲的 长度如果len大于s的发送缓冲区的长度，该函数返回SOCKET_ERROR如果len小于或者等于s的发送缓冲区的长度，那么send先检查协议 是否正在发送s的发送缓冲中的数据，如果是就等待协议把数据发送完           如果协议还没有开始发送s的]]></description><category></category></item><item><title><![CDATA[深入浅出ShellExecute]]></title><link>https://blog.csdn.net/yann2/article/details/6538947</link><guid>https://blog.csdn.net/yann2/article/details/6538947</guid><author>yann2</author><pubDate>Sun, 12 Jun 2011 02:39:00 +0800</pubDate><description><![CDATA[Q: 如何打开一个应用程序？ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或ShellExecute(this->m_hWnd,"open","notepad.exe",    "c://MyLog.log","",SW_SHOW );正如您所看到的，我并没有传递程序的完整路径。Q: 如何打开一个同系统]]></description><category></category></item><item><title><![CDATA[CString 和 std::string 转换方法(Unicode下)]]></title><link>https://blog.csdn.net/yann2/article/details/6538793</link><guid>https://blog.csdn.net/yann2/article/details/6538793</guid><author>yann2</author><pubDate>Sat, 11 Jun 2011 23:14:00 +0800</pubDate><description><![CDATA[#include   	CString str = _T("123abc汉字~~");	std::string sData = "123";	WCharToChar(CP_ACP,str.GetBuffer(),sData);	str.ReleaseBuffer(); 	str = _T("");	std::wstring strTemp;	Ch]]></description><category></category></item><item><title><![CDATA[SHGetFileInfo 函数参数解释]]></title><link>https://blog.csdn.net/yann2/article/details/6538099</link><guid>https://blog.csdn.net/yann2/article/details/6538099</guid><author>yann2</author><pubDate>Sat, 11 Jun 2011 15:18:00 +0800</pubDate><description><![CDATA[WINSHELLAPI DWORD WINAPI SHGetFileInfo(LPCTSTR pszPath,DWORD dwFileAttributes,SHFILEINFO FAR *psfi,UINT cbFileInfo, UINT uFlags );  pszPath 参数:指定的文件名。 当uFlags的取值中不包含 SHGFI_PIDL时,]]></description><category></category></item><item><title><![CDATA[Windows窗口消息类型+说明]]></title><link>https://blog.csdn.net/yann2/article/details/5973368</link><guid>https://blog.csdn.net/yann2/article/details/5973368</guid><author>yann2</author><pubDate>Fri, 29 Oct 2010 09:39:00 +0800</pubDate><description><![CDATA[<br />http://dev.csdn.net/article/73/73242.shtm<br /><br />消息，就是指Windows发出的一个通知，告诉应用程序某个事情发生了。例如，单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的，这个记录中包含了消息的类型以及其他信息。例如，对于单击鼠标所产生的消息来说，这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg，(我转贴的)<br /><br />它在Windows单]]></description><category></category></item><item><title><![CDATA[windows控件消息和控件通知消息大全]]></title><link>https://blog.csdn.net/yann2/article/details/5973347</link><guid>https://blog.csdn.net/yann2/article/details/5973347</guid><author>yann2</author><pubDate>Fri, 29 Oct 2010 09:27:00 +0800</pubDate><description><![CDATA[<br />Edit   Control   Notification   Codes   <br />EN_SETFOCUS       <br />EN_KILLFOCUS     <br />EN_CHANGE           <br />EN_UPDATE           <br />EN_ERRSPACE       <br />EN_MAXTEXT         <br />EN_HSCROLL         <br />EN_VSCROLL         <br />Edit  ]]></description><category></category></item><item><title><![CDATA[CreateThread 的详细说明]]></title><link>https://blog.csdn.net/yann2/article/details/5954807</link><guid>https://blog.csdn.net/yann2/article/details/5954807</guid><author>yann2</author><pubDate>Wed, 20 Oct 2010 18:14:00 +0800</pubDate><description><![CDATA[<br />当使用CreateProcess调用时，系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程，大致做如下步骤：　　1在内核对象中分配一个线程标识/句柄，可供管理，由CreateThread返回　　2把线程退出码置为STILL_ACTIVE，把线程挂起计数置1　　3分配context结构　　4分配两页的物理存储以准备栈，保护页设置为PAGE_READWRITE，第2页设为PAGE_GUARD　　5lpStartAddr和lpvThread值被放在栈顶，使它们成为]]></description><category></category></item><item><title><![CDATA[方便的 GDI+ 轻松修改图片及保存图片]]></title><link>https://blog.csdn.net/yann2/article/details/5953534</link><guid>https://blog.csdn.net/yann2/article/details/5953534</guid><author>yann2</author><pubDate>Wed, 20 Oct 2010 10:52:00 +0800</pubDate><description><![CDATA[<br />首先要获得图片的CLSID，微软提供了一个函数，但他并没有集成到GDI+的库中<br />也就是 GetEncoderClsid。。<br />但是微软给出了实现，我们要做的也就是把该函数自己手动添加到工程中<br />下面是该函数的实现<br /> <br />int CGUIWindowEffectDlg::GetEncoderClsid(const WCHAR *format, CLSID *pClsid)
{
	UINT num   =   0;// number   of   im]]></description><category></category></item><item><title><![CDATA[解决 GDI 贴图的闪烁]]></title><link>https://blog.csdn.net/yann2/article/details/5948826</link><guid>https://blog.csdn.net/yann2/article/details/5948826</guid><author>yann2</author><pubDate>Mon, 18 Oct 2010 15:10:00 +0800</pubDate><description><![CDATA[<br /><br />注：Windows GDI画图闪烁解决方法<br /><br />一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化，所以不可避免在窗口移动或者改变大小的时候出现闪烁。<br />先来谈谈闪烁产生的原因<br />原因一：<br />如果熟悉显卡原理的话，调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕<br />上只是写到了显存里，而显卡每隔一段时间把显存的内容输出到屏幕上，这就是刷新周期。<br />一般显卡的刷新周期是 1/80秒左右，具体数字可以自己设置的]]></description><category></category></item><item><title><![CDATA[使用GDI+ 绘制可旋转的PNG]]></title><link>https://blog.csdn.net/yann2/article/details/5948211</link><guid>https://blog.csdn.net/yann2/article/details/5948211</guid><author>yann2</author><pubDate>Mon, 18 Oct 2010 10:45:00 +0800</pubDate><description><![CDATA[<br />如果要绘制半透明的图片，请使用.png格式（用photoshop即可轻松制作并处理）一、首先介绍Graphics的两个函数，RotateTransform：将整个坐标系逆时针旋转一定角度TranslateTransform：将整个坐标系偏移到某个位置本例要实现的功能是在指定位置上旋转图片，首先需要将整个坐标系偏移到指定位置，在进行坐标系的旋转，在函数使用上应先旋转在偏移（与我们想象的相反），代码如下myGraphics.RotateTransform(angle,MatrixOrderAppen]]></description><category></category></item><item><title><![CDATA[CString,int,string,char* 之间的互相转换]]></title><link>https://blog.csdn.net/yann2/article/details/5937454</link><guid>https://blog.csdn.net/yann2/article/details/5937454</guid><author>yann2</author><pubDate>Wed, 13 Oct 2010 09:19:00 +0800</pubDate><description><![CDATA[<br />string 转 CStringCString.format("%s", string.c_str());char 转 CStringCString.format("%s", char*);char 转 stringstring s(char *);string 转 char *char *p = string.c_str();// CString转std::stringCString str = dlg.GetPathName();setlocale(LC_ALL, "chs");char *]]></description><category></category></item><item><title><![CDATA[列举 CString转char 的四种方法]]></title><link>https://blog.csdn.net/yann2/article/details/5937438</link><guid>https://blog.csdn.net/yann2/article/details/5937438</guid><author>yann2</author><pubDate>Wed, 13 Oct 2010 09:12:00 +0800</pubDate><description><![CDATA[<br /> <br />1.传给未分配内存的const char* （LPCTSTR）指针. <br />   CString cstr(asdd);<br />   const char* ch = (LPCTSTR)cstr;<br />   ch指向的地址和cstr相同。但由于使用const保证ch不会修改，所以安全.<br /> <br />2.传给未分配内存的指针.<br />    CString cstr = "ASDDSD";<br />    char *ch = cstr.GetBuf]]></description><category></category></item><item><title><![CDATA[Visual Assist X 实用的功能]]></title><link>https://blog.csdn.net/yann2/article/details/5929501</link><guid>https://blog.csdn.net/yann2/article/details/5929501</guid><author>yann2</author><pubDate>Sat, 09 Oct 2010 14:16:00 +0800</pubDate><description><![CDATA[<br />你用va么？你用它来干什么？高亮，自动提示？未免大材小用了点，高亮这种东西，任意一个文本编辑器就支持！自动列出方法成员，这个是vs本身就有的功能，只不过va让它自动弹出来罢了，我觉得va最强大的应该是refactor菜单下的系列功能，当然va snappets也很好用啦！花了一个小时把refactor相关功能试了个编，现总结如下，希望我这一个小时的时间没有白费~<br /> <br /><br /> <br />1>add include：添加头文件，当编译后提示“未定义类型”时直接右键类型名，]]></description><category></category></item><item><title><![CDATA[Visual Assist X 10.6.1830.0 常用快捷键]]></title><link>https://blog.csdn.net/yann2/article/details/5929467</link><guid>https://blog.csdn.net/yann2/article/details/5929467</guid><author>yann2</author><pubDate>Sat, 09 Oct 2010 14:01:00 +0800</pubDate><description><![CDATA[<br />1、Alt + G： 在定义与声明之间互跳。<br /><br /><br />2、Alt + O： 在.h与.cpp之间互跳。（O是字母O，不是数字零）<br /><br /><br />3、Alt + Shift + Q：鼠标定位到函数名上，若是在h文件中，按此快捷键会弹出右键菜单，里面有个选项--创建定义；若是在cpp文件中，则按此快捷键会弹出右键菜单，里面有一个选项--创建声明。 这在定义好接口之后，再来写实现时，配合Alt+O是非常快捷的。当然，这种情况下，鼠标右击与Alt+O配合会更]]></description><category></category></item></channel></rss>