gougou 的blog

Boost字符串处理库

lexical_cast实现字符串和基础数据类型之间的转换。

format用于字符串格式化。

定制自绘画的ComboBox高度

今天写了一个自绘画的ComboBox,结果发现一个以前从来没有注意的问题,就是设定了OwnerDraw样式的ComboBox的高度被系统自动设定为比普通的ComboBox大那么几个像素,重载MesureItem方法,定制列表项目的高度也不解决问题,最后发现只要重载PreSubclassWindow方法,给ComboBox发一个CB_SETITEMHEIGHT的消息就可以了,代码示意如下

使用标准模版库的流处理CSV文件

标准模版库中的文件流支持>>操作符号重载,可以方便的实现数据导入和类型转换,但是有一个比较弱智的限制就是输入的字符串只能用空格分割,不支持逗号分割,今天处理csv文件,用了一个比较龌龊的方法就是,将所有的逗号先替换为空格,然后导入,代码示意如下

  1. ifstream fRoad(szFile.c_str());
  2.  
  3. if (!fRoad)
  4. throw e_open_file_fail;
  5.  
  6. entities.clear();
  7.  
  8. char buffer[0xFF] = {0};
  9.  
  10. while (!fRoad.eof())
  11. {
  12. fRoad.getline(buffer, sizeof(buffer));
  13. string szLine=buffer;
  14. replace_if(szLine.begin(),szLine.end(), //range
  15. bind2nd(equal_to<char>(),','), ' ');
  16. istringstream ssLine(szLine);
  17. road_entity entity;
  18.  
  19. ssLine >> entity;
  20. .....
  21.  
  22. istringstream& operator>>(istringstream& ss, road_entity& e)
  23. {

使用Boost中的Format格式化标准模版库的string

标准模版库中的string有一个很大的缺陷,就是没有类似于sprintf和CString的format方法, 当格式化字符串的时候没有这个方法是非常不爽的。幸好boost中提供了format库,可以实现标准模版库string类的格式化,更强的一点是boost的format支持强类型的数据检查,用法稍微有点怪异,见下面的示例
#pragma warning(disable: 4018) // signed/unsigned mismatch
#include "boost/format.hpp"
using namespace boost;

...
string szCon=str(format("'[TrainNo]'== '%s'") % pLogic->m_sTrain);

改造了一下SiteMenu,加入了文章数目的显示

hoho,发现这年头,一定要把PHP弄懂后自己diy网站才比较好玩.

修好了无效的Image Filter过滤器

这两天抽时间,好好看了看PHP,花了半个小时的调试,终于修好了无效的Image Filter过滤器

泛型算法同指针

一般书中介绍泛型算法的时候,举得例子都是使用的迭代子,比如

sort(A.begin(), A.end());

事实上,指针也可以看成是一种更加灵活的迭代子,泛型算法同样可以用于指针,比如如下示例

Foo* pFoo;

sort(pFoo, pFoo+ 100);

在VC中实现控件容器

在VC6中设计器不提供类似Delphi,.Net中的容器的控件Panel组件,因此做复杂界面的时候比较麻烦,为了模拟容器控件的效果,我们可以通过创建一个无边框的Dialog,将其停靠到主界面上来仿真。代码示意如下。

BOOL CDivideSettingDetail::OnInitDialog()
{
CCommDlg::OnInitDialog();

CWnd* pWnd = GetDlgItem( IDC_TRAIN );
CRect rect;
pWnd->GetWindowRect( &rect );
ScreenToClient( &rect );

InitTrainDetail();
TrainDetail.Create(IDD_015_1, this);
TrainDetail.ShowWindow( WS_VISIBLE | WS_CHILD );
TrainDetail.SetWindowPos( pWnd, 0, rect.top, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOZORDER );
TrainDetail.ShowWindow(SW_SHOW);

上面的IDC_TRAIN是一个用来定位的控件,设计时将它设置为不可见即可

Html Help 2注册工具

VS.Net 中的帮助是基于Html Help 2的格式的,它不像Chm那样,一个文件就可以直接运行,必须经过一些繁琐的注册步骤才行,微软提供的注册模块是基于MSI的,非常不好用。

我写了一个安装HtmlHelp2的工具,两种运行模式,一种是GUI的,一种是命令行的,支持Merge Topic和Plugin两种注册方式,可以同时支持多个target,包括VS.Net2003/2002和Delphi8/Delphi2005等。

最新版本是1.2---更新日期是2005/06/05

下载:http://www.sharpplus.com/downloads/RegH212.zip

Windows的一个焦点控制问题

在OnExit事件中不要写手工改变当前焦点的代码,因为Windows这时会不知道到底哪个才是要获取焦点的控件,如果这么做的话一个有趣的现象就是,你会发现你的当前活动的编辑框由可能无法正确绘制闪烁的光标。

同步内容