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

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

?? listdatacalllog.cpp

?? windows mobile 下的聯系人管理工具。類是iphone的滑動聯系人功能
?? CPP
字號:
#include "stdafx.h"
#include "ListDataCallLog.h"
#include "windows.h"
#include "PhoneUtils.h"
#include "Macros.h"

ListDataCallLog::ListDataCallLog(Settings * pSettings) {
    this->_settings = pSettings;
    this->Populate();
}

void ListDataCallLog::Release(void) {}

HRESULT ListDataCallLog::Populate(void) {
    HRESULT hr = S_OK;
    HANDLE ph = 0;
    DWORD lastEntryIndex = 0;
    DWORD currentEntryIndex = 0;
    TCHAR pszPrimary[32];
 	TCHAR pszSecondary[12];
    TCHAR pastTime;

    hr = PhoneOpenCallLog(&ph);
    CHR(hr);

    hr = PhoneSeekCallLog(ph, CALLLOGSEEK_END, 0, &lastEntryIndex);
    CHR(hr);

    hr = PhoneSeekCallLog(ph, CALLLOGSEEK_BEGINNING, 0, 
        &currentEntryIndex);
    CHR(hr);

    this->_arrayLength = lastEntryIndex - currentEntryIndex;
    this->_items = new Data[this->_arrayLength];

	CALLLOGENTRY *pEntry = new CALLLOGENTRY();
    //cbSize MUST be set before passing the struct in to the function!
    // Refer to the doc.
    pEntry->cbSize = sizeof(CALLLOGENTRY);

    for (int i = (int)currentEntryIndex; i <= (int)lastEntryIndex; i++) {
        if (this->_listCounter >= this->_arrayLength)
            break;

        pEntry->pszNumber = NULL;
        pEntry->pszName = NULL;
        pEntry->pszNameType = NULL;
        pEntry->pszNote = NULL;

        hr = PhoneGetCallLogEntry(ph, pEntry);
        CHR(hr);

		pastTime = _getPastTime(pEntry->ftStartTime, pszSecondary, 
            SECONDARY_TEXT_LENGTH);

        StringCchPrintf(pszPrimary, 32, TEXT("%s %s"), 
            (pEntry->iom == IOM_MISSED ? TEXT("! ")
                : pEntry->iom == IOM_INCOMING ? TEXT("> ")
                : TEXT("< ")), 
            (pEntry->pszName ? pEntry->pszName
                : pEntry->pszNumber ? pEntry->pszNumber
                : this->_settings->unknown_string)
             );

		this->_addListItem(i, pszPrimary, pszSecondary, pastTime, i);

		// cleanup
		if (pEntry->pszNumber) delete pEntry->pszNumber;
		if (pEntry->pszName) delete pEntry->pszName;
		if (pEntry->pszNameType) delete pEntry->pszNameType;
		if (pEntry->pszNote) delete pEntry->pszNote;    
    }

Error:
    // more cleanup
    if (NULL != pEntry) {
        if (NULL != pEntry->pszNumber)
            delete pEntry->pszNumber;
        if (NULL != pEntry->pszName)
            delete pEntry->pszName;
        if (NULL != pEntry->pszNameType)
            delete pEntry->pszNameType;
        if (NULL != pEntry->pszNote)
            delete pEntry->pszNote;
        delete pEntry;
    }

    hr = PhoneCloseCallLog(ph);

    return hr;
}

