﻿<?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++博客-我自闲庭信步,悠然自得,不亦乐乎.-随笔分类-Windows</title><link>http://www.cppblog.com/huyi/category/1229.html</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
------ Keep life simple&lt;br&gt;

GMail/GTalk/MSN:huyi.zg@gmail.com</description><language>zh-cn</language><lastBuildDate>Sat, 24 May 2008 00:23:42 GMT</lastBuildDate><pubDate>Sat, 24 May 2008 00:23:42 GMT</pubDate><ttl>60</ttl><item><title>发布一个日语汉字假名转换软件给大家</title><link>http://www.cppblog.com/huyi/archive/2007/05/30/25110.html</link><dc:creator>HuYi</dc:creator><author>HuYi</author><pubDate>Wed, 30 May 2007 03:03:00 GMT</pubDate><guid>http://www.cppblog.com/huyi/archive/2007/05/30/25110.html</guid><wfw:comment>http://www.cppblog.com/huyi/comments/25110.html</wfw:comment><comments>http://www.cppblog.com/huyi/archive/2007/05/30/25110.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/huyi/comments/commentRss/25110.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyi/services/trackbacks/25110.html</trackback:ping><description><![CDATA[主要使用了微软的WTL和IME技术，相关链接：<br><a href="http://www.cppblog.com/huyi/archive/2006/03/15/4207.html" target="_blank">http://www.cppblog.com/huyi/archive/2006/03/15/4207.html</a><br><br>下载地址：<br><a href="http://www.cppblog.com/Files/huyi/kanji.rar" target="_blank">http://www.cppblog.com/Files/huyi/kanji.rar</a><br><br>使用方式：<br>选中不知道读音的日文汉字（中国汉字无效），然后Ctrl+C即可。在系统托盘图标上点击左键，可以打开关闭监视功能。<br><br>软件截屏:<br><br><a href="http://picasaweb.google.com/huyi.zg/gbIXHJ/photo?authkey=-MYJpJF1zc4#5070185369970480354"><img src="http://lh5.google.com/image/huyi.zg/RlzquyJ5FOI/AAAAAAAAA3Q/MEO0nWmh-ek/s800/kanji1.jpg"></a><br><br>2007年6月11日<br>放出1.5版，改动如下：<br>1.美化了界面，改进了前一版本中显示错位的问题。<br>2.3秒后查询窗口自动小时。<br>3.做了部分过滤，能过滤掉许多非日文汉字的东西。<br>4.左键默认立即关闭窗口，右键定住窗口，使之不会自动消失。<br>新的截图就不放出了，总之漂亮了很多，希望大家继续支持。<br>   <img src ="http://www.cppblog.com/huyi/aggbug/25110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyi/" target="_blank">HuYi</a> 2007-05-30 11:03 <a href="http://www.cppblog.com/huyi/archive/2007/05/30/25110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将成员函数作为std::for_each的第三个参数</title><link>http://www.cppblog.com/huyi/archive/2006/12/22/16736.html</link><dc:creator>HuYi</dc:creator><author>HuYi</author><pubDate>Fri, 22 Dec 2006 07:10:00 GMT</pubDate><guid>http://www.cppblog.com/huyi/archive/2006/12/22/16736.html</guid><wfw:comment>http://www.cppblog.com/huyi/comments/16736.html</wfw:comment><comments>http://www.cppblog.com/huyi/archive/2006/12/22/16736.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/huyi/comments/commentRss/16736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyi/services/trackbacks/16736.html</trackback:ping><description><![CDATA[vector&lt;Book&gt; books;<br />void CBookEditDlg::ForEachBookFunctor(Book book)<br />{<br />    ......<br />}<br />for_each(books.begin(), books.end(), std::bind1st(mem_fun(&amp;CBookEditDlg::ForEachBookFunctor), this));<br /><br />关键点在于mem_fun和bind1st的使用。<br /><br />for_each的实现中最核心的一个调用：functor(*iterater);<br />由于类非静态成员函数，必须在实例上调用：(instance-&gt;*pfn)(params);<br />所以for_each无法直接使用传过去的函数地址，函数指针的第一个参数是类的一个实例指针（this指针)，所以必须想办法把这个指针传过去（使用std::bind1st）<br /><br />关于mem_fun的一些资料，请参考<br /><a href="http://http//www.stlchina.org/documents/EffectiveSTL/files/item_41.html" target="_blank">http://www.stlchina.org/documents/EffectiveSTL/files/item_41.html</a><br /><br />对于带两个以上参数的成员函数，用stl是不能达到目的的，因为mem_fun只能生成不带参数，或者是仅带一个参数的函数对象（functor)，bind1st和bind2st也只能对第一个或者是第二个参数进行绑定。<br />要实现对任意数量参数的成员函数生成functor，必须对stl进行扩展，所幸boost已经做到了这点，boost::bind和boost::mem_fn就是更加泛化的std::bind1st和std::mem_func<br /><br />    void ForEachClassFunctor(Class c, CTreeItem treeItem)<br />    {<br />        treeView.InsertItem(c.name.c_str(), treeItem, NULL);<br />    }<br /><br />    void ForEachBookFunctor(Book book)<br />    {<br />        CTreeItem treeItem = treeView.InsertItem(book.name.c_str(), NULL, NULL);<br />        vector&lt;Class&gt; v;<br />        v.push_back(Class(0,0,"nameClass1", "titleClass1"));<br />        for_each(v.begin(), v.end(), <br />            boost::bind(boost::mem_fn(&amp;CBookEditDlg::ForEachClassFunctor), this, _1, treeItem));<br />    }<br /><img src ="http://www.cppblog.com/huyi/aggbug/16736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyi/" target="_blank">HuYi</a> 2006-12-22 15:10 <a href="http://www.cppblog.com/huyi/archive/2006/12/22/16736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UTF-8与Unicode的相互转换</title><link>http://www.cppblog.com/huyi/archive/2006/12/22/16734.html</link><dc:creator>HuYi</dc:creator><author>HuYi</author><pubDate>Fri, 22 Dec 2006 07:09:00 GMT</pubDate><guid>http://www.cppblog.com/huyi/archive/2006/12/22/16734.html</guid><wfw:comment>http://www.cppblog.com/huyi/comments/16734.html</wfw:comment><comments>http://www.cppblog.com/huyi/archive/2006/12/22/16734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyi/comments/commentRss/16734.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyi/services/trackbacks/16734.html</trackback:ping><description><![CDATA[今天用到了Sqlite,由于它内部是使用UTF-8编码，所以在Windows应用中出现了乱码。<br />简单的搜索了一下，相互转换的方法很多，我觉得比较好的，是<br /><a href="http://www.vckbase.com/document/viewdoc/?id=1444" target="_blank">http://www.vckbase.com/document/viewdoc/?id=1444</a><br /><br />我稍微改进了一下:<br /><br />    static WCHAR* UTF82Unicode(WCHAR* pBuffer,char *pSource, int buff_size)<br />    {<br />        int i, j, max;<br />        char* uchar = (char *)pBuffer;<br />        max = buff_size - 2;<br />        for(i = 0, j = 0; pSource[j] != '\0'; i += 2, j += 3)<br />        {<br />            if (i &gt; max) {<br />                break;<br />            }<br />            uchar[i+1] = ((pSource[j] &amp; 0x0F) &lt;&lt; 4) + ((pSource[j+1] &gt;&gt; 2) &amp; 0x0F);<br />            uchar[i] = ((pSource[j+1] &amp; 0x03) &lt;&lt; 6) + (pSource[j+2] &amp; 0x3F);<br />        }<br />        uchar[i] = '\0';<br />        uchar[i+1] = '\0';<br />        return pBuffer;<br />    }<br /><br />在Windows中的话，还有更简单的方法完成转换：<br />比如从UTF-8到Unicode:<br />    WCHAR buff[255];<br />    <span style="FONT-WEIGHT: bold">MultiByteToWideChar</span>(CP_UTF8, 0, argv[i], -1, buff, sizeof(buff));<br />    item.name = W2A(buff);<br /><br />argv[i]是要转换的字节数组<img src ="http://www.cppblog.com/huyi/aggbug/16734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyi/" target="_blank">HuYi</a> 2006-12-22 15:09 <a href="http://www.cppblog.com/huyi/archive/2006/12/22/16734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用追加的方式，而非SetWindowText插入文本到CEdit</title><link>http://www.cppblog.com/huyi/archive/2006/05/11/6949.html</link><dc:creator>HuYi</dc:creator><author>HuYi</author><pubDate>Thu, 11 May 2006 06:26:00 GMT</pubDate><guid>http://www.cppblog.com/huyi/archive/2006/05/11/6949.html</guid><wfw:comment>http://www.cppblog.com/huyi/comments/6949.html</wfw:comment><comments>http://www.cppblog.com/huyi/archive/2006/05/11/6949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyi/comments/commentRss/6949.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyi/services/trackbacks/6949.html</trackback:ping><description><![CDATA[
		<p>CEdit没有类似AppendText的函数，如果采用SetWindowText，会造成画面闪烁，滚动条也会有问题。<br /><br />另一种追加方式可以解决这些问题：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> nLength </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> m_edit.SendMessage(WM_GETTEXTLENGTH);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />        m_edit.SetSel(nLength, nLength);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />        m_edit.ReplaceSel(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">abc</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);</span>
		</div>
<img src ="http://www.cppblog.com/huyi/aggbug/6949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyi/" target="_blank">HuYi</a> 2006-05-11 14:26 <a href="http://www.cppblog.com/huyi/archive/2006/05/11/6949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>