人脸确认系统demo开发笔录

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值