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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? listdata.cpp

?? windows mobile 下的聯(lián)系人管理工具。類是iphone的滑動(dòng)聯(lián)系人功能
?? CPP
字號(hào):
#include <stdafx.h>
#include "iContact.h"
#include "ListData.h"
#include "PhoneUtils.h"

ListData::ListData() {
    this->_detailItems = new DataDetail[MAX_SUBLIST_ITEMS];
    this->_arrayLength = 0;
    this->_currentDetailIndex = -1;
    this->_currentItemIndex = -1;
    this->_itemDetailCount = 0;
    this->_canFavorite = false;
    this->_canAdd = false;
    this->_hBitmap = NULL;
    this->_nBitmapHeight = 0;
    this->_nBitmapWidth = 0;
	this->_listCounter = 0;
}

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

ListData::~ListData(void) {
    this->Release();
    delete [] this->_items;
    delete [] this->_detailItems;
}

Data ListData::GetCurrentItem() {
    return this->_items[this->_currentItemIndex];
}

Data ListData::GetItem(int index) {
    return this->_items[index];
}

Data ListData::SelectItem(int index) {
    this->_currentItemIndex = index;
    return this->_items[index];
}

Data ListData::SelectPreviousItem(int defaultIndex, bool byGroup) {
    int index = this->_currentItemIndex;

	if (index < 0) {
		index = defaultIndex;
	}
    else if (index == 0) {
    }
    else if (byGroup) {
        // Jump to the previous group
        index--;
        while (index > 0 && 
            !this->IsItemNewGroup(index))
            index--;
    }
    else {
		index = max(0, index - 1);
	}

    this->_currentItemIndex = index;
    return this->_items[index];
}

Data ListData::SelectNextItem(int defaultIndex, bool byGroup) {
    int index = this->_currentItemIndex;

    if (index < 0) {
		index = defaultIndex;
	}
    else if (byGroup) {
        // Jump to the next group
        int max = this->_listCounter - 1;

        if (index < max) {
            index++;
            while (index < max && 
                !this->IsItemNewGroup(index))
                index++;
        }
    }
	else {
		index = min(this->_listCounter - 1, index + 1);
	}

    this->_currentItemIndex = index;
    return this->_items[index];
}

int ListData::GetCurrentItemIndex() {
    return this->_currentItemIndex;
}

void ListData::UnselectItem() {
    this->_currentItemIndex = -1;
    if (this->_hBitmap)
        DeleteObject((HGDIOBJ)this->_hBitmap);
    this->_hBitmap = NULL;
}

void ListData::GetItemGroup(int index, TCHAR * pszGroup) {
    pszGroup[0] = this->_items[index].wcGroup;
    pszGroup[1] = 0;
}

bool ListData::IsItemNewGroup(int index) {
	if (index == 0)
		return true;

    return this->_items[index - 1].wcGroup != this->_items[index].wcGroup;
}

int ListData::GetCurrentDetailIndex() {
    return this->_currentDetailIndex;
}

HRESULT ListData::PerformCurrentDetailAction(int pos) {
    DataDetail detail = this->_detailItems[this->_currentDetailIndex];
    TCHAR * itemText = this->_items[this->_currentItemIndex].szPrimaryText;

    // used by "url"
    SHELLEXECUTEINFO ShExecInfo = {0};

    // We have to clear out the bitmap here because 
    // EditItem or DisplayItem could change it
    if (this->_hBitmap)
        ::DeleteObject((HGDIOBJ)this->_hBitmap);
    this->_hBitmap = NULL;

    switch (detail.type) {
        case diEditButton:
            this->EditItem();
		    break;

        case diDetailsButton:
            this->DisplayItem();
		    break;

        case diCallButton:
            Call(detail.arg1, detail.arg2);
            break;

        case diSaveContactButton:
            //TODO: this->something(detailText);
            // this should add the current primary text as a contact, 
            // and bring up the edit screen
            break;

        case diPhone:
            if (pos > 1)
                SendSMS(detail.text, itemText);
            else 
                Call(detail.text, itemText);

		    break;

        case diEmail:
            SendEMail(this->_settings->email_account, detail.text);
		    break;

        case diUrl:
            ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
            ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
            ShExecInfo.hwnd = NULL;
            ShExecInfo.lpVerb = TEXT("open");
            ShExecInfo.lpFile = detail.text;
            ShExecInfo.lpParameters = NULL;

            ShExecInfo.lpDirectory = NULL;
            ShExecInfo.nShow = SW_SHOW;
            ShExecInfo.hInstApp = NULL; 

            ShellExecuteEx(&ShExecInfo);
            break;

        default:
            return ERROR_NO_MATCH;
    }

    return this->PopulateDetails();
}

