MFC程序总结
一、MFC 获取系统时间
GetCurrentTime
GetCurrentTime函数可以用来获取系统时间,用于VC编程。
使用方法
在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:
CTime t = CTime::GetCurrentTime(); //获取系统日期
int d=t.GetDay(); //获得几号
int y=t.GetYear(); //获取年份
int m=t.GetMonth(); //获取当前月份
int h=t.GetHour(); //获取当前为几时
int mm=t.GetMinute(); //获取分钟
int s=t.GetSecond(); //获取秒
int w=t.GetDayOfWeek(); //获取星期几,注意1为星期天,7为星期六
如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:
CTime t1( 1999, 3, 19, 22, 15, 0 );
CTime t = CTime::GetCurrentTime();
CTimeSpan span=t-t1; //计算当前系统时间与时间t1的间隔
int iDay=span.GetDays(); //获取这段时间间隔共有多少天
int iHour=span.GetTotalHours(); //获取总共有多少小时
int iMin=span.GetTotalMinutes();//获取总共有多少分钟
int iSec=span.GetTotalSeconds();//获取总共有多少秒
或者,获得当前日期和时间,并可以转化为 CString
CTime tm=CTime::GetCurrentTime();
CString str=tm.Format("%Y-%m-%d");//显示年月日
CString str=tm.Format("%Y-%m-%d %H:%M:%S");//显示年月日
获取系统时间
time_t t = time(NULL);//1970年1月1日0点到现在多少秒
char *ctime(const time_t *clock);//将秒数转化为字符串
//或
CTime::GetCurrentTime(),
GetSystemTime()
二、关于COleDateTime 和 CString的互相转换问题
从COleDateTime转换成CString
例如:
COleDateTime time = COleDateTime::GetCurrentTime();
CString CStime=time.Format( "%Y-%m-%d %H:%M:%S ");
从CString 转换成 COleDateTime
例如:
CString CStime("2001-8-29 19:06:23");
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(CStime, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
time.setFotmat(nYear, nMonth, nDate, nHour, nMin, nSec);
在MFC下要实现文件夹的递归遍历,可用CFileFind类,依次读取文件夹下的子文件夹和文件,并判断通过判断是文件夹还是文件来决定递归遍历(事实上,CFileFind本身还可以判断文件具体属于哪种类型,例如压缩文件、系统文件等)。另外要注意,遍历过程中会读到"."文件和".."文件,可通过fileFinder.IsDots()函数识别。
相关代码:
//Bayes测试函数(递归)
void CTestPage::BayesCategoryTest(BayesTest* bt, CString tp)
{
CFileFind fileFinder;
CString filePath = tp + _T("//*.*");
BOOL bFinished = fileFinder.FindFile(filePath);
while(bFinished) //每次循环对应一个类别目录
{
bFinished = fileFinder.FindNextFile();
if(fileFinder.IsDirectory() && !fileFinder.IsDots()) //若是目录则递归调用此方法
{
BayesCategoryTest(bt, fileFinder.GetFilePath());
}
else //再判断是否为txt文件
{
//获取文件类型
CString fileName = fileFinder.GetFileName();
int dotPos=fileName.ReverseFind('.');
CString fileExt=fileName.Right(fileName.GetLength()-dotPos);
if(fileExt == _T(".txt")) //若是txt文件则开始分类测试
{
CString category = fileName.Left(fileName.GetLength()-8); //应属类
CString result = bt->StartTest(fileFinder.GetFilePath()); //所分类
int n = m_ListCtrl.GetItemCount();
m_ListCtrl.InsertItem(n, fileName,0);// 插入为第n行第一列的内容:文件名
m_ListCtrl.SetItemText( n,1, category) ; // 设置第n行第列的内容:应属类
m_ListCtrl.SetItemText(n,2, result) ; // 设置第n行第列的内容:所分类
if(category == result)
m_ListCtrl.SetItemText(n,3, _T("Correct!")) ; //判断正确
else
m_ListCtrl.SetItemText(n,3, _T("Wrong!")) ; //判断错误
}
}
}
fileFinder.Close();
}
关于程序添加背景图片的方法!
此文系转载,忘了博客地址了
VC++中如何给对话框加背景图片(2010-03-22 16:57:59)
方法一:
1、声明成员变量CBrush m_brush;
2、在InitDialog中添加代码:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1是图片资源ID m_brush.CreatePatternBrush(&bmp); |
3、重载对话框的OnCtlColor,改最后的返回值:
1
|
return ( HBRUSH )m_brush; |
方法二:
把下面这段代码加进OnPaint()里就行了
CPaintDC
dc( this );
CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加 CBrush brush; brush.CreatePatternBrush(&bitmap); CBrush* pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(0,0,200,200); // 这些参数可以调整图片添加位置和大小 dc.SelectObject(pOldBrush); |
方法三:使用StretchBlt()函数,具有图像自适应窗体功能
CPaintDC
dc( this );
CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加 CBrush brush; brush.CreatePatternBrush(&bitmap); CBrush* pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(0,0,200,200); // 这些参数可以调整图片添加位置和大小 dc.SelectObject(pOldBrush); |