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

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

?? mycombolistctrl.cpp

?? 一個(gè)非常好的WINCE界面
?? CPP
字號(hào):
//MyComboListCtrl.cpp
#include "stdafx.h"
#include "MyComboListCtrl.h"
#include "InPlaceCombo.h"
#include "InPlaceEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#defines
#define FIRST_COLUMN    0
#define MIN_COLUMN_WIDTH   10
#define MAX_DROP_DOWN_ITEM_COUNT 10

/////////////////////////////////////////////////////////////////////////////
// CMyComboListCtrl

CMyComboListCtrl::CMyComboListCtrl()
{
    m_iColumnCounts = 0;
    m_ComboSupportColumnsList.RemoveAll();
    m_ReadOnlyColumnsList.RemoveAll();
    m_strValidEditCtrlChars.Empty();
    m_dwEditCtrlStyle = ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_NOHIDESEL;
    m_dwDropDownCtrlStyle = WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | 
        CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL;
}

CMyComboListCtrl::~CMyComboListCtrl()
{
    CInPlaceCombo::DeleteInstance();
    CInPlaceEdit::DeleteInstance();  
}


BEGIN_MESSAGE_MAP(CMyComboListCtrl, CListCtrl)
    //{{AFX_MSG_MAP(CMyComboListCtrl)
    ON_WM_HSCROLL()
    ON_WM_VSCROLL()
    ON_WM_LBUTTONDOWN()
    ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndLabelEdit)
    ON_NOTIFY_REFLECT(LVN_BEGINLABELEDIT, OnBeginLabelEdit)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyComboListCtrl message handlers

CInPlaceCombo* CMyComboListCtrl::ShowInPlaceList(int iRowIndex, int iColumnIndex, 
                                                 CStringList& rComboItemsList, 
                                                 CString strCurSelecetion /*= ""*/, 
                                                 int iSel /*= -1*/)
{
    // The returned obPointer should not be saved

    // Make sure that the item is visible
    if (!EnsureVisible(iRowIndex, TRUE))
    {
        return NULL;
    }

    // Make sure that iColumnIndex is valid 
    CHeaderCtrl* pHeader = static_cast<CHeaderCtrl*> (GetDlgItem(FIRST_COLUMN));

    int iColumnCount = pHeader->GetItemCount();

    if (iColumnIndex >= iColumnCount || GetColumnWidth(iColumnIndex) < MIN_COLUMN_WIDTH) 
    {
        return NULL;
    }

    // Calculate the rectangle specifications for the combo box
    CRect obCellRect(0, 0, 0, 0);
    CalculateCellRect(iColumnIndex, iRowIndex, obCellRect);

    int iHeight = obCellRect.Height();  
    int iCount = (int )rComboItemsList.GetCount();

    iCount = (iCount < MAX_DROP_DOWN_ITEM_COUNT) ? 
        iCount + MAX_DROP_DOWN_ITEM_COUNT : (MAX_DROP_DOWN_ITEM_COUNT + 1); 

    obCellRect.bottom += iHeight * iCount; 

    // Create the in place combobox
    CInPlaceCombo* pInPlaceCombo = CInPlaceCombo::GetInstance();
    pInPlaceCombo->ShowComboCtrl(m_dwDropDownCtrlStyle, obCellRect, this, 0, iRowIndex, 
        iColumnIndex, &rComboItemsList, strCurSelecetion, iSel);

    return pInPlaceCombo;
}

CInPlaceEdit* CMyComboListCtrl::ShowInPlaceEdit(int iRowIndex, int iColumnIndex, 
                                                CString& rstrCurSelection)
{
    // Create an in-place edit control
    CInPlaceEdit* pInPlaceEdit = CInPlaceEdit::GetInstance();

    CRect obCellRect(0, 0, 0, 0);
    CalculateCellRect(iColumnIndex, iRowIndex, obCellRect);

    pInPlaceEdit->ShowEditCtrl(m_dwEditCtrlStyle, obCellRect, this, 0, 
        iRowIndex, iColumnIndex,
        m_strValidChars[iColumnIndex], rstrCurSelection);

    return pInPlaceEdit;
}

