﻿<?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++博客-Wxt's Blog</title><link>http://www.cppblog.com/wxtnote/</link><description>专注于 GUI 程序设计</description><language>zh-cn</language><lastBuildDate>Fri, 13 Mar 2026 02:19:56 GMT</lastBuildDate><pubDate>Fri, 13 Mar 2026 02:19:56 GMT</pubDate><ttl>60</ttl><item><title>为什么std::wstring不提供CString那样的Format的方法</title><link>http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html</link><dc:creator>wxt</dc:creator><author>wxt</author><pubDate>Wed, 29 Jul 2015 10:23:00 GMT</pubDate><guid>http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html</guid><wfw:comment>http://www.cppblog.com/wxtnote/comments/211410.html</wfw:comment><comments>http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wxtnote/comments/commentRss/211410.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxtnote/services/trackbacks/211410.html</trackback:ping><description><![CDATA[很多时候想使用字符串格式化输出，但是std::wstring偏偏没有提供这个方法。CString只存在于ATL/MFC，使用Win32平台没有CString可用，使用底层的spintf之类的函数，又时常担心buffer越界，写重复的越界检测之类的代码...所以这里把CString的Format方法搬了过来：<br />String.h<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;String&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;std::wstring<br /><span style="color: #008080; ">2</span>&nbsp;{<br /><span style="color: #008080; ">3</span>&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Format(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />);<br /><span style="color: #008080; ">5</span>&nbsp;<span style="color: #0000FF; ">protected</span>:<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;FormatV(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args);<br /><span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;GetFormattedLength(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args);<br /><span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Format(wchar_t*&nbsp;pszBuffer,&nbsp;ULONG&nbsp;nLength,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args);<br /><span style="color: #008080; ">9</span>&nbsp;};</div>String.cpp<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->std::wstring&nbsp;StrFormat(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pstrFormat,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;szBuffer[300]&nbsp;=&nbsp;{&nbsp;0&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;args;<br />&nbsp;&nbsp;&nbsp;&nbsp;va_start(args,&nbsp;pstrFormat);<br />&nbsp;&nbsp;&nbsp;&nbsp;::wvnsprintf(szBuffer,&nbsp;lengthof(szBuffer)&nbsp;-&nbsp;2,&nbsp;pstrFormat,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;wcscat_s(szBuffer,&nbsp;300,&nbsp;L"\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;va_end(args);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;szBuffer;<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;String::Format(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;arglist;<br />&nbsp;&nbsp;&nbsp;&nbsp;va_start(arglist,&nbsp;pszFormat);<br />&nbsp;&nbsp;&nbsp;&nbsp;FormatV(pszFormat,&nbsp;arglist);<br />&nbsp;&nbsp;&nbsp;&nbsp;va_end(arglist);<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;String::Format(&nbsp;wchar_t*&nbsp;pszBuffer,&nbsp;ULONG&nbsp;nLength,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;vswprintf_s(pszBuffer,&nbsp;nLength,&nbsp;pszFormat,&nbsp;args);<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;String::FormatV(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pszFormat&nbsp;==&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;nLength&nbsp;=&nbsp;GetFormattedLength(pszFormat,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;wchar_t*&nbsp;pszBuffer&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;wchar_t[nLength&nbsp;+&nbsp;1];<br />&nbsp;&nbsp;&nbsp;&nbsp;::ZeroMemory(pszBuffer,&nbsp;nLength&nbsp;+&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;Format(pszBuffer,&nbsp;nLength&nbsp;+&nbsp;1,&nbsp;pszFormat,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;std::wstring::<span style="color: #0000FF; ">operator</span>=(std::wstring(pszBuffer));<br />&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]pszBuffer;<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;String::GetFormattedLength(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;_vscwprintf(pszFormat,&nbsp;args);<br />}</div><br />以上代码在VS2008编译通过。<br /><img src ="http://www.cppblog.com/wxtnote/aggbug/211410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxtnote/" target="_blank">wxt</a> 2015-07-29 18:23 <a href="http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看某个文件正在被哪些进程访问</title><link>http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html</link><dc:creator>wxt</dc:creator><author>wxt</author><pubDate>Mon, 27 Apr 2015 15:28:00 GMT</pubDate><guid>http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html</guid><wfw:comment>http://www.cppblog.com/wxtnote/comments/210460.html</wfw:comment><comments>http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wxtnote/comments/commentRss/210460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxtnote/services/trackbacks/210460.html</trackback:ping><description><![CDATA[通过使用Sysinternals的procexp.exe工具提供的Process Explorer Search（菜单-&gt;Find-&gt;Find Handle or Dll或Ctrl+F）功能，我们可以看到某个文件正在被哪些进程使用。这个功能在你想删除某个文件，而系统提示&#8220;该文件正在被占用，不能删除&#8221;的时候非常有用。<br /><img src="http://www.cppblog.com/images/cppblog_com/wxtnote/Find3.jpg" width="458" height="341" alt="" /><img src ="http://www.cppblog.com/wxtnote/aggbug/210460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxtnote/" target="_blank">wxt</a> 2015-04-27 23:28 <a href="http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gdiplus的初始化辅助类</title><link>http://www.cppblog.com/wxtnote/archive/2015/03/19/210101.html</link><dc:creator>wxt</dc:creator><author>wxt</author><pubDate>Thu, 19 Mar 2015 07:14:00 GMT</pubDate><guid>http://www.cppblog.com/wxtnote/archive/2015/03/19/210101.html</guid><wfw:comment>http://www.cppblog.com/wxtnote/comments/210101.html</wfw:comment><comments>http://www.cppblog.com/wxtnote/archive/2015/03/19/210101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wxtnote/comments/commentRss/210101.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxtnote/services/trackbacks/210101.html</trackback:ping><description><![CDATA[在使用Gdiplus的功能之前，要先进行初始化，对应的函数是Gdiplus::GdiplusStartup，在使用完Gdiplus的功能之后，要进行反初始化，对应的函数则是Gdiplus::GdiplusShutdown。<br />为了简化编程，这里实现了一个简单的Gdiplus初始化类，作为全局对象使用，类似于MFC的theApp对象。代码如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#pragma&nbsp;once<br /><br />#include&nbsp;&lt;GdiPlus.h&gt;<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;GdiPlusHelper<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;GdiPlusHelper()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gdiplus::GdiplusStartupInput&nbsp;gdiplusStartupInput;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gdiplus::GdiplusStartup(&amp;m_nGdiPlusToken,&nbsp;&amp;gdiplusStartupInput,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;~GdiPlusHelper()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gdiplus::GdiplusShutdown(m_nGdiPlusToken);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG_PTR&nbsp;m_nGdiPlusToken;<br />};</div><img src ="http://www.cppblog.com/wxtnote/aggbug/210101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxtnote/" target="_blank">wxt</a> 2015-03-19 15:14 <a href="http://www.cppblog.com/wxtnote/archive/2015/03/19/210101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用GdiPlus::Matrix实现图形旋转</title><link>http://www.cppblog.com/wxtnote/archive/2015/03/18/210095.html</link><dc:creator>wxt</dc:creator><author>wxt</author><pubDate>Wed, 18 Mar 2015 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/wxtnote/archive/2015/03/18/210095.html</guid><wfw:comment>http://www.cppblog.com/wxtnote/comments/210095.html</wfw:comment><comments>http://www.cppblog.com/wxtnote/archive/2015/03/18/210095.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wxtnote/comments/commentRss/210095.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxtnote/services/trackbacks/210095.html</trackback:ping><description><![CDATA[用Gdiplus::Matrix对图形进行简单的旋转，可以免除繁琐的数学计算。<br />这里主要用到了Gdiplus::Matrix::RotateAt和Gdiplus::Graphics::SetTransForm实现图形旋转。<br /><br />1、类GdiPlus::Matrix的RotateAt方法，原型如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Status&nbsp;RotateAt(&nbsp;REAL&nbsp;angle,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;PointF&nbsp;&amp;center,<br />&nbsp;&nbsp;&nbsp;&nbsp;MatrixOrder&nbsp;order<br />);</div>参数angle为需要旋转的角度，center为旋转的中心，order为旋转Matrix的顺序。order的取值有两个：Gdiplus::MatrixOrderPrepend和Gdiplus::MatrixOrderAppend，默认取值为Gdiplus::MatrixOrderPrepend。<br /><br />2、类Gdiplus::Graphics的SetTransForm方法，原型如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Status&nbsp;SetTransform(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;Matrix&nbsp;*matrix<br />);</div>参数matrix就是上面的Gdiplus::Matrix对象指针。<br /><br />示例代码如下：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->VOID&nbsp;Example_Rotate(HDC&nbsp;hdc)<br />{<br />&nbsp;&nbsp;&nbsp;Gdiplus::Graphics&nbsp;graphics(hdc);<br />&nbsp;&nbsp;&nbsp;Gdiplus::Pen&nbsp;pen(Color(255,&nbsp;0,&nbsp;0,&nbsp;255));<br />&nbsp;&nbsp;&nbsp;Gdiplus::Matrix&nbsp;matrix;<br />&nbsp;&nbsp;&nbsp;Gdiplus::PonitF&nbsp;P(50,&nbsp;50);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;旋转中心</span><br />&nbsp;&nbsp;&nbsp;matrix.RotateAt(100.0f,&nbsp;P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000;">&nbsp;旋转100度</span><br />&nbsp;&nbsp;&nbsp;graphics.SetTransform(&amp;matrix);<br />&nbsp;&nbsp;&nbsp;graphics.DrawEllipse(&amp;pen,&nbsp;0,&nbsp;0,&nbsp;100,&nbsp;50);&nbsp;<br />}</div><br />效果展示：<br /><img src="http://www.cppblog.com/images/cppblog_com/wxtnote/GdiplusRotate2.png" width="486" height="350" alt="" /><br /><br />参考资料：MSDN<img src ="http://www.cppblog.com/wxtnote/aggbug/210095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxtnote/" target="_blank">wxt</a> 2015-03-18 15:34 <a href="http://www.cppblog.com/wxtnote/archive/2015/03/18/210095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>