亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sthand.cpp

?? Activesync Mobile 的同步軟件開發例子
?? CPP
字號:
/******************************************************************************\
*       This is a part of the Microsoft Source Code Samples.
*       Copyright (C) 1993-1997 Microsoft Corporation.
*       All rights reserved.
*       This source code is only intended as a supplement to
*       Microsoft Development Tools and/or WinHelp documentation.
*       See these sources for detailed information regarding the
*       Microsoft samples programs.
\******************************************************************************/

/*++

Module Name:
    
      replhand.cpp

Abstract:

    Implementation of IReplObjHandler class

--*/

#include <windows.h>
#include "mainmod.h"

void GetLocalFileTime( FILETIME *pft )
{
    SYSTEMTIME  st;
    GetLocalTime( &st );
    SystemTimeToFileTime( &st, pft );
}

/*++
--*/
CDataHandler::CDataHandler( CStore *pStore )
{
    m_pStore = pStore;
}

/*++
--*/
CDataHandler::~CDataHandler()
{
}

/*++
--*/
STDMETHODIMP CDataHandler::QueryInterface( REFIID iid, LPVOID  *ppvObj )
{
    *ppvObj = NULL;   // set to NULL, in case we fail.

    if ( IsEqualIID( iid, IID_IUnknown ) )
        *ppvObj = (void*)this;

    if ( *ppvObj )
    {
        ((IUnknown *)(*ppvObj))->AddRef();
        return NOERROR;
    }
    return E_NOINTERFACE;
}

/*++
--*/
STDMETHODIMP_(ULONG) CDataHandler::AddRef()
{
    // don't need reference counting
    return 0;
}

/*++
--*/
STDMETHODIMP_(ULONG) CDataHandler::Release()
{
    // don't need reference counting
    return 0;
}


//
//
//

/*++
--*/
STDMETHODIMP CDataHandler::Setup
( 
    PREPLSETUP pSetup   // Points to REPLSETUP, which has information about the object to be serialized/deserialized
)
{
    // we could be reading and writing at the same time, so need to save the pointer to setup struct differently
    if ( pSetup->fRead )
        m_pReadSetup = pSetup;
    else
        m_pWriteSetup = pSetup;

    return NOERROR;
}

BOOL CALLBACK FindStockWin( HWND hwnd, LPARAM lParam )
{
    char    szName[ MAX_PATH * 2 ];

    GetClassName( hwnd, szName, sizeof( szName ) );
    if ( !lstrcmp( szName, SZ_WND_CLASS ) )
        PostMessage( hwnd, WM_DATA_CHANGED, 0, 0 );

    return TRUE;
}

/*++
--*/
STDMETHODIMP CDataHandler::Reset
( 
    PREPLSETUP pSetup   // Points to REPLSETUP, which has information about the object just serialized/deserialized
)
{
    // we don't have any resources we need to free
    return NOERROR;
}

/*++
--*/
STDMETHODIMP CDataHandler::GetPacket
( 
    LPBYTE  *lppbPacket, 
    DWORD   *pcbPacket, 
    DWORD   cbRecommend 
)
{
    PSTOCK      pStock;

    if ( m_pReadSetup->hItem == NULL )
        return E_UNEXPECTED;

    m_pStore->Lock();

    // setup the packet
    ClearStruct( m_packet );
    pStock = m_pStore->FindStock( ((PITEM)m_pReadSetup->hItem)->m_uid );
    if ( pStock )
    {
        MultiByteToWideChar( CP_ACP, 0, pStock->szSym, -1, m_packet.wszSym, sizeof( m_packet.wszSym ) - 1 );
        MultiByteToWideChar( CP_ACP, 0, pStock->szCompany, -1, m_packet.wszCompany, sizeof( m_packet.wszCompany ) - 1 );
        MultiByteToWideChar( CP_ACP, 0, pStock->szLastPrice, -1, m_packet.wszLastPrice, sizeof( m_packet.wszLastPrice ) - 1 );
        MultiByteToWideChar( CP_ACP, 0, pStock->szPurDate, -1, m_packet.wszPurDate, sizeof( m_packet.wszPurDate ) - 1 );
        MultiByteToWideChar( CP_ACP, 0, pStock->szPurPrice, -1, m_packet.wszPurPrice, sizeof( m_packet.wszPurPrice ) - 1 );
        MultiByteToWideChar( CP_ACP, 0, pStock->szGain, -1, m_packet.wszGain, sizeof( m_packet.wszGain ) - 1 );
        m_packet.ftUpdated = pStock->ftUpdated;
    }

    m_pStore->Unlock();

    *pcbPacket = sizeof( m_packet );
    *lppbPacket = (LPBYTE)&m_packet;

    return pStock? RWRN_LAST_PACKET : E_UNEXPECTED;
}


