Vs2010 MFC 简单制作过程中的问题

来源:互联网 发布:计算机专业知乎 编辑:程序博客网 时间:2024/05/16 09:24

以前做过一段时间MFC,都忘得差不多了,最近又做了一个小界面。发现与vs2005中MFC有许多不同之处。

vs2010的Dialog基类默认选择的是“CDialogEx”。

1. 定时器不跳入OnTimer(UINT_PTR nIDEvent)处理函数的问题:

如果调用CWnd::SetTimer函数时最后一个参数为NULL,则通过WM_TIMER的消息处理函数来处理定时事件。

需要在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP()直接添加:ON_WM_TIMER(),但是手动添加往往会报错,static_cast的错误。

注意使用类向导来添加,当自己添加的afx_msg 响应不对时,往往类型不对。

添加WM_TIMER消息的处理函数的方法是,在VS2010工程的Class View类视图中找到要添加定时器的类,点击右键,选择Properties,显示其属性页,然后在属性页工具栏上点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数。

 

2.CComboBoxEx 的使用与 原来的CComboBox不同

添加项时,注意不能直接AddString,只能用InsertItem()来添加COMBOBOXEXITEM类型的。具体看msdnhttp://msdn.microsoft.com/zh-cn/library/cb8f2x66.aspx。下面只给出简单的添加文本的示例:

   COMBOBOXEXITEM   Item;
   Item.mask    CBEIF_TEXT   ;
   Item.pszText    _T("Text Sample");
   Item.iItem    0;//index
   m_comboboxex.InsertItem(&Item);

3.OpenCV 与 Picture控件显示图片的问题

要把opencv的窗口嵌入mfc框架

///@brief将使用OpenCV生成的窗口嵌入MFC框架///详细说明///@param[in]pWnd - MFC中显示图片控件的句柄 ///csWndName - OpenCV中生成窗口的名称 用于获取句柄///nTarWidth - 目标窗口的宽度///nTarHeight - 目标窗口的长度///@preNULL///@returnNULL///@retvalNULL///@postNULLvoid DisplayFrame::SetOpenCVWindow(CWnd *pWnd,CString csWndName, int nTarWidth,int nTarHeight){char *pWndName = csWndName.GetBuffer();cvNamedWindow(pWndName, 0);HWND hWnd = (HWND)cvGetWindowHandle(pWndName);//显示控件HWND hParent = ::GetParent(hWnd);//父窗口::SetParent(hWnd,pWnd->m_hWnd);::ShowWindow(hParent,SW_HIDE);//隐藏显示窗口控件pWnd->SetWindowPos(NULL, 0, 0, nTarWidth, nTarHeight, SWP_NOMOVE | SWP_NOZORDER);cvResizeWindow(pWndName, nTarWidth, nTarHeight);}
///@brief使用OpenCV中的函数对单张图片进行显示///详细说明///@param[in]csWndName - 目标显示窗口的名称,需使用OpenCV的中创建时的名称///pImg - 待显示图片的指针 ///@preNULL///@returnNULL///@retvalNULL///@postNULLvoid DisplayFrame::ShowPicture(CString csWndName,IplImage *pImg){char *pWndName = csWndName.GetBuffer();cvShowImage(pWndName, pImg);}

4.控件的美化问题

之前用的CDialog,要美化界面,需要ps一些位图,设置大小重绘之类的。以为现在的CDialogEx可以直接设置多个样式,查找许久资料后发现,只不过可以设置背景颜色和图片,其他的没什么,要美化界面还是需要之前的操作。

SetBackgroundColor(RGB(0x79,0xcd,0xcd));

SetBackgroundImage()

 


0 0
原创粉丝点击