XFS事件处理问题

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

int CreateWindowFunc( HINSTANCE hInstance )
{
        HWND hWinHandle;
        WNDCLASS wndClass;
        char lpszClassName[] = "EVENTPROCESS";
        char lpszTitle[] = "TestSP";
        wndClass.style = 0;
        wndClass.lpfnWndProc = WindowProc;
        wndClass.cbClsExtra = 0;
        wndClass.cbWndExtra = 0;
        wndClass.hInstance = hInstance;
        wndClass.hIcon = NULL;
        wndClass.hCursor = NULL;
        wndClass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH)); ; 
        wndClass.lpszMenuName = NULL;
        wndClass.lpszClassName = lpszClassName;

        if(!RegisterClass(&wndClass))
        {
                xfslog.Add( "RegisterClass Failed, the error is: %d", GetLastError() );
                return NULL;
        }

        try{
                hWinHandle = CreateWindow(
                        lpszClassName,
                        lpszTitle,
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,         
                        NULL,  
                        NULL,       
                        hInstance,
                        NULL
        );
        }
        catch (...)
        {
                xfslog.Add( "CreateWindow() Failed, error code is: %d", GetLastError() );
                return NULL;
        }
        
    XfsFun.m_hWnd = hWinHandle;
        ShowWindow( XfsFun.m_hWnd, SW_HIDE );
        UpdateWindow( XfsFun.m_hWnd );
        return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch(message)
        {
            case WM_CREATE:
                    return 0;
            case WFS_EXECUTE_EVENT:
                    hRet = Handle_( (LPWFSRESULT)lParam );
                    WFSFreeResult((WFSRESULT*)lParam);
            default:
                    return DefWindowProc(hwnd, message, wParam, lParam);
        }
        return 0;
}

HRESULT Handle_( LPWFSRESULT pWfsResult )
{
        memcpy(&m_TempWfsResult, pWfsResult, sizeof(WFSRESULT));        
        if(pWfsResult->hResult == WFS_SUCCESS)
        {
                ULONG Digit = 0;
                switch(pWfsResult->u.dwEventID)
                {
                    case WFS_EXEE_PIN_KEY:
                            memcpy(&PressedKey, pWfsResult->lpBuffer, sizeof(WFSPINKEY));
                            Digit = PressedKey.ulDigit;
                            Data[iLen] = UlongToByte(Digit);
                            iLen ++;
                            break;
                    default:
                            break;
                }
        }
        return 0;
}
接着的XfsFun.cpp里面,调用WFSAsyncExecute时,对HWnd参数,传前面CreateWindow生成的窗口句柄XfsFun.m_hWnd = hWinHandle;

iRet = WFSAsyncExecute(m_hService, WFS_CMD_PIN_GET_DATA, pPinGetData, WFS_INDEFINITE_WAIT, this->m_hWnd, &m_pReq);

这样处理了后,一旦SP有事件发送上来时,会发给this->m_hWnd窗口句柄,然后Windows系统自动会调用CALLBACK WindowProc处理。你在CALLBACK WindowProc函数中处理你想接收的事件类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值