void CMyComboListCtrl::OnHScroll(UINT iSBCode, UINT iPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default

    if (GetFocus() != this)
    {
        SetFocus();
    }

    CListCtrl::OnHScroll(iSBCode, iPos, pScrollBar);
}

void CMyComboListCtrl::OnVScroll(UINT iSBCode, UINT iPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default

    if (GetFocus() != this)
    {
        SetFocus();
    }

    CListCtrl::OnVScroll(iSBCode, iPos, pScrollBar);
}

void CMyComboListCtrl::OnLButtonDown(UINT iFlags, CPoint obPoint) 
{
    // TODO: Add your message handler code here and/or call default

    int iColumnIndex = -1;
    int iRowIndex = -1;

    // Get the current column and row
    if (!HitTestEx(obPoint, &iRowIndex, &iColumnIndex))
    {
        return;
    }

    CListCtrl::OnLButtonDown(iFlags, obPoint);

    // If column is not read only then
    // If the SHIFT or CTRL key is down call the base class
    // Check the high bit of GetKeyState to determine whether SHIFT or CTRL key is down
    if ((GetKeyState(VK_SHIFT) & 0x80) || (GetKeyState(VK_CONTROL) & 0x80))
    {
        return;
    }

    // Get the current selection before creating the in place combo box
    CString strCurSelection = GetItemText(iRowIndex, iColumnIndex);

    if (-1 != iRowIndex)
    {
        UINT flag = LVIS_FOCUSED;

        if ((GetItemState(iRowIndex, flag ) & flag) == flag)
        {
            // Add check for LVS_EDITLABELS
            if (GetWindowLong(m_hWnd, GWL_EXSTYLE) & LVS_EDITLABELS)
            {
                // If combo box is supported
                // Create and show the in place combo box
                if (IsCombo(iColumnIndex))
                {
                    CStringList obComboItemsList;

                    GetParent()->SendMessage(WM_SET_ITEMS, (WPARAM)iColumnIndex, 
                        (LPARAM)&obComboItemsList);  

                    CInPlaceCombo* pInPlaceComboBox = ShowInPlaceList(iRowIndex, 
                        iColumnIndex, obComboItemsList, strCurSelection);
                    ASSERT(pInPlaceComboBox); 

                    // Set the selection to previous selection
                    pInPlaceComboBox->SelectString(-1, strCurSelection);
                }
                // If combo box is not read only
                // Create and show the in place edit control
                else if (!IsReadOnly(iColumnIndex))
                {
                    CInPlaceEdit* pInPlaceEdit = ShowInPlaceEdit(iRowIndex, 
                        iColumnIndex, strCurSelection);
                }
            }
        }
    }  
}

bool CMyComboListCtrl::HitTestEx(CPoint &obPoint, int* pRowIndex, int* pColumnIndex) const
{
    if (!pRowIndex || !pColumnIndex)
    {
        return false;
    }

    // Get the row index
    *pRowIndex = HitTest(obPoint, NULL);

    if (pColumnIndex)
    {
        *pColumnIndex = 0;
    }

    // Make sure that the ListView is in LVS_REPORT
    if ((GetWindowLong(m_hWnd, GWL_STYLE) & LVS_TYPEMASK) != LVS_REPORT)
    {
        return false;
    }

    // Get the number of columns
    CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);

    int iColumnCount = pHeader->GetItemCount();

    // Get bounding rect of item and check whether obPoint falls in it.
    CRect obCellRect;
    GetItemRect(*pRowIndex, &obCellRect, LVIR_BOUNDS);

    if (obCellRect.PtInRect(obPoint))
    {
        // Now find the column
        for (*pColumnIndex = 0; *pColumnIndex < iColumnCount; (*pColumnIndex)++)
        {
            int iColWidth = GetColumnWidth(*pColumnIndex);

            if (obPoint.x >= obCellRect.left && obPoint.x <= (obCellRect.left + iColWidth))
            {
                return true;
            }
            obCellRect.left += iColWidth;
        }
    }
    return false;
}

void CMyComboListCtrl::SetComboColumns(int iColumnIndex, bool bSet /*= true*/)
{
    // If the Column Index is not present && Set flag is false
    // Then do nothing 
    // If the Column Index is present && Set flag is true
    // Then do nothing
    POSITION Pos = m_ComboSupportColumnsList.Find(iColumnIndex);

    // If the Column Index is not present && Set flag is true
    // Then Add to list
    if ((NULL == Pos) && bSet) 
    {
        m_ComboSupportColumnsList.AddTail(iColumnIndex); 
    }

    // If the Column Index is present && Set flag is false
    // Then Remove from list
    if ((NULL != Pos) && !bSet) 
    {
        m_ComboSupportColumnsList.RemoveAt(Pos); 
    }
}

void CMyComboListCtrl::SetReadOnlyColumns(int iColumnIndex, bool bSet /*= true*/)
{
    // If the Column Index is not present && Set flag is false
    // Then do nothing 
    // If the Column Index is present && Set flag is true
    // Then do nothing
    POSITION Pos = m_ReadOnlyColumnsList.Find(iColumnIndex);

    // If the Column Index is not present && Set flag is true
    // Then Add to list
    if ((NULL == Pos) && bSet) 
    {
        m_ReadOnlyColumnsList.AddTail(iColumnIndex); 
    }

    // If the Column Index is present && Set flag is false
    // Then Remove from list
    if ((NULL != Pos) && !bSet) 
    {
        m_ReadOnlyColumnsList.RemoveAt(Pos); 
    }
}

bool CMyComboListCtrl::IsReadOnly(int iColumnIndex)
{
    if (m_ReadOnlyColumnsList.Find(iColumnIndex))
    {
        return true;
    }

    return false;
}

bool CMyComboListCtrl::IsCombo(int iColumnIndex)
{
    if (m_ComboSupportColumnsList.Find(iColumnIndex))
    {
        return true;
    }

    return false;
}

void CMyComboListCtrl::CalculateCellRect(int iColumnIndex, int iRowIndex, CRect& robCellRect)
{
    GetItemRect(iRowIndex, &robCellRect, LVIR_BOUNDS);

    CRect rcClient;
    GetClientRect(&rcClient);

    if (robCellRect.right > rcClient.right) 
    {
        robCellRect.right = rcClient.right;
    }

    ScrollToView(iColumnIndex, robCellRect); 
}

void CMyComboListCtrl::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    // TODO: Add your control notification handler code here

    // Update the item text with the new text
    SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText);

    GetParent()->SendMessage(WM_VALIDATE, GetDlgCtrlID(), (LPARAM)pDispInfo); 

    *pResult = 0;
}

void CMyComboListCtrl::SetValidEditCtrlCharacters(CString &rstrValidCharacters)
{
    m_strValidEditCtrlChars = rstrValidCharacters;
}

void CMyComboListCtrl::SetColumnValidEditCtrlCharacters(CString &rstrValidCharacters,int column)
{
    if(column>MAX_LISTCTRL_COLUMNS-1)
        return;
    if(column == -1)
    {
        for(int i=0;i<MAX_LISTCTRL_COLUMNS;i++)
        {
            m_strValidChars[i] = rstrValidCharacters;
        }
    }
    else
        m_strValidChars[column] = rstrValidCharacters;
}

void CMyComboListCtrl::EnableHScroll(bool bEnable /*= true*/)
{
    if (bEnable)
    {
        m_dwDropDownCtrlStyle |= WS_HSCROLL;
    }
    else
    {
        m_dwDropDownCtrlStyle &= ~WS_HSCROLL;
    } 
}

void CMyComboListCtrl::EnableVScroll(bool bEnable /*= true*/)
{
    if (bEnable)
    {
        m_dwDropDownCtrlStyle |= WS_VSCROLL;
    }
    else
    {
        m_dwDropDownCtrlStyle &= ~WS_VSCROLL;
    }
}

void CMyComboListCtrl::ScrollToView(int iColumnIndex, /*int iOffSet, */CRect& robCellRect)
{
    // Now scroll if we need to expose the column
    CRect rcClient;
    GetClientRect(&rcClient);

    int iColumnWidth = GetColumnWidth(iColumnIndex);

    // Get the column iOffset
    int iOffSet = 0;
    for (int iIndex_ = 0; iIndex_ < iColumnIndex; iIndex_++)
    {
        iOffSet += GetColumnWidth(iIndex_);
    }

    // If x1 of cell rect is < x1 of ctrl rect or
    // If x1 of cell rect is > x1 of ctrl rect or **Should not ideally happen**
    // If the width of the cell extends beyond x2 of ctrl rect then
    // Scroll

    CSize obScrollSize(0, 0);

    if (((iOffSet + robCellRect.left) < rcClient.left) || 
        ((iOffSet + robCellRect.left) > rcClient.right))
    {
        obScrollSize.cx = iOffSet + robCellRect.left;
    }
    else if ((iOffSet + robCellRect.left + iColumnWidth) > rcClient.right)
    {
        obScrollSize.cx = iOffSet + robCellRect.left + iColumnWidth - rcClient.right;
    }

    Scroll(obScrollSize);
    robCellRect.left -= obScrollSize.cx;

    // Set the width to the column width
    robCellRect.left += iOffSet;
    robCellRect.right = robCellRect.left + iColumnWidth;
}

void CMyComboListCtrl::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    // TODO: Add your control notification handler code here
    if (IsReadOnly(pDispInfo->item.iSubItem))
    {
        *pResult = 1;
        return;
    }

    *pResult = 0;
}

int CMyComboListCtrl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat, 
                                   int nWidth, int nSubItem)
{
    m_iColumnCounts++;
    return CListCtrl::InsertColumn(nCol, lpszColumnHeading, nFormat, nWidth, nSubItem);
}

int CMyComboListCtrl::GetColumnCounts()
{
    return m_iColumnCounts;
}

