#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的变动注册到一个窗口上,这样就可以在通话记录添加的时候自动处理相应的消息,实现通话记录的自己删除