/*++
--*/
STDMETHODIMP CDataHandler::SetPacket( LPBYTE lpbPacket, DWORD cbPacket )
{
    // write the packet
    if ( cbPacket != sizeof( STPACKET ) )
        return E_UNEXPECTED;

    PSTPACKET   pPacket = (PSTPACKET)lpbPacket;
    PSTOCK      pStock = NULL;
    PITEM       pItem = new CItem;
    STOCK       stock;

    if ( !pItem )
        return E_OUTOFMEMORY;

    m_pStore->Lock();

    // write the packet
    WideCharToMultiByte( CP_ACP, 0, pPacket->wszSym, -1, stock.szSym, sizeof( stock.szSym ) - 1, NULL, NULL );
    WideCharToMultiByte( CP_ACP, 0, pPacket->wszCompany, -1, stock.szCompany, sizeof( stock.szCompany ) - 1, NULL, NULL );
    WideCharToMultiByte( CP_ACP, 0, pPacket->wszLastPrice, -1, stock.szLastPrice, sizeof( stock.szLastPrice ) - 1, NULL, NULL );
    WideCharToMultiByte( CP_ACP, 0, pPacket->wszPurDate, -1, stock.szPurDate, sizeof( stock.szPurDate ) - 1, NULL, NULL );
    WideCharToMultiByte( CP_ACP, 0, pPacket->wszPurPrice, -1, stock.szPurPrice, sizeof( stock.szPurPrice ) - 1, NULL, NULL );
    WideCharToMultiByte( CP_ACP, 0, pPacket->wszGain, -1, stock.szGain, sizeof( stock.szGain ) - 1, NULL, NULL );
    stock.ftUpdated = pPacket->ftUpdated;
    GetLocalFileTime( &stock.ftLastModified );

    // change an existing stock or create a new stock
    if ( m_pWriteSetup->hItem )
    {
        pStock = m_pStore->FindStock( ((PITEM)m_pWriteSetup->hItem)->m_uid );
        if ( pStock )
        {
            stock.uidStock = pStock->uidStock;
            stock.uFlags = pStock->uFlags;
            stock.ftViewTime = pStock->ftViewTime;
            *pStock = stock;
        }
    }
    else
    {
        if ( m_pStore->m_pStocks->cStocks < MAX_STOCKS - 1 )
        {
            stock.uidStock = m_pStore->m_pStocks->uidCurrStock;
            stock.ftViewTime = stock.ftLastModified;
            m_pStore->m_pStocks->uidCurrStock++;
            m_pStore->m_pStocks->rgStocks[ m_pStore->m_pStocks->cStocks ] = stock;
            m_pStore->m_pStocks->cStocks++;
            pStock = &stock;
        }
    }

    if ( pStock )
    {
        pItem->m_uid = pStock->uidStock;
        pItem->m_ftModified = stock.ftLastModified;
    }

    m_pStore->Unlock();

    // find all instance of Stock Portfolio application and post a message to let it refersh
    if ( pStock )
    {
        m_pWriteSetup->hItem = (HREPLITEM)pItem;
        EnumWindows( (WNDENUMPROC)FindStockWin, NULL );
    }
    else
        delete pItem;

    return pStock? NOERROR : E_UNEXPECTED;
}

/*++
--*/
STDMETHODIMP CDataHandler::DeleteObj
( 
    PREPLSETUP  pSetup
)
{
    UINT    ix;
    PSTOCK  pStock;

    if ( !pSetup->hItem ) return E_UNEXPECTED;
    m_pStore->Lock();

    pStock = m_pStore->FindStock( ((PITEM)pSetup->hItem)->m_uid, &ix );
    if ( !pStock )
    {
        m_pStore->Unlock();
        return HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND );
    }

    m_pStore->m_pStocks->cStocks--;
    if ( ix != m_pStore->m_pStocks->cStocks )
        memmove( m_pStore->m_pStocks->rgStocks + ix, 
                 m_pStore->m_pStocks->rgStocks + ix + 1, 
                 ( m_pStore->m_pStocks->cStocks - ix ) * sizeof( m_pStore->m_pStocks->rgStocks[0] ) );

    m_pStore->Unlock();

    // find all instance of Stock Portfolio application and post a message to let it refersh
    EnumWindows( (WNDENUMPROC)FindStockWin, NULL );
    return NOERROR;
}