bool ListData::SelectDetail(int index) {
    if (index == -1) {
        this->_currentDetailIndex = index;
        return true;
    }

    if (index >= this->_itemDetailCount) {
        return false;
    }

    DataDetail detail = this->_detailItems[index];
    DataItemType dit = detail.type;

    if (dit == diEditButton
        || dit == diDetailsButton
        || dit == diCallButton
        || dit == diSaveContactButton
        || dit == diPhone
        || dit == diEmail
        || dit == diUrl) {
        this->_currentDetailIndex = index;
        return true;
    }

    return false;
    
}

void ListData::IncrementDetailIndex(int by) {
    int max = this->_itemDetailCount;
        
    // there may be no actions; in this case just don't do anything
    if (!max)
        return;

    // This turns "-1" into "max-1" to fix %
    by += max;

    int index = (this->_currentDetailIndex + by) % max;
    int count = 1;
    DataItemType type = this->_detailItems[index].type;

    // These types cannot be "selected"
    while (count++ < max && 
        (type == diNothing
        || type == diCompany
        || type == diCategory
        || type == diText
        || type == diName)) {

        index = (index + by) % max;
        type = this->_detailItems[index].type;
    }

    if (count <= max)
        this->_currentDetailIndex = index;
}

DataDetail ListData::GetItemDetail(int index) {
    return this->_detailItems[index];
}

int ListData::GetItemCount() {
    return this->_listCounter;
}

int ListData::GetItemDetailCount() {
    return this->_itemDetailCount;
}

bool ListData::_addListItem(int id, const TCHAR * tszPrimary, 
    const TCHAR * tszSecondary, TCHAR wcGroup, LONG oId) {

    int i = this->_listCounter;

    if (i >= this->_arrayLength)
        return false;

    this->_items[i].ID = id;
    this->_items[i].oId = oId;
    this->_items[i].wcGroup = wcGroup;

    if (tszPrimary)
        StringCchCopy(this->_items[i].szPrimaryText, PRIMARY_TEXT_LENGTH, 
        tszPrimary);

    if (tszSecondary)
        StringCchCopy(this->_items[i].szSecondaryText, 10, tszSecondary);

    this->_items[i].nPrimaryTextLength 
        = _tcslen(this->_items[i].szPrimaryText);

	this->_items[i].nSecondaryTextLength 
        = _tcslen(this->_items[i].szSecondaryText);
	
    this->_listCounter++;
    return true;
}

void ListData::_addDetail(DataItemType type, const TCHAR * text, 
    const TCHAR * label, const TCHAR * arg1, const TCHAR * arg2) {

    int c = this->_itemDetailCount;
    if (c == MAX_SUBLIST_ITEMS)
        return;

    if (type == diNothing) {
        this->_itemDetailCount++;
        this->_detailItems[c].type = type;
        return;
    }

    else if (text == NULL || _tcslen(text) == 0) {
        return;
    }

    else {
        this->_itemDetailCount++;
        this->_detailItems[c].type = type;

        // primary text
        StringCchCopy(this->_detailItems[c].text, 
            PRIMARY_TEXT_LENGTH, text);

        // label
        if (label == NULL || _tcslen(label) == 0)
            this->_detailItems[c].label[0] = 0;

        else 
            StringCchCopy(this->_detailItems[c].label, 
                SECONDARY_TEXT_LENGTH, label);

        // arg1
        if (arg1 == NULL || _tcslen(arg1) == 0)
            this->_detailItems[c].arg1[0] = 0;

        else 
            StringCchCopy(this->_detailItems[c].arg1, 
                PRIMARY_TEXT_LENGTH, arg1);

        // arg2
        if (arg2 == NULL || _tcslen(arg2) == 0)
            this->_detailItems[c].arg2[0] = 0;

        else 
            StringCchCopy(this->_detailItems[c].arg2, 
                PRIMARY_TEXT_LENGTH, arg2);
    }
}

