wince 通话记录的自动删除实现

 

#define PIMVOL        L"/pim.vol"
#define CLOG        L"clog.db"

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
...{   

    CEOID        oidCalllog = 0;
    DWORD        cbRecProps = 0;
    CENOTIFICATION *pCalllogNotification = NULL;


    switch (message)
    ...{
        case WM_CREATE:
            if(FALSE == CeMountDBVolEx(&g_ceguidInitDB, PIMVOL, 0, OPEN_EXISTING ))
            ...{       
                DWORD dwErr = GetLastError();
                CeUnmountDBVol(&g_ceguidInitDB);
            }

            edbCalllog.hwnd = hWnd;
            edbCalllog.dwFlags = CEDB_EXNOTIFICATION;
            edbCalllog.dwSize = sizeof(CENOTIFYREQUEST);
            edbCalllog.hHeap = NULL;

            g_hDatabase = CeOpenDatabaseInSession(NULL, &g_ceguidInitDB, &oidCalllog, CLOG, NULL, CEDB_AUTOINCREMENT, &edbCalllog);
                                                                break;
 

        case WM_DESTROY:
           
            CloseCalllogEdb();
            break;

        case WM_DBNOTIFICATION:
            pCalllogNotification = (CENOTIFICATION*)(lParam);
            if(pCalllogNotification->uType == DB_NOTIFY_RECORD_CREATED)
            ...{
                DeleteCalllog(pCalllogNotification->oid);
            }
            CeFreeNotification(&edbCalllog,pCalllogNotification);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

BOOL CloseCalllogEdb()
...{

    CeUnmountDBVol(&g_ceguidInitDB);

    if (INVALID_HANDLE_VALUE != g_hDatabase)
    ...{
        if (CloseHandle(g_hDatabase))
            g_hDatabase = INVALID_HANDLE_VALUE;
    }
    return TRUE;
}

//还有名称等消息我没有给出,不过大家自己可以debug看
DWORD DeleteCalllog(CEOID oid)
...{
    WORD        wNumRecProps = 0;
    LPBYTE        lpRecProps = NULL;
    PCEPROPVAL    pCePropVal;
    DWORD dwBufLen = MAX_BUF_SIZE;

    CEOID ceoid = CeSeekDatabaseEx(g_hDatabase,CEDB_SEEK_CEOID,oid,1,NULL);
    if(!ceoid)
    ...{
        DWORD dwErr = GetLastError();
        return dwErr;
    }
    ceoid = CeReadRecordPropsEx(g_hDatabase, CEDB_ALLOWREALLOC, &wNumRecProps, NULL, &lpRecProps, &dwBufLen, NULL);
    if(!ceoid)
    ...{
        DWORD dwErr = GetLastError();
        return dwErr;
    }
    pCePropVal = (PCEPROPVAL)lpRecProps;
    LPWSTR lpnum = pCePropVal[4].val.lpwstr;//号码


    SYSTEMTIME stReceiveTime;
    TCHAR szReceiveTime_start[MAX_DATE_LENGTH] = ...{0};
    TCHAR szReceiveTime_end[MAX_DATE_LENGTH] = ...{0};

    FileTimeToSystemTime(&pCePropVal[1].val.filetime, &stReceiveTime);
    FillDateString(&stReceiveTime, szReceiveTime_start, MAX_DATE_LENGTH);//开始时间
       
    FileTimeToSystemTime(&pCePropVal[2].val.filetime, &stReceiveTime);
    FillDateString(&stReceiveTime, szReceiveTime_end, MAX_DATE_LENGTH);//结束时间

    long TypeId = pCePropVal[3].val.lVal;

    BOOL bCallType = FALSE;

    //拨出接是7
    //拨出不接是5
    //拨入接是6
    //拨入不接是4
                     //反正这个我没弄明白

    if(TypeId == 6)
    ...{
        TypeId = 1;//已接
        bCallType = FALSE;
    }
    else if(TypeId == 4)
    ...{
        TypeId = 2;//未接
        bCallType = FALSE;
    }
    else
    ...{
        bCallType = TRUE;
        TypeId =  3;//拨出
    }
                     BOOL  bErr = CeDeleteRecord(g_hDatabase, oid);

 

    return S_OK;
}

 这是将edb的变动注册到一个窗口上,这样就可以在通话记录添加的时候自动处理相应的消息,实现通话记录的自己删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值