/*++
--*/
STDMETHODIMP CStore::RemoveDuplicates
( 
    LPCSTR   lpszObjType,  // Points to the name of object type for which this operation is intended. NULL if all object types should be checked.
    UINT    uFlags        // Reserved. Always 0.
)
{
    if ( lpszObjType && lstrcmp( lpszObjType, SZ_STOCKPOR ) )
        return E_NOTIMPL;

    UINT    ix, jx;
    PSTOCK  ps1, ps2;
    BOOL    fUpdate = FALSE;

    Lock();

    for ( ix = 0, ps1 = m_pStocks->rgStocks; ix < m_pStocks->cStocks; ix++, ps1++ )
    {
        for ( jx = ix + 1, ps2 = m_pStocks->rgStocks + jx; jx < m_pStocks->cStocks; jx++, ps2++ )
        {
            if ( !lstrcmp( ps1->szSym, ps2->szSym ) &&
                 !lstrcmp( ps1->szCompany, ps2->szCompany ) &&
                 !lstrcmp( ps1->szLastPrice, ps2->szLastPrice ) &&
                 !lstrcmp( ps1->szPurPrice, ps2->szPurPrice ) &&
                 !lstrcmp( ps1->szPurDate, ps2->szPurDate ) &&
                 !lstrcmp( ps1->szGain, ps2->szGain ) )
            {
                // notify ActiveSync service manager that this stock is deleted
                PITEM   pItem = MakeNewItem( ps2->uidStock );
                if ( pItem &&
                     FAILED( m_pNotify->OnItemNotify( RNC_DELETED, SZ_STORE_PROG_ID, SZ_STOCKPOR, (HREPLITEM)pItem, 0 ) ) )
                        delete pItem;

                // remove this stock
                m_pStocks->cStocks--;
                if ( jx != m_pStocks->cStocks )
                    memmove( ps2, ps2 + 1, ( m_pStocks->cStocks - jx ) * sizeof( m_pStocks->rgStocks[0] ) );
                jx--;

                fUpdate = TRUE;
                continue;
            }
        }
    }

    Unlock();

    if ( fUpdate )
    {
        // find all instance of Stock Portfolio application and post a message to let it refersh
        EnumWindows( (WNDENUMPROC)FindStockWin, NULL );
    }
    return NOERROR;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合在线观看色| 国产精品网站在线观看| 成人动漫av在线| 国产精品1区二区.| 久久精品久久精品| 性做久久久久久久免费看| 亚洲狠狠丁香婷婷综合久久久| 中文字幕制服丝袜一区二区三区 | 4438x亚洲最大成人网| 色天天综合色天天久久| 色婷婷久久综合| 91精品办公室少妇高潮对白| 一本大道久久a久久精二百| 91污片在线观看| 在线观看日韩精品| 在线不卡中文字幕播放| 欧美日韩国产一级片| 91精品国产高清一区二区三区蜜臀| 色94色欧美sute亚洲13| 欧美精品一级二级| 日韩美女一区二区三区| 国产亚洲欧美一级| 亚洲欧洲综合另类在线| 亚洲国产成人av好男人在线观看| 日韩精品国产欧美| 国产老肥熟一区二区三区| 99综合影院在线| 欧美日韩一区二区三区在线 | 正在播放亚洲一区| 欧美www视频| 亚洲国产精品激情在线观看| 一区二区在线观看免费视频播放| 日本不卡视频在线观看| 国产91富婆露脸刺激对白| 欧美性xxxxxxxx| 久久久不卡网国产精品一区| 亚洲美女在线一区| 久久国产麻豆精品| av高清不卡在线| 日韩三级高清在线| 国产精品美日韩| 麻豆久久久久久| 色婷婷国产精品综合在线观看| 精品国产电影一区二区| 一区二区视频在线| 国精产品一区一区三区mba视频| 色94色欧美sute亚洲线路二| 欧美精品一区二区在线播放| 亚洲影视资源网| 高清国产一区二区| 日韩一区二区视频| 亚洲一二三专区| 岛国精品在线播放| 日韩精品一区在线观看| 亚洲精品国产第一综合99久久 | 国产一区二区免费在线| 91久久精品一区二区| 欧美国产日产图区| 精品一区二区三区久久久| 欧美日韩高清影院| 亚洲精品日韩一| 99精品国产视频| 日韩电影在线观看电影| 99国产精品久久久| 久久久久国产精品厨房| 精品亚洲免费视频| 日韩一区二区三区在线| 亚洲午夜av在线| 色吧成人激情小说| 日韩一区有码在线| 97精品久久久午夜一区二区三区| 久久精品人人做| 国产精品亚洲а∨天堂免在线| 精品国精品国产| 狠狠色狠狠色合久久伊人| 日韩欧美国产一区在线观看| 蜜臀精品一区二区三区在线观看 | 色婷婷综合久久久久中文| 国产精品免费人成网站| 成a人片亚洲日本久久| 国产精品乱人伦一区二区| 国产成人免费高清| 日本一区二区三区国色天香 | 洋洋av久久久久久久一区| av不卡在线观看| 一区二区三区在线免费观看| 91蝌蚪国产九色| 亚洲国产精品嫩草影院| 欧美日韩二区三区| 久久丁香综合五月国产三级网站| 欧美成人乱码一区二区三区| 国产成人一区二区精品非洲| 中文欧美字幕免费| 在线视频欧美精品| 五月开心婷婷久久| 久久亚洲精品小早川怜子| 国产精品资源站在线| 国产精品美女久久久久久久久 | 国产一区999| 国产精品午夜免费| 91成人看片片| 极品销魂美女一区二区三区| 国产精品乱人伦一区二区| 色综合天天综合网天天看片| 亚洲成人免费视频| 精品国产乱码久久久久久夜甘婷婷| 国产馆精品极品| 亚洲三级在线看| 51精品秘密在线观看| 成人精品鲁一区一区二区| 亚洲最色的网站| 久久亚洲精精品中文字幕早川悠里| av成人免费在线观看| 日韩电影免费在线| 国产精品久久久久四虎| 制服丝袜亚洲网站| www.欧美日韩国产在线| 日韩国产欧美一区二区三区| 国产喷白浆一区二区三区| 欧美视频在线一区| 国产1区2区3区精品美女| 丝袜美腿亚洲色图| 免费一级片91| 亚洲丝袜精品丝袜在线| 日韩一级片网站| 色偷偷一区二区三区| 国模少妇一区二区三区| 婷婷久久综合九色综合绿巨人| 国产日韩av一区| 欧美一区二区三区成人| 欧美色图在线观看| av成人免费在线| 国产一区二区三区在线观看免费 | 日韩视频一区二区三区在线播放| 丰满岳乱妇一区二区三区| 日韩精品一级二级| 夜夜精品浪潮av一区二区三区| 国产精品视频观看| 久久午夜电影网| 91精品国产综合久久久蜜臀粉嫩 | 99精品黄色片免费大全| 国产毛片精品国产一区二区三区| 亚洲自拍偷拍九九九| 综合激情成人伊人| 国产日本亚洲高清| 久久伊人蜜桃av一区二区| 在线综合视频播放| 欧美人狂配大交3d怪物一区 | 欧美肥胖老妇做爰| 欧美私人免费视频| 91成人在线精品| 91国模大尺度私拍在线视频| 99久精品国产| 91免费小视频| 欧美亚日韩国产aⅴ精品中极品| 99精品1区2区| 在线免费观看不卡av| 日本精品一级二级| 欧美三级资源在线| 欧美久久久久久蜜桃| 91精品国产入口| 欧美不卡激情三级在线观看| 精品美女一区二区| 国产日产欧美一区| 中文字幕亚洲欧美在线不卡| 亚洲欧美日韩系列| 亚洲国产成人91porn| 日韩成人精品在线观看| 日本 国产 欧美色综合| 激情图区综合网| 国产精品亚洲第一| 91丨porny丨最新| 欧美亚洲一区二区三区四区| 精品久久久久久久久久久院品网| 久久久久久久性| 91丝袜美女网| 亚洲一区二区在线观看视频| 亚洲已满18点击进入久久| 亚洲成人福利片| 久久精品久久精品| 大白屁股一区二区视频| 色就色 综合激情| 这里只有精品免费| 国产欧美日韩亚州综合| 夜夜嗨av一区二区三区| 美女一区二区在线观看| 国产风韵犹存在线视精品| 亚洲精品在线免费播放| 欧美精品一区二区三区久久久| 国产精品久久久久久福利一牛影视| 亚洲综合小说图片| 国产一区二区福利| 在线观看视频91| 欧美国产精品一区二区三区| 亚洲尤物视频在线| 国产精品资源站在线| 欧美日韩国产乱码电影| 国产日韩精品久久久| 蜜芽一区二区三区| 91视频观看免费|