• 前几天,写一个RTF站换为TXT文件格式的程序。这个程序主要利用richeditorCtrl来实现此项功能。在具体实现时使用了ITextServices和ITextDocument两个接口。也就是使用无窗口的RichEditor。关键代码如下:
    DWORD CALLBACK  EditStreamInBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb,LONG *pcb)
    {
     //将输入数据通过dwCookie参数,传递给pbBuff,也就是传递给控件 
     WideCharToMultiByte(CP_OEMCP,NULL,(LPCWSTR)dwCookie,-1,(LPSTR)pbBuff,cb,NULL,FALSE);
     return 0;
    }

    DWORD CALLBACK EditStreamOutBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb,LONG *pcb)
    {
     //将控件的数据以txt的形式,从pbBuff复制到dwCookie,dwCookie可以为外部保存txt的变量地址
     strcpy((LPWSTR)dwCookie,A2T((char*)pTx));
     return 0;
    }

    CString RtfToText(ITextServices* pTextServ,TCHAR* szRTF)
    {
     WCHAR szBuffer[4096];
     //接收rtf
     EDITSTREAM es;
     es.dwError = 0;
     es.pfnCallback = EditStreamInBack;
     es.dwCookie = (DWORD_PTR)szRTF;//传递RTF数据
     LRESULT lResult;
     pTextServ->TxSendMessage(EM_STREAMIN,(WPARAM)SF_RTF,(LPARAM)&es,&lResult);

     //返回txt
     es.dwCookie = (DWORD_PTR)szBuffer;//接收RTF数据 
     es.pfnCallback = EditStreamOutBack;
     pTextServ->TxSendMessage(EM_STREAMOUT,(WPARAM) SF_TEXT,(LPARAM)&es,&lResult);
     return szBuffer;
    }

    当我进行测试使用如下的rtf数据;
    {\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fnil MS Shell Dlg 2;}}
    {\colortbl ;\red0\green0\blue0;}
    \viewkind4\uc1\pard\tx720\cf1\lang2052\f0\fs18 gfjhfg\f1\fs20\par
    }
    我直接将该数据赋值给一个CString. 结果EditStreamOutBack函数从来都没有被调用。而当我将接收数据的格式该为:SF_RTF时,该函数被调用。这使得我郁闷了好几天。最后怀疑是否RichEditorCtrl具有将rtf2txt的能力。

    今天我终于发现了问题所在,我的rtf测试数据存在问题,当该数据被赋值给CString后,"\"就变成了未知的字符。也就是该数据不是一个rtf格式的数据了。所以EditStreamOutBack没有被回调。将"\"修改为"\\",问题解决了。虽然我在调试时也看到了这种现象,但没有给与足够的重视。如果早期重视的话,不至于不能成功。
    在今后的开发中,当问题出现时,一定要注意细节。

  • 2007-01-12

    debug into F10 - [感想&日记]

    在开发中思维要活跃是非常重要的,要有多向思维的意识。

    我在画图时不知道为什么会在弹出SearchDlg对话框时会收到两次WM_PAINT消息,这样会使得我的画图窗口在没有加载button位图时就画图了,所以在等到真正加载玩button位图资源时会在上一次绘图的基础上在画图,这样就出现了图片的叠加了。

    我原本设想如何将第一个WM_PAINT消息屏蔽掉,怎样将SearchDlg窗口探测到,我还没有具体的解决步骤。

    在今天坐车回家时,我忽然想起来如果在Refresh方法时首先将原来的button资源删除掉也许就不会出现这样的问题了。虽然还会收到两次WM_PAINT消息,但在第一次收到时会因为没有位图资源而不会画出来什么东东了。

    此时,我想应该自己进行反思自己,现在当在开发中遇到BUG时,总是没有去仔细研究代码而是凭着经验分析问题在哪里,这种做法在一定程度时是好的习惯,但还要发挥自已独立开发时不懂什么时候的好习惯。

    记住啊,首先分析代码。F10!!.

  • 从不锈钢的水龙头一滴一滴的滴着自来水,然后打出现一行字幕“保护水资源”。

    这是北京某路公交车电视的一个则公益广告!稍微懂点文法的人都知道这是在保护水资源吗?

    车载媒体作为公交车对外宣传的窗口,竟有如此之缺乏水准的广告!

  • New year is coming, It is unusual for me in 2006. In that year, I graduated from Beijing Normal university and faced with lots of difficulty because of my conditions. Though I got the master degree and majored in Educational technology in Beijing Normal University which is the best school in the educational technology. I encountered challenges in the company. The most serious difficulty is my feeling, which I always think I am not suitable my current post because of my condition.

    I hope I will find my desired postion which meet me and my family.

    Good luck!

  • 我现在所从事的工作与自己的专业越来越远了。从最开始的常用windows应用软件开发到在infenon平台上做手机的开发,啊就是所谓的嵌入式开发,再到现在的在windows ce做PDA的开发,我觉得距离教育技术越来越远了。

    从去年到联想上班才开始我的真正意义上的软件开发到现在也就是一年的光景,在软件开发这个行业可以说外企做过,CMM4规格的企业也做过,编译上几十万行代码的软件(1G内存 p4 至少 15分钟)也参与过。说来一年来我的个人见识的确广了,经验多了一些。细细想来我所做的只是自己的个人爱好,爱上软件开发的行业。离开BenQ时想找个从事教育软件开发的企业.....未能如愿。

    这些日子,不! 是这段日子。我一直在看一些软件开发的书籍,的确从中受益匪浅,并且还想看看那些老外---真正意义上的C++专家写的书,对!要看e文,总觉得自己不扎实,总想看看那些令人仰慕的牛人写的书。

    一时间忘记了我的教育技术,今天我了几篇教育技术的文章,顿时倍感亲切,激动。虽然我对教育技术有些认识偏颇。对于这个专业一般的意义上的研究是没有什么意义的。我想对于教育技术,从目前看应该看看以下几个人的研究思路。

    一、杨开城老师的理论研究。

    二、黄容怀老师的研究 。

    三、何克抗老师的研究。