Posted on 03-07-2009
Filed Under (技术) by waterlin

最近在VC里写一个程序,要求把日志显示到界面上来。要做这种事情的情况很少,一般来说,我们都是把日志写到文本文件里。

如果只是很简单的程序,可以选用Edit控件,在界面上实现简单的日志显示功能。以下是最基本的步骤:

1) 创建Edit控件,并设置适当的属性

先用资源编辑器添加一个Edit控件到界面上,关联资源ID为IDC_LOG。注意选上风格WantReturn和MultiLine(多行);因为输出的是日志,Edit的可视空间可能会不够用,因此风格里最好选上Vertical Scroll和Auto Scroll这两个选项!

2) 添加与日志有关的数据成员

在对话框类的头文件里,添加数据成员:

CString _log; //存储日志的内容
CString _newline; //存储换行符

3) 初始化工作

在对话框的构造函数里,添加如下的代码:

char re[3] = {VK_RETURN, 0x0a};
_newline = re;
_log = “系统启动,已设置好与日志有关的一切”;

当然,也可以用\r\n赋值给_newline实现换行代码。

4) 在每次要输出日志的地方,用以下语句就可以在Edit控件里实现日志的刷新:

_log += _newline;
_log += “欲追加的日志”;
SetDlgItemText(IDC_LOG, _log);

因为是小程序,没有考虑到日志变量CString _log的容量问题。

基本的原理就是这样,可以根据情况进行适当的改进。

(0) Comments    Read More   
Posted on 02-07-2009
Filed Under (技术) by waterlin

相信每个人都会对管理自己的文献资料头痛不已!我自己的习惯是:把上网看到的好东西,要么直接保存为本地网页,要么贴成文本,放到硬盘的某个角落;至于电子书,就尽量分类放到不同的文件夹里。

这样方式保存的东西,时间一久,再去找自己需要的东西,就很麻烦了。只能借助于一些桌面搜索工具,不仅麻烦,而且还很难准确地搜出自己需要的内容。

Zotero是一个开源的资料管理系统,它是Firefox里的一个插件。利用这个软件,我就可以很好地管理自己的资料了。它可以通过给网页打快照来快速地保存网页到本地,还能新建条目来关联本地的电子书。Zotero除了有一个树形目录来进行分类外,还可以给条目打上标签,进行更加细分的交叉索引。在”便签”条中,您可以加入您的任何笔记、想法或其他记录。

收集了这么多资料,有了Zotero的分类功能,查找起来非常地方便。更贴心的是,Zotero还能在你写文章的时候,帮你自动生成参考文献。

现在,我日常生活中已经和ZoteroEvernote、Emacs这三个软件紧密不可分了。Zotero来管理我的资料,用博客来整理自己的经验(没办法,不写下来,一会就忘记了;不写成博客,压根就不会认真写,过几天自己都看不懂笔记了),用Evernote来记录一些稍纵即逝的灵感、想法,用Emacs来做长篇大论的写作(因为编辑效率高)。

提示:需要选定最常用的一台计算机来使用zotero管理文献资料,不确定能否合并数台计算机的数据库。

(3) Comments    Read More   
Posted on 02-07-2009
Filed Under (技术) by waterlin

1) 用MFC里的CFileFind类

下面是用CFileFind类读特定目录下的所有bmp格式文件的例子代码:

CString path;//需要枚举文件的路径
CFileFind finder;
BOOL bWorking = finder.FindFile(path + “\\” + “*.bmp”);
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}

2) 用FindFirstFile(),FindNextFile()和FindClose()这几个API函数。

(0) Comments    Read More   
Posted on 02-07-2009
Filed Under (技术) by waterlin

今天在用MFC写程序的时候,碰到一个奇怪的问题:在我用CFileDialog选择文件后,程序的其它地方,就提示我说找不到某个文件;这个文件的路径,我是用hard code的方法硬写在程序里方便测试的。

如果这个路径我用的是绝对路径,并不会出问题;如果是用相对路径,则会提示找不到文件。

查了一会MSDN,原来用CFileDialog打开文件后,程序默认的执行路径就得到了改变。这样的话,我在用CFileDialog打开文件后,上述的相对路径自然就要换一换了。于是程序就出了一些莫名其妙的错误~~

切记,使用CFileDialog会改变当前目录,比较稳妥的办法还是绝对路径来访问文件比较好。在程序刚一跑起来的时候,先用GetCurrentDirectory()或是GetModuleFileName()获得当前可执行文件所在的路径,并保存起来。以后即使是用CFileDialog改变了当前的路径,也能很容易地找回来。

(0) Comments    Read More