﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Go Go Jeffrey-文章分类-实际操作性</title><link>http://www.cppblog.com/jeffrey/category/816.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 09:01:58 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 09:01:58 GMT</pubDate><ttl>60</ttl><item><title>关于http代理中的http connect 代理</title><link>http://www.cppblog.com/jeffrey/articles/3279.html</link><dc:creator>jeffrey</dc:creator><author>jeffrey</author><pubDate>Thu, 16 Feb 2006 01:38:00 GMT</pubDate><guid>http://www.cppblog.com/jeffrey/articles/3279.html</guid><wfw:comment>http://www.cppblog.com/jeffrey/comments/3279.html</wfw:comment><comments>http://www.cppblog.com/jeffrey/articles/3279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jeffrey/comments/commentRss/3279.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jeffrey/services/trackbacks/3279.html</trackback:ping><description><![CDATA[<P>许多人可能认为http代理就是只为web服务提供的，其实他们还忽略了http代理的connect作用。以下引用一段文字作为解析。<BR></P>
<H3>HTTP Tunneling</H3>
<P>HTTP is a text-based protocol to retrieve Web pages through a Web browser. Mostly, if you are on a LAN connection, you are behind a proxy server; this proxy server has one HTTP proxy running on some defined port. In your Internet Explorer's Connection option, you specify LAN settings as required. This proxy server is definitely running on a text-based protocol, and you can only get HTTP-related data from the outside network, right!! Well, there is a small loophole from which you can go through HTTP and connect to the outside world and get any data you want in binary protocol, or even your own protocol. It's through HTTPS.</P>
<H3>HTTPS Explanation</H3>
<P>In HTTPS, data is transferred from browser to server and server to browser in a secure manner. It's a binary protocol; when it goes through a proxy, the proxy doesn't understand anything. The proxy just allows a binary stream to open and lets both server and client exchange the data. Now, we can fool the proxy server and connect to any server and exchange data. The proxy server will think that we are doing some secure HTTP session.<BR><BR>对于HTTP代理，不少人有认识上的误区，有必要说明一下，不是所有的HTTP代理都只能代理HTTP的，<BR>　　HTTP&nbsp;CONNECT代理服务器是一种能够允许用户建立TCP连接到任何端口的代理服务器，这意味着这种代理不仅可用于HTTP，还包括FTP、IRC、RM流服务等，甚至扫描、攻击。&nbsp;<BR><BR>ISA防火墙会默认封阻SSL端口443以外的其他connect的端口，以防止被人滥用作扫描，攻击或发垃圾邮件。如果我们需要穿透ISA的封阻，我们可以connect 443端口，然后把443映射为我们需要连接的真正端口。<BR></P><img src ="http://www.cppblog.com/jeffrey/aggbug/3279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jeffrey/" target="_blank">jeffrey</a> 2006-02-16 09:38 <a href="http://www.cppblog.com/jeffrey/articles/3279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在堆栈中分配内存_alloca </title><link>http://www.cppblog.com/jeffrey/articles/2838.html</link><dc:creator>jeffrey</dc:creator><author>jeffrey</author><pubDate>Tue, 17 Jan 2006 07:16:00 GMT</pubDate><guid>http://www.cppblog.com/jeffrey/articles/2838.html</guid><wfw:comment>http://www.cppblog.com/jeffrey/comments/2838.html</wfw:comment><comments>http://www.cppblog.com/jeffrey/articles/2838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jeffrey/comments/commentRss/2838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jeffrey/services/trackbacks/2838.html</trackback:ping><description><![CDATA[<P>如果在一个函数里面分配内存，在函数退出时释放内存的情况下可以使用_alloca代替malloc。前者<BR>是可以在函数退出时自动释放内存块，而不用显式使用free函数，而且在堆栈中分配内存可以减少<BR>在堆中分配内存的缺点---产生内存碎片。</P>
<P>alloca allocates size bytes from the program stack. The allocated space is automatically freed when the calling function </P>
<P>exits (not when the allocation merely passes out of scope). Therefore, do not pass the pointer value returned by _alloca as </P>
<P>an argument to free.</P>
<P>详细用法请参考msdn</P><img src ="http://www.cppblog.com/jeffrey/aggbug/2838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jeffrey/" target="_blank">jeffrey</a> 2006-01-17 15:16 <a href="http://www.cppblog.com/jeffrey/articles/2838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>richedit 控件在不同语言环境的操作系统上可能出现的乱码问题 </title><link>http://www.cppblog.com/jeffrey/articles/2839.html</link><dc:creator>jeffrey</dc:creator><author>jeffrey</author><pubDate>Tue, 17 Jan 2006 07:16:00 GMT</pubDate><guid>http://www.cppblog.com/jeffrey/articles/2839.html</guid><wfw:comment>http://www.cppblog.com/jeffrey/comments/2839.html</wfw:comment><comments>http://www.cppblog.com/jeffrey/articles/2839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jeffrey/comments/commentRss/2839.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jeffrey/services/trackbacks/2839.html</trackback:ping><description><![CDATA[<P>由于工作上需要，把软件移植到英文版的os上（软件已是unicode版本的），发现richedit控件上显示的字体（本来内容应该显示为中文）乱码</P>
<P>了。</P>
<P>发生乱码的具体代码：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetDlgItemText(IDCE_MEMO, m_Results[nIdx].Content);<BR>IDCE_MEMO为richedit的资源名，m_Results[nIdx].Content为要显示的字符串内容（已经是unicode编码的了）。</P>
<P>查找原因：可能是控件不了解字符串已经是unicode代码，所以控件根据locale 的code page来硬性将代码转换为unicode显示，所以出现乱码</P>
<P>。</P>
<P>解决方法：<BR>#ifdef UNICODE<BR>&nbsp; //请注意，因为是unicode版本，所以codepage要用1200，以告诉RichEdit传过去的文本已经是unicode，以免出现乱码，详情请看MSDN。<BR>&nbsp; SETTEXTEX SetTxtEx;<BR>&nbsp; SetTxtEx.flags = ST_DEFAULT;<BR>&nbsp; SetTxtEx.codepage = 1200;<BR>&nbsp; BOOL bRet = ::SendMessage(::GetDlgItem(m_hWnd, IDCE_MEMO), EM_SETTEXTEX, (WPARAM)&amp;SetTxtEx, </P>
<P>(LPARAM)m_Results[nIdx].Content);<BR>&nbsp; ASSERT(bRet);<BR>#else<BR>&nbsp; SetDlgItemText(IDCE_MEMO, m_Results[nIdx].Content);<BR>#endif</P>
<P><BR>The code page used to translate the text to Unicode. If codepage is 1200 (Unicode code page), no translation is done. If </P>
<P>codepage is CP_ACP, the system code page is used. </P><img src ="http://www.cppblog.com/jeffrey/aggbug/2839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jeffrey/" target="_blank">jeffrey</a> 2006-01-17 15:16 <a href="http://www.cppblog.com/jeffrey/articles/2839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟踪焦点去向的方法，可以使用spy++</title><link>http://www.cppblog.com/jeffrey/articles/2837.html</link><dc:creator>jeffrey</dc:creator><author>jeffrey</author><pubDate>Tue, 17 Jan 2006 07:15:00 GMT</pubDate><guid>http://www.cppblog.com/jeffrey/articles/2837.html</guid><wfw:comment>http://www.cppblog.com/jeffrey/comments/2837.html</wfw:comment><comments>http://www.cppblog.com/jeffrey/articles/2837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jeffrey/comments/commentRss/2837.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jeffrey/services/trackbacks/2837.html</trackback:ping><description><![CDATA[<P>近日工作遇到一个问题，在某个treeview控件中使用键盘的上下箭头按键选择树节点，使到面版右面相应切换到具体的界面时候，发现在某几</P>
<P>个节点时会突然丢失焦点，出现了灰色选择条的现象。焦点到底去哪里呢，从表象来看毫无头绪。</P>
<P>正郁闷之制突然想到了vc6.0中附带的一个工具spy++。此工具可以跟踪界面上的任何控件窗体，以及任何与此窗体有关的window消息。而且使</P>
<P>用简单。事实胜于雄辩，立即行动。用spy++监视treeview的窗口消息。而且把需要监视的消息设置为全部（晕阿，太多的消息会看傻人的。不</P>
<P>过怕有遗漏，所以只好设置全部，后来发现可以只监视wm_killfocus和wm_setfocus两个消息，这可以大大减少检查量）。现在spy++按需求都</P>
<P>配置好了，开始工作。立马切换会要监视的treeview控件上，继续选择不同的节点，不多久焦点又丢失了。我马上切换回spy++监视画面，查找</P>
<P>良久果然发现了wm_killfocus消息。检查此消息是对哪个窗体发得（得到此窗体的句柄，然后用spy++查找界面上所有控件看是否有此句柄得控</P>
<P>件。最后查出此窗口句柄就是treeview右面的面版）。</P>
<P>总结，当treeview中某个节点被选择后，焦点会切换离开treeview到达右面相应出现的面版。怀疑是底层作的好事，这就不多追究了，底层的</P>
<P>事情还管阿，还不累死人啊，知道原因就好了。</P>
<P>解决方案，强制把焦点留在treeview上面。哈哈，奈我何阿，见代码<BR>void CUsrManDlg::OnSelchangedTreeUsrman(NMHDR *pNMHDR, LRESULT *pResult)<BR>{</P>
<P>&nbsp;LPNMTREEVIEW pNMTreeView = reinterpret_cast&lt;LPNMTREEVIEW&gt;(pNMHDR);<BR>&nbsp;DWORD dwItemId = pNMTreeView-&gt;itemNew.lParam;<BR>&nbsp;ShowSubDlg(dwItemId);</P>
<P>&nbsp;//由于在treeview里面上下移动的时候，某些节点上会丢失了焦点，原因是焦点跑到右边的版面中得控件上了，所以下面一句代码是强制把焦点流在treeview上。<BR>&nbsp;m_treeUsrMan.SetFocus();<BR>&nbsp;<BR>&nbsp;*pResult = 0;<BR>}</P><img src ="http://www.cppblog.com/jeffrey/aggbug/2837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jeffrey/" target="_blank">jeffrey</a> 2006-01-17 15:15 <a href="http://www.cppblog.com/jeffrey/articles/2837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>