【C++基本功补习】定时器使用及文件路径提取

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); 




你可能感兴趣的:(【C++基本功补习】定时器使用及文件路径提取)