关闭

人脸确认系统demo开发笔录

766人阅读 评论(0) 收藏 举报

1、获取当前程序执行目录

CString getModulePath(void)
{
 char curPath[100];
 GetModuleFileName(NULL,curPath,100); 
 char   drive[100];  
 char   dir[100];  
 char   fname[100];  
 char   ext[100];     
    _splitpath(curPath,drive,dir,fname,ext);  
    CString   strDir;  
    strDir   +=   drive;  
    strDir   +=   dir;
 return strDir;
}

2、使用picture control加载图像

使用cximage的load()函数加载图像:

CxImage image;
  image.Load(filename, CXIMAGE_FORMAT_BMP);
  HBITMAP m_bitmap = image.MakeBitmap(m_picture_input.GetDC()->m_hDC);
  if (m_bitmap == NULL )
   AfxMessageBox(filename);
  m_picture_input.SetBitmap(m_bitmap);

在开始的时候,上面的代码一直不能成功,原因在需要把m_picture_input对应的picture control的type属性设为bitmap。

3、CEdit控件的数据控制DDX_TEXT

即使定义了函数

void CRegisterView::DoDataExchange(CDataExchange* pDX)
{
 CFormView::DoDataExchange(pDX);
 DDX_Text(pDX, IDC_TESTID, register_input);
}

在CEdit控件中输入数字后,调用register_input的值时,仍为空。解决办法:在读取register_input值时先调用UpdateData(true);而在写入register_input值时,后调用UpdateData(false);

4、单文档多视图解决方案

4、1在class CFaceIndentificationApp生成各个视图类

class CFaceIndentificationApp : public CWinApp
{
private:
 void create_different_views(void);  //初始化生成各个视图
public:
 CRegisterView * m_pRegisterView;
 CCheckInitView *m_pCheckInitView;
 CMainView* m_pMainView;
 CView* SwitchView(int view_id); // 选择函数
};

4、2在BOOL CFaceIndentificationApp::InitInstance()函数中加入代码段

if (!ProcessShellCommand(cmdInfo))
  return FALSE;
 create_different_views();  //生成各个视图
 SwitchView(3);   //初始化主页面
 // 唯一的一个窗口已初始化,因此显示它并对其进行更新
 m_pMainWnd->ShowWindow(SW_SHOW);
 m_pMainWnd->UpdateWindow();

4、3生成各个视图代码

void CFaceIndentificationApp::create_different_views(void)
{
 CDocument* pCurrentDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument();
 CCreateContext newContext;
 newContext.m_pCurrentDoc =pCurrentDoc;
 m_pRegisterView = new CRegisterView;
 ((CView*)m_pRegisterView)->Create(NULL,"RegisterView",WS_CHILD,CFrameWnd::rectDefault,m_pMainWnd,1,&newContext);
 m_pCheckInitView = new CCheckInitView;
 ((CView*)m_pCheckInitView)->Create(NULL,"CheckInitView",WS_CHILD,CFrameWnd::rectDefault,m_pMainWnd,2,&newContext);
 m_pMainView = new CMainView;
 ((CView*)m_pMainView)->Create(NULL,"MainView",WS_CHILD,CFrameWnd::rectDefault,m_pMainWnd,3,&newContext);
 //当文档模板创建视图的时候,会自动发送WM_INITIALUPDATE消息,
 //因此对于我们自己创建的视图,需要人工发送这条消息
 m_pRegisterView->OnInitialUpdate();
 m_pCheckInitView->OnInitialUpdate();
}

4、4选择视图代码

CView* CFaceIndentificationApp::SwitchView(int view_id)
{
 CView* pActiveView = ((CFrameWnd*)m_pMainWnd)->GetActiveView();
 CView* pNewView;
 switch (view_id) {
 case 1:
  pNewView = m_pRegisterView;
  break;
 case 2:
  pNewView = m_pCheckInitView;
  break;
 case 3:
  pNewView = m_pMainView;
  break;
 default:
  break;
 }
 // 交换视图的窗口ID,使RecalcLayout()可以工作
 UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID);
 ::SetWindowLong(pActiveView->m_hWnd, GWL_ID, ::GetWindowLong(pNewView->m_hWnd, GWL_ID));
 ::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp);
 // 显示新的视图,隐藏前一个视图
 pActiveView->ShowWindow(SW_HIDE);
 pNewView->ShowWindow(SW_SHOW);
 ((CFrameWnd*)m_pMainWnd)->SetActiveView(pNewView);
 ((CFrameWnd*)m_pMainWnd)->RecalcLayout();
 //重画
 pNewView->Invalidate();
 return pActiveView;
}

0
0

猜你在找
【直播】计算机视觉原理及实战—屈教授
【套餐】深度学习入门视频课程—唐宇迪
【套餐】Hadoop生态系统零基础入门--侯勇蛟
【套餐】嵌入式Linux C编程基础--朱有鹏
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】机器学习之凸优化——马博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21491次
    • 积分:270
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:6篇
    • 译文:0篇
    • 评论:2条
    最新评论
  • Snake 算法

    Jer656587: 你好!不好意思 打扰了 想要请教一些Snake算法的问题 急需 谢谢!

    image process
    生活