WTL里如何实现CCmdTarget

云满笔记 2014-02-20 01:21:23
MFC里面有个类CCmdTarget,我有个项目用到了这个东西,它是CEventSink,继承自CCmdTarget的,代码如下:

EventSink.h
class CEventSink : public CCmdTarget
{
DECLARE_DYNAMIC(CEventSink)

public:
CScannerSDKSampleAppDlg * AppBridge;
CEventSink();
CEventSink(CScannerSDKSampleAppDlg *ParaAppBridge);
virtual ~CEventSink();


virtual void OnFinalRelease();
void onScanCmdResponseEvent(short status, BSTR scanCmdResponse);
void onScanDataEvent(short reserved, BSTR scanData);

void onVideoEvent(SHORT eventType, LONG size, VARIANT *sfvideoData, BSTR* pScannerData);
void onImageEvent(SHORT eventType, LONG size, SHORT imageFormat, VARIANT *sfImageData, BSTR* pScannerData);

void onPNPEvents(short eventType, BSTR ppnpData);
void onScannerNotificationEvent(short scannerMode, BSTR pScannerData);
void onScanRMDEvent(short eventType, BSTR eventData);
void onIONotificationEvent(short type, unsigned char data);
void OnISO15434Event(SHORT eventType, LONG size, SHORT imageFormat, VARIANT *sfImageData, BSTR* pScannerData);

protected:
DECLARE_MESSAGE_MAP()
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
};


EventSink.cpp
IMPLEMENT_DYNAMIC(CEventSink, CCmdTarget)

CEventSink::CEventSink()
{
EnableAutomation();
}

CEventSink::CEventSink(CScannerSDKSampleAppDlg *ParaAppBridge)
{
AppBridge = ParaAppBridge;
EnableAutomation();
}

CEventSink::~CEventSink()
{
}


void CEventSink::OnFinalRelease()
{
CCmdTarget::OnFinalRelease();
}


BEGIN_MESSAGE_MAP(CEventSink, CCmdTarget)
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(CEventSink, CCmdTarget)
DISP_FUNCTION_ID(CEventSink, "ScanCmdResponseEvent", 5, onScanCmdResponseEvent, VT_EMPTY,VTS_I2 VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "onPNPEvents", 4, onPNPEvents, VT_EMPTY, VTS_I2 VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "ScanDataEvent", 3, onScanDataEvent, VT_EMPTY,VTS_I2 VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "ScanRMDEvent", 6, onScanRMDEvent,VT_EMPTY,VTS_I2 VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "OnImageEvent", 1, onImageEvent, VT_EMPTY, VTS_I2 VTS_I4 VTS_I2 VTS_PVARIANT VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "OnVideoEvent", 2, onVideoEvent, VT_EMPTY, VTS_I2 VTS_I4 VTS_PVARIANT VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "OnScannerNotificationEvent", 8, onScannerNotificationEvent, VT_EMPTY, VTS_I2 VTS_BSTR)
DISP_FUNCTION_ID(CEventSink, "OnIOEvent", 7, onIONotificationEvent, VT_EMPTY, VTS_I2 VTS_UI1)
DISP_FUNCTION_ID(CEventSink, "OnISO15434Event", 9, OnISO15434Event, VT_EMPTY, VTS_I2 VTS_I4 VTS_I2 VTS_PVARIANT VTS_BSTR)
END_DISPATCH_MAP()

static const IID IID_IEventSink =
{ 0xD9D7AF5A, 0x7D86, 0x423C, { 0xBF, 0x65, 0xE6, 0x86, 0x82, 0x3B, 0x32, 0x2F}};

BEGIN_INTERFACE_MAP(CEventSink, CCmdTarget)
INTERFACE_PART(CEventSink, DIID__ICoreScannerEvents, Dispatch)
END_INTERFACE_MAP()


void CEventSink::onScanCmdResponseEvent(short status, BSTR scanCmdResponse)
{
AppBridge->OnCmdResponse(status, scanCmdResponse);
}

void CEventSink::onIONotificationEvent(short type, unsigned char data)
{
AppBridge->OnIOResponse(type, data);
}

void CEventSink::onScanDataEvent(short reserved, BSTR scanData)
{
AppBridge->OnScanData(reserved, scanData);
}

void CEventSink::onImageEvent(SHORT eventType, LONG size, SHORT imageFormat, VARIANT *sfImageData, BSTR* pScannerData)
{
LPBYTE MediaBuffer;
SAFEARRAY* psa = sfImageData->parray;
HRESULT hr = SafeArrayAccessData(psa, (void**)&MediaBuffer);
hr = SafeArrayUnaccessData(psa);
AppBridge->OnImageEvent(MediaBuffer, size);
}

void CEventSink::onVideoEvent(SHORT eventType, LONG size, VARIANT *sfvideoData, BSTR* pScannerData)
{

LPBYTE MediaBuffer;
SAFEARRAY* psa = sfvideoData->parray;
HRESULT hr = SafeArrayAccessData(psa, (void**)&MediaBuffer);
hr = SafeArrayUnaccessData(psa);
AppBridge->OnVideoEvent(MediaBuffer, size);
}


void CEventSink::onPNPEvents(short eventType, BSTR ppnpData)
{
AppBridge->OnPNP(eventType,ppnpData);
}

void CEventSink::onScannerNotificationEvent(short notificationType, BSTR pScannerData)
{
AppBridge->OnNotificationEvent(notificationType,pScannerData);
}


void CEventSink::onScanRMDEvent(short eventType, BSTR eventData)
{
AppBridge->OnRMD(eventType,eventData);
}

void CEventSink::OnISO15434Event(SHORT eventType, LONG size, SHORT imageFormat, VARIANT *sfImageData, BSTR* pScannerData)
{
LPBYTE MediaBuffer;
SAFEARRAY* psa = sfImageData->parray;
HRESULT hr = SafeArrayAccessData(psa, (void**)&MediaBuffer);
hr = SafeArrayUnaccessData(psa);
AppBridge->OnISO15434Event(MediaBuffer, size, imageFormat, pScannerData);
}


请问,上面只是MFC的形式,如何将上述改成WTL能用的??求大神指教啊!!
...全文
250 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
云满笔记 2014-08-22
  • 打赏
  • 举报
回复
怎么没人啊 送分啊
云满笔记 2014-03-07
  • 打赏
  • 举报
回复
求指教啊 !!
云满笔记 2014-02-20
  • 打赏
  • 举报
回复
分不是问题 我担心的就是没有人会回答啊 如果答案给力的话是会加很多分的 这个版区人少 大家多多支持啊

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