HRESULT ListDataCallLog::PopulateDetailsFor(int id) {
    HRESULT hr = S_OK;
    HANDLE ph = 0;
    DWORD currentEntryIndex = 0;
    bool isInAddressBook = false;

    hr = PhoneOpenCallLog(&ph);
    CHR(hr);

    hr = PhoneSeekCallLog(ph, CALLLOGSEEK_BEGINNING, id, 
        &currentEntryIndex);
    CHR(hr);

    this->_itemDetailCount = 0;
    this->_currentItemIndex = id;

	CALLLOGENTRY *pEntry = new CALLLOGENTRY();
    //cbSize MUST be set before passing the struct in to the function!
    // Refer to the doc.
    pEntry->cbSize = sizeof(CALLLOGENTRY);

    hr = PhoneGetCallLogEntry(ph, pEntry);
    CHR(hr);

    // the [2] is to bypass the "> " "< " or "! " 
    // for incoming, outgoing, missed
    this->_addDetail(diText, &this->_items[id].szPrimaryText[2]);
    this->_addDetail(diText, 
        (pEntry->iom == IOM_MISSED 
            ? this->_settings->missed_string
            : pEntry->iom == IOM_INCOMING 
            ? this->_settings->incoming_string
            : this->_settings->outgoing_string), 
        this->_settings->type_string);

    isInAddressBook = pEntry->pszName 
        && (
            !pEntry->pszNumber 
            || _tcscmp(pEntry->pszName, pEntry->pszNumber) != 0
        );

    if (isInAddressBook) {
        this->_addDetail(diText, pEntry->pszNumber, 
            this->_settings->number_string);
    }

    if (pEntry->ftStartTime.dwHighDateTime > 0) {
        int c = this->_itemDetailCount;

        this->_detailItems[c].type = diText;
        StringCchCopy(this->_detailItems[c].label, SECONDARY_TEXT_LENGTH,
            this->_settings->date_string);
        _printDate(this->_detailItems[c].text, PRIMARY_TEXT_LENGTH, 
            pEntry->ftStartTime);
        
        this->_itemDetailCount++;
    }

    if (pEntry->iom != IOM_MISSED) {
        int c = this->_itemDetailCount;
        
        this->_detailItems[c].type = diText;
        StringCchCopy(this->_detailItems[c].label, SECONDARY_TEXT_LENGTH,
            this->_settings->duration_string);
        _printDuration(this->_detailItems[c].text, PRIMARY_TEXT_LENGTH, 
            pEntry->ftStartTime, pEntry->ftEndTime, this->_settings);

        this->_itemDetailCount++;
    }

    if (pEntry->pszNumber)
        this->_addDetail(diCallButton, this->_settings->returncall_string, 
        NULL, pEntry->pszNumber, pEntry->pszName);

    //TODO: this
    //if (!isInAddressBook)
    //    this->_addDetail(diSaveContactButton, 
    //    this->_settings->savecontact_string);

Error:
    // more cleanup
    if (NULL != pEntry) {
        if (NULL != pEntry->pszNumber)
            delete pEntry->pszNumber;
        if (NULL != pEntry->pszName)
            delete pEntry->pszName;
        if (NULL != pEntry->pszNameType)
            delete pEntry->pszNameType;
        if (NULL != pEntry->pszNote)
            delete pEntry->pszNote;
        delete pEntry;
    }

    hr = PhoneCloseCallLog(ph);

    return hr;
}

void ListDataCallLog::GetItemGroup(int index, TCHAR * pszGroup) {
    TCHAR g = this->_items[index].wcGroup;
	StringCchCopy(pszGroup, 10, 
		  g == 1 ? this->_settings->sunday_string
		: g == 2 ? this->_settings->monday_string
		: g == 3 ? this->_settings->tuesday_string
		: g == 4 ? this->_settings->wednesday_string
		: g == 5 ? this->_settings->thursday_string
		: g == 6 ? this->_settings->friday_string
		: g == 7 ? this->_settings->saturday_string
        : g == 'T' ? this->_settings->today_string
        : g == 'Y' ? this->_settings->yesterday_string
        : this->_settings->older_string
	);
}

void ListDataCallLog::ToggleFavorite() {}

void ListDataCallLog::DisplayItem() {}

void ListDataCallLog::EditItem() {}

TCHAR _getPastTime(FILETIME ftTime, TCHAR * pszSecondary, int strLength) {

    // if ftTime somehow == 0, then get outta here
    if (!ftTime.dwHighDateTime && !ftTime.dwLowDateTime) {
        pszSecondary[0] = 0;
        return 0;
    }

    FILETIME ftToday;		// midnight today (but UTC)
	FILETIME ftYesterday;	// midnight yesterday (but UTC)
	FILETIME ftThisWeek;	// midnight one week ago (but UTC)

	// temporary vars
	SYSTEMTIME st;
	FILETIME ft;

	// calculate ftToday
	GetLocalTime(&st);
	st.wMinute = 0;
	st.wSecond = 0;
	st.wHour = 0;
	SystemTimeToFileTime(&st, &ft);
	LocalFileTimeToFileTime(&ft, &ftToday);
	if (CompareFileTime(&ftTime, &ftToday) >= 0) {
		FileTimeToLocalFileTime(&ftTime, &ft);
		FileTimeToSystemTime(&ft, &st);
        ::GetTimeFormat(LOCALE_USER_DEFAULT, 
            TIME_NOSECONDS | TIME_NOTIMEMARKER, &st,
            NULL, pszSecondary, strLength);
		return 'T';
	}

	// calculate ftYesterday
	ULARGE_INTEGER uli;
	uli.HighPart = ftToday.dwHighDateTime;
	uli.LowPart = ftToday.dwLowDateTime;
	uli.QuadPart -= 864000000000;  // 100-nanosecond blocks in one day
	ftYesterday.dwHighDateTime = uli.HighPart;
	ftYesterday.dwLowDateTime = uli.LowPart;
	if (CompareFileTime(&ftTime, &ftYesterday) >= 0) {
		FileTimeToLocalFileTime(&ftTime, &ft);
		FileTimeToSystemTime(&ft, &st);
        ::GetTimeFormat(LOCALE_USER_DEFAULT, 
            TIME_NOSECONDS | TIME_NOTIMEMARKER, 
            &st, NULL, pszSecondary, strLength);
		return 'Y';
	}

	// calculate ftThisWeek
	uli.QuadPart -= 5184000000000;
	ftThisWeek.dwHighDateTime = uli.HighPart;
	ftThisWeek.dwLowDateTime = uli.LowPart;
	if (CompareFileTime(&ftTime, &ftThisWeek) >= 0) {
		FileTimeToLocalFileTime(&ftTime, &ft);
		FileTimeToSystemTime(&ft, &st);
        ::GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, 
            &st, NULL, pszSecondary, strLength);
        return st.wDayOfWeek + 1;
	}

	// Older than one week ago
	FileTimeToLocalFileTime(&ftTime, &ft);
	FileTimeToSystemTime(&ft, &st);
    ::GetDateFormat(LOCALE_USER_DEFAULT, NULL, &st,
        TEXT("M/dd"), pszSecondary, strLength);
	return 'O';
}

