⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventhandler.cpp

📁 i am server im imi mim im im
💻 CPP
字号:


#include "stdafx.h"
#include "EventHandler.h"
#include "resource.h"
#include "TestZnPDFLibrarianDLLDlg.h"
//#include "PassWordDlg.h"
#include <afxctl.h>	//定义了AfxConnectionAdvise、AfxConnectionUnadvise


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString password;
//static CString m_IndexPath;//索引路径
/////////////////////////////////////////////////////////////////////////////
// CEventHandler

IMPLEMENT_DYNCREATE(CEventHandler, CCmdTarget)

CEventHandler::CEventHandler()
{
	//Initialize COM  libraries...create MTA...
	CoInitialize(NULL);
	
	//这个函数将m_xDispatch与一个COleDispatchImpl对象联系了起来,COleDispatchImpl实现了
	//IDispatch接口,且数据结构与m_xDispatch相同,所以可以赋值给它。这样就等于m_xDispatch
	//实现了IDispatch,把它传给COM组件后,COM组件就可以调用它的Invoke()函数(如在FireShow()中),
	//COleDispatchImpl::Invoke()中用到了dispatch map,这个表由DECLARE_DISPATCHMAP声明,
	//在BEGIN_DISPATCHMAP(,)、END_DISPATCHMAP()中被填充,比如Show()、Show2()。这样Invoke()
	//就可以根据dispid在dispatch map中找到这两个函数,从而调用它们,从而实现了连接点。
	//另一方面,也可以看到用dispinterface声明的事件接口本身并不是从哪个接口继承的,既不是IUnknown
	//也不是IDispatch,只不过通过一系列手段,使Invoke()能识别其中的属性、方法而已。
	//dispinterface表示这个接口是纯IDispatch接口。
	EnableAutomation();
	
}

CEventHandler::~CEventHandler()
{
}

void CEventHandler::Initialize( LPUNKNOWN pUnk, REFIID iid )
{
	//advise the server that this (mainframe) is the sink for events...
	//这个函数内部将进行QueryInterface(IConnectionPointContainer,..)、FindConnectionPoint()、Advise()等一系列调用
	AfxConnectionAdvise( 
		pUnk,		//可连接对象的接口指针
		iid,		//连接接口ID
		GetIDispatch(FALSE),	//把内嵌的IDispatch实现类的一个对象实例m_xDispatch传了出去
		FALSE,			//donod addref
		&m_dwCookie );	//cookie to break connection later...
}

void CEventHandler::Uninitialize( LPUNKNOWN pUnk, REFIID iid )
{
	//break the connection...donot receive any more events...
	//将调用Unadvise()
	AfxConnectionUnadvise( 
		pUnk, 
		iid , 
		GetIDispatch(FALSE),  
		FALSE, 
		m_dwCookie ) ;
}

/////////////////////////////////////////////////////////////////////////////
// CPDFSearchEvents

IMPLEMENT_DYNCREATE(CPDFSearchEvents, CCmdTarget)

BEGIN_MESSAGE_MAP(CPDFSearchEvents, CEventHandler)
END_MESSAGE_MAP()

// 填充dispatch map表,以供Invoke()调用
BEGIN_DISPATCH_MAP(CPDFSearchEvents, CEventHandler)
DISP_FUNCTION_ID(CPDFSearchEvents, "FindWordInDoc", 1, FindWordInDoc, VT_BOOL, VTS_BSTR VTS_I4 VTS_I4 VTS_I4 VTS_BOOL)
DISP_FUNCTION_ID(CPDFSearchEvents, "FindWordInBookmark", 2, FindWordInBookmark, VT_BOOL, VTS_BSTR VTS_VARIANT VTS_BOOL)
DISP_FUNCTION_ID(CPDFSearchEvents, "FindWordInComment", 3, FindWordInComment, VT_BOOL, VTS_BSTR VTS_I4 VTS_I4 VTS_BOOL)

END_DISPATCH_MAP( )

// 填充接口映射表,方便QueryInterface处理,因为它是根据IID来判断接口的
// 因为IDispatch已被CCmdTarget嵌套了,所以不需要在.h文件中用BEGIN_INTERFACE_PART(,)和
// END_INTERFACE_PART()来声明这个嵌套类,这里是struct XDispatch{...}m_xDispatch
BEGIN_INTERFACE_MAP(CPDFSearchEvents, CEventHandler)
INTERFACE_PART(CPDFSearchEvents, DIID__IPDFSearchEvents, Dispatch)
END_INTERFACE_MAP()

/////////////////////////////////////////////////////////////////////////////


BOOL CPDFSearchEvents::FindWordInDoc(char* file, long page_no, long word_no, long word_num, BOOL bModified)
{
	
	char *str;
	int No;
	str  = new char[100];
	int n = m_pDlg->m_result.GetItemCount() ;
	m_pDlg->m_records = n;
	char *num;
	num = new char[20];
	itoa(n,num,10);
	m_pDlg->m_cRecords.SetWindowText( num );

	m_pDlg->m_result.InsertItem( n, file ) ;
	No = page_no;
	itoa(No,str,10);
	
	m_pDlg->m_result.SetItemText(n,1,str ) ;
	No = word_no;
	itoa(No,str,10);
	
	m_pDlg->m_result.SetItemText(n,2,str ) ;
	
	No = word_num;
	itoa(No,str,10);
	m_pDlg->m_result.SetItemText(n,3,str );
	
	delete[] str;
	return TRUE;
}

BOOL CPDFSearchEvents::FindWordInBookmark(char* file, const VARIANT & arPos, BOOL bModified)
{
	char *str;
	int No;
	str  = new char[100];
	int n = m_pDlg->m_result.GetItemCount() ;
	m_pDlg->RecordCount(n);
	m_pDlg->m_result.InsertItem( n, file ) ;
	No = arPos.intVal;
	itoa(No,str,10);
	m_pDlg->m_result.SetItemText(n,4,str ) ;
	
	//	No = word_no;
	//	itoa(No,str,10);
	//	
	//	m_pDlg->m_result.SetItemText(n,2,str ) ;
	//	
	//	No = word_num;
	//	itoa(No,str,10);
	//	m_pDlg->m_result.SetItemText(n,3,str );
	//	//Updatedata();
	delete[] str;
	return TRUE;
}

BOOL CPDFSearchEvents::FindWordInComment(char* file, long page_no, long annot_no, BOOL bModified)
{
	char *str;
	int No;
	str  = new char[100];
	int n = m_pDlg->m_result.GetItemCount() ;
	m_pDlg->RecordCount(n);
	m_pDlg->m_result.InsertItem( n, file ) ;
	No = page_no;
	itoa(No,str,10);
	m_pDlg->m_result.SetItemText(n,1,str ) ;
	
	No = annot_no;
	itoa(No,str,10);
	
	m_pDlg->m_result.SetItemText(n,5,str ) ;
	
	//	No = annot_no;
	//	itoa(No,str,10);
	//	m_pDlg->m_result.SetItemText(n,3,str );
	//Updatedata();
	delete[] str;
	return TRUE;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -