1,定时器的使用
SetTimer(1, 1000, NULL); //启动定时器1, 定时1000毫秒, 使用默认的处理函数 OnTimer()
KillTimer(1); //关闭定时器1
处理函数的实现
void CMFCView::OnTimer(UINT_PTR nIDEvent) // CMFCView 这个可以根据项目需要变更的,它只是表明一个归属 { // TODO: 在此添加消息处理程序代码和/或调用默认值 switch(nIDEvent) { case 1: { //AfxMessageBox("Timer is running!");//定时器时间到,强出一对话框,表明定时器已经运行。 ImgProController(); //定时处理图像 break; } case 2: { break; } default: { break; } } CFormView::OnTimer(nIDEvent); // CFormView 这个类不能动 }
使用起来非常方便和简单,但想要它运作起来,还有两个重要点必需打通:
A,在相应的类的头文件public:下声明 afx_msg void OnTimer(UINT_PTR nIDEvent);
B,消息映射表中应当添加 ON_WM_TIMER() , 格式上独占一行
由于好久没有使用,一时间又记不全,百度好久之后才通过类向导的方式查出问题所在,故此,记录在案,以绝后患!!!
2,文件路径提取
推荐 使用 CFileDialog 类重写 自带的“打开”方法,更能精确控制对话框,也方便后续提取文件路径和文件名
CFileDialog dlg( TRUE, NULL ,NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, // OFN_NOCHANGEDIR 是指不变更当前exe工作默认目录 "图像 (*.jpg; *.png)|*.jpg; *.png|视频 (*.avi; *.mp4)|*.avi; *.mp4|所有文件 (*.*)|*.*||", // 可供选择项目约束,注意组合方式 NULL); //文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。 dlg.m_ofn.lpstrTitle = _T("请选择 图像 或者 视频文件"); // 打开文件对话框的标题名 if( dlg.DoModal() != IDOK ) // 判断是否获得图片 return;
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1
GetFilePath()函数,是获取打开文件的路径的函数
GetCurrentDirectory 相对路径,随时会变
如果是工作路径, 用GetWorkingDirectory
如果是当前可执行程序, 用GetModuleFileName(NULL, p, size) 应用的绝对路径,基本不变
HMODULE module = GetModuleHandle(0);
CHAR buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof buf);