void CMyComboListCtrl::DeleteAllColumn()
{
    for (int i = 0; i < m_iColumnCounts; i++)
    {
        DeleteColumn(0);
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美va亚洲va| 久久成人麻豆午夜电影| 欧美国产欧美综合| 精品久久国产字幕高潮| 日韩和欧美的一区| 美女视频免费一区| 国产精品一区一区| 一本大道久久a久久精二百| 在线观看亚洲一区| 精品福利一区二区三区| 亚洲乱码中文字幕| 国产成人综合视频| 99免费精品在线观看| 色一情一伦一子一伦一区| 亚洲成人精品一区| 97精品久久久久中文字幕| 欧美一区二区免费视频| 国产欧美一区二区精品仙草咪| 亚洲精品视频在线观看免费| 欧美蜜桃一区二区三区| 自拍av一区二区三区| 久久aⅴ国产欧美74aaa| 国产精品久久久久国产精品日日| 麻豆freexxxx性91精品| 欧美激情艳妇裸体舞| 欧美一区二区三区啪啪| 在线亚洲人成电影网站色www| 欧美国产日韩亚洲一区| 91精品国产丝袜白色高跟鞋| av中文字幕一区| 国内一区二区在线| 精品国产一区二区三区久久影院| 在线亚洲高清视频| www.日韩av| 国产91在线|亚洲| 国产精品麻豆欧美日韩ww| 成人aaaa免费全部观看| 最好看的中文字幕久久| 精品国产乱码久久久久久浪潮| 91福利在线免费观看| 99久久综合精品| 成人午夜看片网址| 亚洲精品国产a| 国产精品视频看| 国产精品乱码一区二区三区软件| 久久久久久亚洲综合影院红桃 | 久久66热re国产| 国产亚洲综合av| 欧美日韩精品一区二区| 91色porny| 美洲天堂一区二卡三卡四卡视频| 午夜伊人狠狠久久| 免费观看一级特黄欧美大片| 日韩美女视频在线| 色琪琪一区二区三区亚洲区| 色婷婷久久综合| 555www色欧美视频| 国产福利不卡视频| 色偷偷久久一区二区三区| 欧美日韩国产综合一区二区| 欧美一卡在线观看| 欧美国产在线观看| 日韩中文字幕一区二区三区| 精品一区二区三区免费毛片爱| 国产不卡视频一区| 欧美日韩三级一区二区| 精品系列免费在线观看| 成人免费av网站| 欧美日韩免费在线视频| 日韩欧美国产系列| 一区二区在线观看免费| 国产一区二区0| 精品中文字幕一区二区| 日本大香伊一区二区三区| 欧美一区二区三区在线视频| 一区二区中文视频| 亚洲一二三区不卡| 婷婷开心激情综合| 久久成人免费网| 欧美日本高清视频在线观看| 国产精品成人免费在线| 国产成人免费在线观看| 精品美女一区二区| 天堂av在线一区| 欧美日韩免费观看一区二区三区| 中文欧美字幕免费| 国产精品白丝jk白祙喷水网站| 91精品久久久久久蜜臀| 视频一区视频二区中文字幕| 91色视频在线| 亚洲一区二区美女| 丰满少妇在线播放bd日韩电影| 精品国产a毛片| 成人综合激情网| 国产日韩av一区| 成人va在线观看| 亚洲视频你懂的| 在线日韩av片| 污片在线观看一区二区| 67194成人在线观看| 日韩 欧美一区二区三区| 粉嫩久久99精品久久久久久夜| 久久综合精品国产一区二区三区| 亚洲靠逼com| 欧美综合亚洲图片综合区| 日韩影院免费视频| 欧美成人精品二区三区99精品| 国产在线视频精品一区| 中文字幕日韩一区| 91精品国产色综合久久| 麻豆久久久久久| 中文字幕视频一区二区三区久| 欧美亚洲一区二区三区四区| 欧美国产日本韩| 欧美日韩久久久久久| 国产麻豆91精品| 午夜影院久久久| 日本一区二区视频在线观看| 欧美日韩三级视频| av不卡免费在线观看| 麻豆高清免费国产一区| 亚洲综合色成人| 国产亚洲综合在线| 欧美一级高清片在线观看| 日韩精品视频网| 亚洲精品亚洲人成人网在线播放| 91精品久久久久久久91蜜桃| 91亚洲精品久久久蜜桃网站| 美女看a上一区| 天堂va蜜桃一区二区三区| 国产精品三级久久久久三级| 久久婷婷成人综合色| 日本韩国一区二区三区视频| 国产精品一二三区在线| 美女免费视频一区二区| 日韩国产精品久久| 性久久久久久久| 三级精品在线观看| 天天综合色天天| 亚洲大型综合色站| ...av二区三区久久精品| 欧美韩国日本综合| 亚洲国产精品v| 亚洲欧洲日韩综合一区二区| 国产精品乱码久久久久久| 欧美国产精品劲爆| 国产精品福利一区| 亚洲一区二区三区小说| 亚洲精品中文在线观看| 亚洲免费看黄网站| 日韩一区二区视频在线观看| 日韩一级在线观看| 欧美成人综合网站| 中文乱码免费一区二区| 亚洲人xxxx| 亚洲成人手机在线| 国产美女视频91| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产成人在线观看免费网站| 国产成a人无v码亚洲福利| jlzzjlzz亚洲女人18| 欧美专区亚洲专区| 久久婷婷国产综合国色天香| 国产精品国产三级国产有无不卡| 亚洲欧美在线视频| 毛片一区二区三区| 91免费国产在线观看| 91精品国产黑色紧身裤美女| 国产性天天综合网| 日韩影院精彩在线| 91在线无精精品入口| 久久五月婷婷丁香社区| 亚洲bt欧美bt精品777| 国产成人99久久亚洲综合精品| 欧美日韩电影一区| 国产精品私房写真福利视频| 无码av中文一区二区三区桃花岛| 国产精品伊人色| 精品日韩成人av| 午夜精品久久久久久久久| 国产超碰在线一区| 久久久精品天堂| 久草中文综合在线| 日韩午夜电影av| 日韩精品视频网| 欧美丝袜第三区| 一区二区三区 在线观看视频| 亚洲精品综合在线| 91免费观看视频| 亚洲最色的网站| 日本精品免费观看高清观看| 亚洲日本中文字幕区| www.亚洲色图.com| 亚洲精品成人天堂一二三| 91美女在线视频| 五月天欧美精品| 精品国产伦理网| 国产精品夜夜爽| 国产精品美女一区二区三区| xnxx国产精品|