博文
CImg - 跨平台的C++的图像处理库(2010-07-01 18:10:00)
摘要:CImg是一个跨平台的C++的图像处理库,提供了加载、处理、显示、保存等一系列功能,其中的图像处理功能尤其强大。
主页地址:http://cimg.sourceforge.net/
下载地址:http://cimg.sourceforge.net/download.shtml
载时注意应该下载源码包,里面附带的大量的例程。而实际上CImg库只是一个头文件CImg.h,这个头文件里包含了CImg库所有的代码。
另外不要错过下载列表中的一个部分完成的http://cimg.sourceforge.net/CImg_reference_chinese.pdf......
[推荐]C/C++编程遇到问题和编码时要注意的地方(2010-07-01 18:00:00)
摘要:来源百度百科
http://baike.baidu.com/view/118570.htm?fr=ala0_1_1
遇到问题的时候:
1,不要怨天怨地。出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。
2,要掌握工具。最低限度你要会写Log,最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我说,Dll不能调试,我发现可以;有人说多线程不能调试,我发现可以;有人说COM不能调试,我发现可以;有人说 IE插件不能调试,我发现可以;有人说OE插件不能调试,我发现也可以。当然,你确实会遇到不能调试的时候,当年我们做东芝芯片的嵌入程序,一个组都没有 一个仿真器和调试器,但是至少可以用Log嘛,无非是麻烦点。
3,分析问题要有逻辑。遇到问题可以先把所有的可能性都列出来,然后一个一个分析,肯定能找到原因的。
4,要学会隔离问题。问题涉及到的代码越多,越难以理解,问题越难以解决。遇到这样的情况,可以利用Log或者调试器,一行代码一行代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。
5,千万不要懒惰,不要事事求别人。一次复杂的调试过程就像一部侦探剧,如果你有非常好的逻辑性,那这部剧的主角就是福尔摩斯,剧情一定非常精彩。我说这个是有巨大风险的,说真的我帮人调东西挺上瘾的,很有意思。但是我还是要告诉大家,一次高难度的调试之后,你的满足感绝对不亚于写了一个伟大的程序。 要想不遇到问题,写代码的时候:
1,要对写出来的代码负责。我很佩服那些写代码写100行都不执行一次的 高手,如果他们最后不被低级错误困扰的话我就更加的佩服了。我写程序几乎是写一行两行就要执行一次,每句话我都要确保执行效果跟我的预期一致。没错这样写的时候 可能慢一些,但是调试的时候很轻松,我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一般人高。很多人学习新东西的时候喜欢把例子抄一遍,运行一下,改改,再运行。我喜欢一句一句的抄例子,抄一句两句执行一次,这样可以把例子透彻的理解,而且很难会遇到出现了问题找不到原因的时候。
2,函数体功能块不要过长。我认为我的智商并不高,我很难接......
TCHAR*(IP格式字符串)转 struct in_addr(2010-06-29 16:24:00)
摘要:本文代码完成"192.168.1.1"这类的字符串转换到struct in_addr中存储
// TCAHR to char
BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
DWORD dwMinSize;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
if(dwSize < dwMinSize)
{
return FALSE;
}
WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
return TRUE;
}
//////////////////////////////////////////////////////////////////
char temp[18];
DWORD dwAddr;
struct in_addr devIP;
TCHAR szIP[] = _T("......
windows下临时文件读写(2010-06-25 16:59:00)
摘要:临时文件的使用
正规软件经常用到临时文件,你经常可以会看到C:\Windows\Temp目录下有大量的扩展名为tmp的文件,
这
些就是程序运行是建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数
GetTempFileName()获得。它的第一个
参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,
第四个参数用于得到建立的临时文件名。得到此临时文件名以后,你就可以用它来建立并操作
文件了,如:
char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];
GetTempPath(_MAX_PATH, szTempPath);
GetTempFileName(szTempPath,_T
("my_"),0,szTempfile);
CFile m_tempFile(szTempfile,CFile::
modeCreate|CFile:: modeWrite);
char m_char='a';
m_tempFile.Write(&m_char,2);
m_tempFile.Close();......
C/C++ * 在输入流中的跳跃作用(2010-06-24 09:12:00)
摘要:e.g.
scanf("%d %*d %d",&a,&b);
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。
......
CString的Format方法使用技巧总结(2010-06-19 10:34:00)
摘要:CString的Format方法使用技巧总结(int|float|double转换为
CString)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://flyxxtt.blogbus.com/logs/44052998.html
在MFC程序中,使用CString来处理字符串是一个很不错的选择。CString
既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给
我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转
换为CString字符串只需一行代码就可以实现。
先看看Format用于转换的格式字符:
%c 单个字符
%d
十进制整数(int)
%ld 十进制整数(long)
&nbs......
自定义CEdit等控件文本颜色等属性(2010-06-18 11:38:00)
摘要:重载DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)方法
其他属性的修改类似
void CUIText::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int iSave = pDC->SaveDC();
CString strText;
CRect rtWin;
GetClientRect(&rtWin);
pDC->SetBkColor(COLOR); // 设置背景色
pDC->SetTextColor(m_txColor); // 设置文本颜色
GetWindowText(strText); // 获取文本
pDC->DrawText(strText,&rtWin,m_dwDrawFlag); // 重新绘制文本
pDC->RestoreDC(iSave);
ReleaseDC(pDC);
}
......
VC实现当前程序退出后重启(关键代码段)(2010-06-08 17:34:00)
摘要:将该段代码置于Onclose或自定的响应消息的函数中
TCHAR szPath[MAX_PATH]; //
GetModuleFileName(NULL, szPath, MAX_PATH); //获取当前应用程序的全路径
//定义俩变量,具体的请参见msdn
STARTUPINFO startupInfo;
PROCESS_INFORMATION procInfo;
memset(&startupInfo,0x00,sizeof(STARTUPINFO));
startupInfo.cb = sizeof(STARTUPINFO);
// 这个变量是标记
if(m_bRestart)
{
// 这句是决定命运的关键 ::CreateProcess(szPath,NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&startupInfo,&procInfo);
}
......
二叉树的先序遍历------零基础学数据结构讲座(2010-06-05 13:16:00)
摘要:二叉树的先序遍历的递归定义如下:如果二叉树为空,则执行空操作。如果二叉树非空,则执行以下操作:
(1)访问根结点。
(2)先序遍历左子树。
(3)先序遍历右子树。
在二叉树先序的遍历过程中,对每一棵二叉树重复执行以上的递归遍历操作,就可以得到先序序列。例如,在遍历根结点A的左子树
{B,D,E,G,H,I}时,根据先序遍历的递归定义,先访问根结点B,然后遍历B的左子树为{D,G},最后遍历B的右子树为{E,H,I}。访问过
B之后,开始遍历B的左子树{D,G},在子树{D,G}中,先访问根结点D,因为D没有左子树,所以遍历其右子树,右子树只有一个结点G,所以访问G。
B的左子树遍历完毕,按照以上方法遍历B的右子树。最后得到结点A的左子树先序序列:B、D、G、E、H、I。
依据二叉树的先序递归定义,可以得到二叉树的先序递归算法。
void PreOrderTraverse(BiTree T)
/*先序遍历二叉树的递归实现*/
{
if(T)
/*如果二叉树不为空*/
{
printf(“%2c”,T->data......
Linux开放实验室(2010-05-24 15:19:00)
摘要:原文 http://www.oschina.net/bbs/thread/8101?lp=1
简介
为方便广大Linux软件开发爱好者,轩辕高端IT培训中心于2009年10月设立了Linux开放实验室,轩辕Linux开放实验室提供了完整的 Linux软件开发环境,包括:Redhat Enterprise Linux 5.4、C/C++(GCC、GDB)、make、Java、Python、Perl、C++ Boost、C++ ACE、C++ OTL、Oracle、DB2、MySQL、Tomcat...,囊括了网络、多线程、数据库等服务器端软件开发的各个方面。
Linux开放实验室典型用途
* 熟悉Linux操作系统,如系统命令、Shell编程、vi等编辑器;
* C++语言的学习与软件开发,包括基于Boost和ACE的软件开发;
* C++数据库开发,OTL;
* Java语言的学习与软件开发;
* Java数据库开发,jdbc;
* Python、Perl等脚本语言的学习与软件开发;
* 更多您能发掘到的用途...
开发环境
* 操作系统:Redhat Enterprise Linux 5.4;
* C/C++:GCC工具链(g++/gcc 4.4.0/4.1.2/3.4.0、gdb 6.8)、GNU make 3.81、GNU autotools 2.59等;
* C++第三方库:Boost 1.40、ACE 5.7.4、OTL 4.0;
* Java:Java se 6(SUN jdk 1.6.0_16);
* Jdbc:Oracle ojdbc14、MySQL mysql-connector-java-5.0.8;
* 数据库:Oracle 10g 企业版、DB2 express-C 9.7、MySQL 5.0.77;
* Python 2.4.3/2.6.4、Perl 5.8.8;
* 版本控制:CVS 1.12.13
* ...
实验室面向的人群
* 所有能通过互联网登录到实验室服务器的朋友。
开始使用
在开始使......