<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JasonRight</title>
    <description></description>
    <link>http://jasonright.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>回调函数的用法</title>
        <author>JasonRight</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jasonright.javaeye.com">JasonRight</a>&nbsp;
          链接：<a href="http://jasonright.javaeye.com/blog/190961" style="color:red;">http://jasonright.javaeye.com/blog/190961</a>&nbsp;
          发表时间: 2008年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在要调用回调函数的类中声明：<br /><pre name="code" class="c++">
CallFun.h
//返回类型为void, 参数类型为std::string
typedef void(*PCALLBACKFunc) (std::string );

class CallFun{
  private:
    PCALLBACKFunc m_pCallBack;
  public:  
    void setCallBack(PCALLBACKFunc Func);
    void runCallBack(std::string strMsg);
}
</pre><br /><pre name="code" class="c++">
CallFun.cpp
void CallFun::setCallBack(PCALLBACKFunc Func)
{
	m_pCallBack = Func;
}
void CallFun::runCallBack(std::string strMsg)
{
  (*m_pCallBack)(strMsg);
}
</pre><br /><br />在执行逻辑操作的同时要显示进度，可以用回调函数使得逻辑和显示分开。在测试该逻辑函数时，设置回调函数什么都不做，利于简化测试。
          <br/>
          <span style="color:red;">
            <a href="http://jasonright.javaeye.com/blog/190961#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 10:54:13 +0800</pubDate>
        <link>http://jasonright.javaeye.com/blog/190961</link>
        <guid>http://jasonright.javaeye.com/blog/190961</guid>
      </item>
      <item>
        <title>boost库的常用用法</title>
        <author>JasonRight</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jasonright.javaeye.com">JasonRight</a>&nbsp;
          链接：<a href="http://jasonright.javaeye.com/blog/190757" style="color:red;">http://jasonright.javaeye.com/blog/190757</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          class Shape<br />class Triangle : public Shape<br /><br />1.shared_ptr<br />定义类：<br /><pre name="code" class="c++">
typedef boost::shared_ptr&lt;class Shape> ShapeSharedPtr;
</pre><br /><br />实例化：<br /><pre name="code" class="c++">
ShapeSharedPtr shapeSP = ShapeSharedPtr(new Shape());
</pre><br /><br />定义数组：<br /><pre name="code" class="c++">
typedef boost::shared_ptr&lt;std::vector&lt;ShapeSharedPtr>> ShapeListSharedPtr;
</pre><br />辅助定义：<br /><pre name="code" class="c++">
typedef std::vector&lt;boost::shared_ptr&lt;class Shape>> ShapeList;
</pre><br /><br />实例化 : <br /><pre name="code" class="c++">
ShapeListSharedPtr shapeListSP = ShapeListSharedPtr(new ShapeList);
</pre><br /><br />得到普通指针<br /><pre name="code" class="c++">
Shape* pShape = shapeSP.get();
</pre><br /><br />普通指针封装<br /><pre name="code" class="c++">
Shape* shapePointer = new Shape();
ShapeListSharedPtr shapePointerSP = ShapeListSharedPtr(shapePointer);
</pre><br /><br />主动释放：<br /><pre name="code" class="c++">
shapeSP.reset();
</pre><br /><br />2.dynamic_pointer_cast<br /><pre name="code" class="c++">
typedef boost::shared_ptr&lt;class Triangle> TriangleSharedPtr;

ShapeSharedPtr triangleShapeSP = ShapeSharedPtr(new Triangle());

TriangleSharedPtr triangleSP = boost::dynamic_pointer_cast&lt;Traingle>(
triangleShapeSP);

if(trangleSP.get())
{
//为子类对象
}
</pre><br /><br />3.lexical_cast<br />基本类型转换<br /><pre name="code" class="c++">
String strNum = "3.1415926";
try
{
    int nNum = boost::lexical_cast&lt;int>(strNum);
}catch(boost::bad_lexical_cast e)
{
//转换失败
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jasonright.javaeye.com/blog/190757#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 23:00:53 +0800</pubDate>
        <link>http://jasonright.javaeye.com/blog/190757</link>
        <guid>http://jasonright.javaeye.com/blog/190757</guid>
      </item>
      <item>
        <title>截取中文输入法输入的字符串，更改编码为ANSI</title>
        <author>JasonRight</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jasonright.javaeye.com">JasonRight</a>&nbsp;
          链接：<a href="http://jasonright.javaeye.com/blog/188001" style="color:red;">http://jasonright.javaeye.com/blog/188001</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在全英文的XP中，在非unicode的程序中输入的中文会转为“？？”。<br /><br />通过截获WM_IME_COMPOSITION消息得到输入的字符串<br />ImmGetCompositionStringW得到Unicode<br />WideCharToMultiByte转换为ANSI<br /><br /><pre name="code" class="c++">
BOOL CchartestDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_IME_COMPOSITION)
	{
		HIMC hIMC;
		HWND hWnd=pMsg->hwnd;
		DWORD dwSize;
		WCHAR lpWideStr[20];

		hIMC = ImmGetContext(hWnd);

		dwSize = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);

		dwSize += sizeof(WCHAR);

		memset(lpWideStr, 0, 20);

		//get string in Unicode
		ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, lpWideStr, dwSize);

		//transfer to ANSI code
		int   iSize;
		LPSTR   pszMultiByte;
		int ChineseSimpleAcp = 936;
		
		iSize = WideCharToMultiByte(ChineseSimpleAcp,0,lpWideStr,-1,NULL,0, NULL,NULL);

		pszMultiByte = new char[iSize+1]/**sizeof(char)*/;

		WideCharToMultiByte(ChineseSimpleAcp, 0, lpWideStr, -1,	pszMultiByte, iSize, NULL, NULL );

		CString strText = pszMultiByte;

		delete pszMultiByte;

		ImmReleaseContext(hWnd, hIMC);

		return TRUE;
	}
		
	return Default();	
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://jasonright.javaeye.com/blog/188001#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 12:23:24 +0800</pubDate>
        <link>http://jasonright.javaeye.com/blog/188001</link>
        <guid>http://jasonright.javaeye.com/blog/188001</guid>
      </item>
  </channel>
</rss>