1 在cpp里面添加自定义消息定义
#define WM_ACQUIRE_DATA_MSG (WM_USER + 101)
2 在头文件中添加消息处理函数
afx_msg LRESULT OnAcquireData(WPARAM wparam, LPARAM lparam);
3 在cpp里面添加消息映射
ON_MESSAGE(WM_ACQUIRE_DATA_MSG, &CNanoViewView::OnAcquireData)
4 实现消息处理函数,在这里调用了菜单命令处理函数
LRESULT CNanoViewView::OnAcquireData(WPARAM wparam, LPARAM lparam)
{
OnVideoAcquiredata();
return NULL;
}
5 在MDI中获得CView指针
CView* GetView()
{
CWinApp* winApp = AfxGetApp();
if (winApp == NULL)
{
return NULL;
}
CDocManager* pDocManager = winApp->m_pDocManager;
if (pDocManager == NULL)
{
return NULL;
}
POSITION posDocTemp = pDocManager->GetFirstDocTemplatePosition();
while (posDocTemp)
{
CDocTemplate* pDocTemplate = pDocManager->GetNextDocTemplate(posDocTemp);
if (pDocTemplate == NULL) continue;
POSITION posDoc = pDocTemplate->GetFirstDocPosition();
CDocument* pDoc = pDocTemplate->GetNextDoc(posDoc);
if (pDoc == NULL) continue;
POSITION posView = pDoc->GetFirstViewPosition();
if (posView==NULL)
{
continue;
}
return pDoc->GetNextView(posView);
}
return NULL;
}
6 下面包括两种消息处理,一种是通过自定义消息调用菜单命令, 一种是直接发送菜单命令消息(推荐,省事不少)
void CNanoViewView::OnToolEfem()
{
CView* pView = GetView();
//发送自定义消息
//::SendMessage(pView->m_hWnd, WM_ACQUIRE_DATA_MSG, NULL, NULL);
//直接发送菜单命令消息
::SendMessage(pView->m_hWnd,WM_COMMAND, ID_VIDEO_ACQUIREDATA, NULL);
typedef void (WINAPI* TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary(_T("ZASCtrlLib.dll"));
if (hmod == NULL) { AfxMessageBox(_T("Fail")); }
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress(hmod, "ShowEFEM");
if (lpproc != (TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod);
}