HRESULT ListData::PopulateDetails() {
    return this->PopulateDetailsFor(this->_currentItemIndex);
}

HBITMAP ListData::GetHBitmap() {
    return this->_hBitmap;
}

int ListData::GetHBitmapWidth() {
    return this->_nBitmapWidth;
}

int ListData::GetHBitmapHeight() {
    return this->_nBitmapHeight;
}

void ListData::Release(void) {}
bool ListData::CanFavorite(void) { return this->_canFavorite; }
bool ListData::CanAdd(void) { return this->_canAdd; }
void ListData::ToggleFavorite() {}
void ListData::DisplayItem() {}
void ListData::EditItem() {}
void ListData::AddItem() {}
HRESULT ListData::_loadBitmap () { return S_OK; }
HRESULT ListData::Populate(void) { return S_OK; }
HRESULT ListData::PopulateDetailsFor(int id) { return S_OK; }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线亚洲高清视频| 日韩电影免费在线看| 成人综合婷婷国产精品久久免费| 久久综合色天天久久综合图片| 日韩av一二三| 精品国产乱码久久久久久免费| 青青草国产精品97视觉盛宴 | 91一区一区三区| 亚洲男人天堂av网| 欧美色区777第一页| 日韩电影免费在线看| 久久婷婷国产综合精品青草| 丁香婷婷综合激情五月色| 亚洲日本电影在线| 欧美日本乱大交xxxxx| 蜜桃视频一区二区| 国产精品午夜久久| 日本乱人伦一区| 日韩精品乱码免费| 久久久久久亚洲综合影院红桃| 成人久久视频在线观看| 夜夜嗨av一区二区三区网页 | 18欧美亚洲精品| 欧美亚洲国产一区二区三区va| 日韩精品91亚洲二区在线观看| 欧美一区二区三区男人的天堂| 国产九色精品成人porny| 中文字幕在线观看一区二区| 欧美色图激情小说| 精品一区二区影视| 亚洲视频资源在线| 日韩欧美一区二区在线视频| 国产98色在线|日韩| 亚洲成a人片综合在线| 久久女同精品一区二区| 色哟哟一区二区三区| 麻豆成人av在线| 亚洲日本在线观看| 日韩亚洲欧美成人一区| 成人美女在线观看| 免费高清成人在线| 亚洲欧美一区二区三区极速播放| 555www色欧美视频| 97久久超碰国产精品电影| 狠狠色狠狠色综合日日91app| 亚洲精品少妇30p| 久久综合九色综合97_久久久| 欧美午夜片在线看| gogogo免费视频观看亚洲一| 久久精品国产亚洲5555| 亚洲成人在线免费| 国产精品久久久99| 2欧美一区二区三区在线观看视频| 欧美曰成人黄网| 国产成人精品免费看| 日韩va亚洲va欧美va久久| 亚洲视频一区二区在线| 国产肉丝袜一区二区| 日韩欧美国产麻豆| 91精品国产综合久久精品性色| av电影在线不卡| 国产经典欧美精品| 日韩av不卡一区二区| 亚洲综合在线电影| 亚洲欧洲综合另类| 一区在线中文字幕| 国产精品美女久久久久高潮| 国产午夜亚洲精品午夜鲁丝片| 日韩免费高清av| 在线成人av网站| 欧美日韩成人综合在线一区二区| 色香蕉成人二区免费| www.日本不卡| 不卡一区在线观看| 国产91在线观看| 国产传媒一区在线| 成人涩涩免费视频| 福利视频网站一区二区三区| 国产成人精品免费视频网站| 东方aⅴ免费观看久久av| 国产一区二区三区四| 狠狠色综合色综合网络| 国产一区二区伦理| 国产精品88av| 成人网在线免费视频| 成人激情小说网站| 91网站在线播放| 日本丶国产丶欧美色综合| 91精品办公室少妇高潮对白| 欧美性感一区二区三区| 欧美日本国产一区| 日韩一级高清毛片| 欧美精品一区二区三区蜜臀| 久久久精品国产免费观看同学| 欧美韩国日本综合| 亚洲免费观看在线视频| 亚洲中国最大av网站| 日韩高清在线电影| 韩国成人在线视频| 99国内精品久久| 欧美偷拍一区二区| 欧美不卡一区二区三区四区| 国产午夜精品美女毛片视频| 国产精品传媒在线| 视频在线观看国产精品| 国产在线精品国自产拍免费| 波波电影院一区二区三区| 欧美亚洲丝袜传媒另类| 日韩午夜激情视频| 中文字幕欧美日韩一区| 一区二区三区欧美亚洲| 蜜桃精品视频在线观看| 成人动漫视频在线| 欧美三级在线播放| 国产网站一区二区三区| 亚洲尤物视频在线| 国产真实乱子伦精品视频| 91网上在线视频| 欧美成人午夜电影| 国产网站一区二区三区| 亚洲成人www| 国产999精品久久| 欧美乱妇15p| 亚洲欧洲色图综合| 日韩av一区二区三区四区| av亚洲精华国产精华精| 日韩欧美中文字幕制服| 日韩毛片精品高清免费| 麻豆国产一区二区| 欧美性生活大片视频| 国产亚洲一区二区三区在线观看| 亚洲男人的天堂在线观看| 美国欧美日韩国产在线播放 | 91亚洲男人天堂| 日韩一级免费观看| 亚洲一区在线视频观看| 国产成人精品影院| 欧美一级夜夜爽| av毛片久久久久**hd| 亚洲精品成人a在线观看| 欧美一区二区三区不卡| 麻豆精品在线观看| 99re成人精品视频| 性感美女久久精品| 久久五月婷婷丁香社区| 国产精品一二三区| 亚洲天堂久久久久久久| 色婷婷综合久久久中文一区二区| 一区二区三区国产| 日韩成人一区二区| 欧美日韩高清一区二区三区| 美日韩一区二区三区| 国产精品免费视频观看| 51午夜精品国产| 岛国精品一区二区| 成人av免费网站| 久久99热国产| 国模冰冰炮一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 麻豆国产91在线播放| 精品一区二区在线播放| 国产乱人伦精品一区二区在线观看| 黄色精品一二区| 91在线精品一区二区三区| 欧美三级资源在线| 99久久综合狠狠综合久久| 蜜臀av一区二区| 日韩国产欧美在线观看| 久久久亚洲精品一区二区三区| 欧美性一二三区| av亚洲精华国产精华| 久久99精品久久久久久久久久久久 | 午夜在线电影亚洲一区| 亚洲夂夂婷婷色拍ww47| 欧美专区日韩专区| 久久国产生活片100| 三级久久三级久久久| 精品久久久久久久人人人人传媒| 国产成人免费高清| 青青草国产成人av片免费| 亚洲国产成人自拍| 国产精品福利一区| 亚洲最大色网站| 老司机免费视频一区二区| 韩国欧美一区二区| 91视频91自| 综合久久一区二区三区| 婷婷综合五月天| 色综合久久中文综合久久牛| 精品国产亚洲在线| 久久成人免费电影| 在线电影欧美成精品| 亚洲大型综合色站| 欧美日韩情趣电影| 艳妇臀荡乳欲伦亚洲一区| 99国产精品久久久久久久久久久| 欧美日本一区二区在线观看| 久久久五月婷婷| 亚洲综合一二区| 成人免费观看视频|