MFC中一些控件的使用和Opencv的一些变量转换

来源:互联网 发布:掰弯体验知乎 编辑:程序博客网 时间:2024/06/04 20:10

这几天需要做一个小的demo,用到了MFC,其实本来想用.net,听说更方便,但谁让我对mfc熟悉呢,懒也没办法。

下面是昨天遇到的一些问题:

Opencv中IplImage与Mat的转换

IplImage *image;Mat frame;frame = image;image = (IplImage)frame;
CString与char的转换

CString strFile = dlg.GetPathName(); // 全路径DemoFile = strFile;tempfile = DemoFile.GetBuffer(DemoFile.GetLength());
只有遇到一个问题

txt文件中存储了一连串的数字,用空格隔开,我需要一行一行的读取后,在一个一个的读取

最后采用c++文件读写的方式完成

char seps[]=" ";char *token;char bb[10000];datafile.getline(bb,1000);token  = strtok(bb,seps);number=atoi(token);token = strtok(NULL,seps);while(token!=NULL){        number=atoi(token);token = strtok(NULL,seps);center.x = number;number=atoi(token);token = strtok(NULL,seps);center.y = number;number=atoi(token);token = strtok(NULL,seps);radius = number;circle( frame, center, radius, color, 3, 8, 0 );}
还有一个是mfc中大家经常用到的OnTimer()函数

本来我也一直认为这是个多线程问题

但我发现其实OnTimer函数可以不用传递参数就可以使用主程序的变量

因此我认为其实这个函数并不是一个多线程

紧紧是过一段时间执行一次而已

但是如何停止OnTimer的运行呢?

网上说可以用

CDialog::OnTimer(NULL);
我试过了,并不可行

最后我加了判断让OnTimer函数空运行解决了问题

还有一个,很多人可能不太喜欢编写mfc中打开文件对话框的程序

给大家一个模板

CString strAppName;//当前工作目录char *tempfile;::GetModuleFileName(NULL, strAppName.GetBuffer(_MAX_PATH), _MAX_PATH);strAppName.ReleaseBuffer();int nPos = strAppName.ReverseFind('//');strAppName = strAppName.Left(nPos + 1);LPCTSTR szFilter = "Chart Files (*.*)|*.*|Worksheet Files (*.*)|*.*|Data Files (*.*;*.*)|*.*; *.*|All Files (*.*)|*.*||";CFileDialog dlg(FALSE,NULL ,strAppName+"file",OFN_ENABLESIZING ,szFilter,NULL); // 打开用TRUE, 保存用 FALSEif(dlg.DoModal() == IDOK){        CString strFile = dlg.GetPathName(); // 全路径        DemoFile = strFile;        tempfile = DemoFile.GetBuffer(DemoFile.GetLength());datafile.open(tempfile);}
最后的tempfile就是所打开文件的路径名

datafile是一个ifstream变量

最后说一下CString转char*中可能大家会遇到一个W_char无法转换为char的问题

这个事编译器设置的问题

w_char和char的字节数不相同导致

修改编译器的属性,改为支持多字节就可以了(默认为union字符)

接这些吧,也给自己总结下。