点击【打开文件】按钮,选择文件打开,将数据处理为图像(默认处理第10帧开始),然后将图像显示在图片控件。
注:整个项目有关图像处理的操作基本用OpenCV实现。
1、添加按钮控件
在窗口界面,将控件拖进即可,控件在【view】->【TOOL Box】中。
2、鼠标右击更改点击【属性】更改属性
可更改:
名称(Caption)
ID(最好按功能名更改):如打开文件可命名为IDC_BUTTON_OPENFILE。
其他按自己的需求
3、添加点击响应事件
选中控件右击——>选择【添加事件处理程序】——》选择【BN_CLICKED】。如下:
4、会自动跳转至处理程序,然后根据实际需求编写程序
///TRUE为OPEN对话框,FALSE为SAVE AS对话框
CFileDialog dlg(TRUE);
CString OpenFilePath;
if (dlg.DoModal() == IDOK)
OpenFilePath = dlg.GetPathName(); //获取文件路径
OnPaint();
//CString转string
USES_CONVERSION;
string file_path(W2A(OpenFilePath));
首先,在BOOL XXXXXXDlg::OnInitDialog()函数中加入以下窗口初始化代码:
//注:224*4, 126*4是窗口尺寸,可以更改
CRect rect;
GetDlgItem(IDC_STATIC_IMG)->GetWindowRect(&rect); //IDC_WAVE_DRAW为对应Picture Control的ID
ScreenToClient(&rect);
GetDlgItem(IDC_STATIC_IMG)->MoveWindow(rect.left, rect.top, 224*4, 126*4, true); //固定Picture Control控件的大小
namedWindow("view",CV_WINDOW_AUTOSIZE);
HWND hWnd = (HWND)cvGetWindowHandle("view"); //创建显示窗口
HWND hParent = ::GetParent(hWnd); //父窗口
::SetParent(hWnd, GetDlgItem(IDC_STATIC_IMG)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);
然后,在按钮单击事件函数中添加代码:
//获取图像并显示
img = get_img(csvData_Slip, 1920, 1080, current_frame-1, Color);//这一句是我项目中的获取图像函数,要做更改
CRect rect;
GetDlgItem(IDC_STATIC_IMG)->GetClientRect(&rect); //获取图片控件窗口
Rect dst(rect.left, rect.top, rect.right, rect.bottom); //窗口位置
resize(img, current_img, cv::Size(rect.Width(), rect.Height())); //适应控件窗口大小
imshow("view", current_img); //显示
一定要在代码段前后加上这两句,不然尤其编辑框的参数没办法更新显示!
//数据更新
UpdateData(TRUE);
/
代码段
/
UpdateData(FALSE);
// 显示消息对话框 ,参数按需求更改
nRes = MessageBox(_T("数据读取完成!"), _T("数据读取"), MB_OKCANCEL | MB_ICONASTERISK);
// 判断消息对话框返回值。如果为IDCANCEL就return,否则继续向下执行
if (IDCANCEL == nRes)
return;
MessageBox的参数可以参考:http://www.jizhuomi.com/software/171.html
1、当我们需要在单个整个文件用到某个变量时,需要将它定义为全局变量,只需要在对话框Cpp文件的开头申明即可。
2、当我们有好几个文件或者几个类之间需要相互调用的话,就需要把变量定义为类的公共成员变量,在对话框头文件添加即可。
3、在文件1调用文件2中的全局变量,还有一种方式就是在文件1中将变量声明为 extern,这样就可以自动在其他文件查找这个变量。
END!