// prints the date and time, like: 2008/04/02 23:59
// in the user's current locale
void _printDate(TCHAR * str, int strLength, FILETIME ft) {
    FILETIME ftLocal;
    SYSTEMTIME st;
    TCHAR buffer[10];

    FileTimeToLocalFileTime(&ft, &ftLocal);
    FileTimeToSystemTime(&ftLocal, &st);
    ::GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st,
        NULL, str, strLength);
    ::GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, 
        &st, NULL, buffer, 10);
    StringCchCat(str, strLength, TEXT(" "));
    StringCchCat(str, strLength, buffer);
}

void _printDuration(TCHAR * str, int strLength, FILETIME ftStart, 
    FILETIME ftEnd, Settings * pSettings) {
    LARGE_INTEGER liStart;
    LARGE_INTEGER liEnd;
    LONGLONG duration;
    int hours;
    int minutes;

    liStart.HighPart = ftStart.dwHighDateTime;
    liStart.LowPart = ftStart.dwLowDateTime;
    liEnd.HighPart = ftEnd.dwHighDateTime;
    liEnd.LowPart = ftEnd.dwLowDateTime;
    duration = liEnd.QuadPart - liStart.QuadPart;
    duration /= 10000000; //100 nanosecond intervals -> seconds

    if (duration > 3600) {
        hours = (int)duration / 3600;
        duration -= hours * 3600;
        minutes = (int)duration / 60;
        duration -= minutes * 60;
        StringCchPrintf(str, strLength, TEXT("%d:%02d:%02d"), 
            hours, minutes, duration);
    }
    else if (duration > 60) {
        minutes = (int)duration / 60;
        duration -= minutes * 60;
        StringCchPrintf(str, strLength, TEXT("%d:%02d"), minutes, duration);
    }
    else {
        StringCchPrintf(str, strLength, TEXT("%d "), duration);
        StringCchCat(str, strLength, pSettings->seconds_string);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品无码三级在线观看视频| 日本伊人午夜精品| 亚洲一区二区av在线| 日日夜夜精品视频免费| 国产.精品.日韩.另类.中文.在线.播放| 在线影院国内精品| 国产片一区二区三区| 婷婷夜色潮精品综合在线| 成人动漫在线一区| 欧美精品一区在线观看| 亚洲123区在线观看| 色综合久久久久综合| 欧美精品一区二区三区四区| 综合婷婷亚洲小说| 国产乱码精品一区二区三区五月婷 | 免费观看在线色综合| 国产成人在线观看| 欧美一级国产精品| 亚洲国产精品久久久久婷婷884| 国产高清精品久久久久| 欧美一区日本一区韩国一区| 亚洲欧美激情小说另类| 99国产精品久久久久久久久久| 国产亚洲欧美中文| 国产一区二区三区日韩| 精品国产三级a在线观看| 奇米色一区二区| 91精品国产免费| 日本成人在线看| 91麻豆精品久久久久蜜臀| 天天免费综合色| 69堂国产成人免费视频| 午夜久久久影院| 一区二区三区视频在线看| 欧洲精品一区二区| 日韩欧美电影一区| 久久精品99国产精品日本| 日韩精品一区二区三区在线| 美脚の诱脚舐め脚责91| 26uuu精品一区二区| 国产精品99久久久久久似苏梦涵| 国产亚洲午夜高清国产拍精品 | 国内国产精品久久| 欧美哺乳videos| 国产v日产∨综合v精品视频| 国产精品家庭影院| 色婷婷精品久久二区二区蜜臀av| 夜夜夜精品看看| 日韩欧美一卡二卡| 福利电影一区二区三区| 亚洲人成精品久久久久| 欧美性猛交一区二区三区精品| 五月天丁香久久| 精品国产乱码久久久久久夜甘婷婷| 国产尤物一区二区| 国产精品国产三级国产专播品爱网| 一本到三区不卡视频| 五月天网站亚洲| 中文无字幕一区二区三区| 欧洲精品一区二区| 韩国一区二区在线观看| 亚洲欧美一区二区三区极速播放 | 色先锋aa成人| 日韩电影一二三区| 欧美激情中文字幕| 精品捆绑美女sm三区| 精品一区二区三区在线观看| 国产精品高潮呻吟久久| 在线不卡中文字幕| 国产成人精品午夜视频免费| 亚洲乱码国产乱码精品精98午夜| 欧美一区二区美女| av电影在线观看完整版一区二区| 丝袜美腿亚洲一区二区图片| 国产精品美女一区二区三区 | 国产专区综合网| 亚洲免费看黄网站| 精品美女在线播放| 欧美性高清videossexo| 国产91在线|亚洲| 日本不卡一二三| 亚洲精品中文在线影院| 国产日韩欧美综合在线| 欧美精品丝袜中出| 色婷婷av一区| 成人久久18免费网站麻豆| 日韩电影在线一区二区三区| 国产精品国产三级国产专播品爱网 | 国内外精品视频| 亚洲va欧美va天堂v国产综合| 亚洲国产高清在线| 精品久久人人做人人爱| 欧美美女直播网站| 91理论电影在线观看| 成人在线视频一区二区| 久久国产福利国产秒拍| 视频一区欧美精品| 亚洲综合无码一区二区| 亚洲欧美一区二区三区极速播放 | 成人动漫在线一区| 国产精品一级在线| 激情欧美一区二区| 老司机午夜精品99久久| 日本中文字幕一区二区视频| 亚洲一区二区精品久久av| 亚洲色图欧洲色图| 亚洲日本一区二区| 亚洲日本成人在线观看| 136国产福利精品导航| 中文字幕乱码日本亚洲一区二区 | 亚洲成年人影院| 一卡二卡三卡日韩欧美| 亚洲精品美国一| 亚洲综合一二区| 天天综合天天综合色| 视频一区二区三区在线| 日本美女一区二区三区| 欧美aaa在线| 九九视频精品免费| 国产精品一区二区在线观看不卡 | 国产一区二三区好的| 国产主播一区二区三区| 国产露脸91国语对白| 成人激情校园春色| 91色九色蝌蚪| 欧美军同video69gay| 日韩一二三区不卡| 2021久久国产精品不只是精品| 久久久久综合网| 亚洲日本一区二区| 亚洲国产wwwccc36天堂| 麻豆精品国产传媒mv男同| 国产aⅴ综合色| 色婷婷狠狠综合| 欧美一区二区视频观看视频 | 一区二区免费看| 日韩国产欧美一区二区三区| 日本中文在线一区| 国产91精品欧美| 欧美亚洲国产bt| 日韩你懂的在线播放| 亚洲国产高清在线| 亚洲大片一区二区三区| 久久电影国产免费久久电影| 福利一区二区在线观看| 在线免费亚洲电影| 精品国产sm最大网站| 一区在线中文字幕| 日韩一区精品字幕| 国产精品中文欧美| 欧美最猛性xxxxx直播| 欧美成人精品1314www| 中文字幕中文乱码欧美一区二区| 亚洲国产一区二区a毛片| 国产资源在线一区| 欧美亚洲综合色| 久久久国产午夜精品| 亚洲高清中文字幕| 成人一级黄色片| 制服丝袜中文字幕亚洲| 中文字幕亚洲电影| 免费看黄色91| 欧美日韩一区二区三区高清| 国产精品视频第一区| 日本成人在线网站| 色综合久久88色综合天天 | 紧缚捆绑精品一区二区| 欧美性色aⅴ视频一区日韩精品| 久久欧美中文字幕| 日日摸夜夜添夜夜添精品视频| 91网上在线视频| 亚洲国产精品99久久久久久久久| 秋霞成人午夜伦在线观看| 91丨porny丨在线| 久久久精品蜜桃| 国内精品自线一区二区三区视频| 欧美在线一二三| 1024成人网| 91在线免费播放| 中文在线一区二区| 国产不卡在线视频| 久久免费美女视频| 看片网站欧美日韩| 欧美一区二区视频在线观看| 亚洲一区二区av电影| 99精品欧美一区二区三区小说| 亚洲精品一区二区三区香蕉| 蜜臀91精品一区二区三区 | 蜜桃精品视频在线| 91精品欧美久久久久久动漫| 亚洲午夜在线视频| 91成人在线精品| 亚洲免费av高清| 日本久久电影网| 一区二区三区四区在线免费观看| av成人免费在线观看| 国产精品丝袜在线| 91免费观看在线| 亚洲精选视频免费看| 91福利精品第一导航|