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

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

?? celistctrlex.cpp

?? EVC寫的ListCtrl擴展控件
?? CPP
字號:
// CeListCtrlEx.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "CeListCtrlEx.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCeListCtrlEx

CCeListCtrlEx::CCeListCtrlEx()
{
}

CCeListCtrlEx::~CCeListCtrlEx()
{
}

BEGIN_MESSAGE_MAP(CCeListCtrlEx, CListCtrl)
	//{{AFX_MSG_MAP(CCeListCtrlEx)
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
    ON_WM_LBUTTONDOWN()
    ON_NOTIFY_REFLECT(NM_RECOGNIZEGESTURE, OnRecognizeGesture)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCeListCtrlEx message handlers

void CCeListCtrlEx::Init()
{
    // Change the style of the control
    VERIFY(ModifyStyle(LVS_TYPEMASK       | // this styles are removed
                       LVS_SHOWSELALWAYS  |
                       LVS_EDITLABELS,
                       LVS_REPORT         | // this styles are added
                       LVS_OWNERDRAWFIXED |
					   LVS_NOCOLUMNHEADER |
                       LVS_SINGLESEL));

    // Insert at least one column to the list control
    VERIFY(InsertColumn(0, _T("Column"), LVCFMT_LEFT) == 0);
	SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
}

int CCeListCtrlEx::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CListCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here

	Init();
	
	return 0;
}

void CCeListCtrlEx::PreSubclassWindow()
{
	// TODO: Add your specialized code here and/or call the base class

	Init();

	CListCtrl::PreSubclassWindow();
}

int CCeListCtrlEx::GetCurSelItem() const
{
    ASSERT(::IsWindow(m_hWnd));

    // Return the index of the item with the focus
    return GetNextItem(-1, LVNI_FOCUSED);
}

BOOL CCeListCtrlEx::SetCurSelItem(int nIndex)
{
    ASSERT(::IsWindow(m_hWnd));

    // Set the focus to the item with the specified index
    return SetItemState(nIndex, LVIS_FOCUSED, LVIS_FOCUSED);
}

BOOL CCeListCtrlEx::MoveItem(int nOldIndex, int nNewIndex)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    ASSERT(nOldIndex >= 0 && nOldIndex < GetItemCount());
    ASSERT(nNewIndex >= 0 && nNewIndex < GetItemCount());

    if (nOldIndex < 0 || nOldIndex >= GetItemCount())
        return FALSE;

    if (nNewIndex < 0 || nNewIndex >= GetItemCount())
        return FALSE;

    // Get the properties of the current selected item
	CString strText = GetItemText(nOldIndex, 0);

	LVITEM lvItem;
	memset(&lvItem, 0, sizeof(LVITEM));
	lvItem.mask     = LVIF_IMAGE;
	lvItem.iItem    = nOldIndex;
	lvItem.iSubItem = 0;
	VERIFY(GetItem(&lvItem));

    // Delete the current selected item
    VERIFY(DeleteItem(nOldIndex));

    // Insert the item on the new position
    VERIFY(InsertItem(nNewIndex, strText, lvItem.iImage) == nNewIndex);

    // Select the new item
    VERIFY(SetCurSelItem(nNewIndex));

    return TRUE;
}

BOOL CCeListCtrlEx::MoveItemUp(int nIndex)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    // ASSERT(nIndex >= 1 && nIndex < GetItemCount());

    if (nIndex >= 1 && nIndex < GetItemCount())
    {
        // Move the item one position up
        return MoveItem(nIndex, nIndex - 1);
    }

    return FALSE;
}

BOOL CCeListCtrlEx::MoveItemDown(int nIndex)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    // ASSERT(nIndex >= 0 && nIndex < GetItemCount() - 1);

    if (nIndex >= 0 && nIndex < GetItemCount() - 1)
    {
        // Move the item one position down
        return MoveItem(nIndex, nIndex + 1);
    }

    return FALSE;
}

BOOL CCeListCtrlEx::MoveItemTop(int nIndex)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    // ASSERT(nIndex >= 0 && nIndex < GetItemCount());

    if (nIndex >= 0 && nIndex < GetItemCount())
    {
        // Move the item to the first position
        return MoveItem(nIndex, 0);
    }

    return FALSE;
}

BOOL CCeListCtrlEx::MoveItemBottom(int nIndex)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    // ASSERT(nIndex >= 0 && nIndex < GetItemCount());

    if (nIndex >= 0 && nIndex < GetItemCount())
    {
        // Move the item to the last position
    	return MoveItem(nIndex, GetItemCount() - 1);
    }

    return FALSE;
}

int CCeListCtrlEx::DrawTextEndEllipsis(CDC* pDC, const CString& strText, CRect& rc, UINT uFormat)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    ASSERT(pDC != 0);

    // This function emulates the desktop version of DrawText with DT_END_ELLIPSIS flag set.
    // The original "DrawTextEndEllipsis" function was written by Alexander Shargin and
    // can be found at http://www.pocketpcdn.com/qa/ellipsis_flag.html.

    int nWidth = rc.Width();

    if (pDC->GetTextExtent(strText).cx > nWidth)
    {
        // Text doesn't fit in rect, we have to
        // truncate it and add ellipsis to the end.

        CString strTemp = strText;

        for (int n = strText.GetLength(); n >= 0; n--)
        {
            strTemp = strText.Left(n) + _T("...");

            if (pDC->GetTextExtent(strTemp).cx < nWidth)
            {
                break;
            }
        }

        // Draw the text with the ellipsis at the end
        return pDC->DrawText(strTemp, rc, uFormat);
    }

    // Draw the text without the ellipsis at the end
    return pDC->DrawText(strText, rc, uFormat);
}

void CCeListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    // Check pre-conditions
    ASSERT(::IsWindow(m_hWnd));
    ASSERT(lpDrawItemStruct != 0);

    // Some parts of this function are based on the "Selection Highlighting of an Entire Row"
    // article, written by Uwe Keim (http://www.magerquark.de). You can found this article
    // at http://www.codeproject.com/useritems/selectentirerow.asp.

    CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    CRect rcItem(lpDrawItemStruct->rcItem);
    int nItem = lpDrawItemStruct->itemID;
    CImageList* pImageList;

    // Save dc state
    int nSavedDC = pDC->SaveDC();

    // Get item image and state info
    LV_ITEM lvi;
    lvi.mask = LVIF_IMAGE | LVIF_STATE;
    lvi.iItem = nItem;
    lvi.iSubItem = 0;
    lvi.stateMask = 0xFFFF;     // get all state flags
    GetItem(&lvi);

    // Should the item be highlighted
    BOOL bHighlight = /*((lvi.state & LVIS_DROPHILITED)
        || ( (lvi.state & LVIS_SELECTED)
        && ((GetFocus() == this)
        || (GetStyle() & LVS_SHOWSELALWAYS)
        )
        )
        )*/ lvi.state & LVIS_FOCUSED;

    // Get rectangles for drawing
    CRect rcBounds, rcLabel, rcIcon;
    GetItemRect(nItem, rcBounds, LVIR_BOUNDS);
    GetItemRect(nItem, rcLabel, LVIR_LABEL);
    GetItemRect(nItem, rcIcon, LVIR_ICON);
    CRect rcCol(rcBounds);

    CString sLabel = GetItemText(nItem, 0);

    // Labels are offset by a certain amount
    // This offset is related to the width of a space character
    int offset = pDC->GetTextExtent(_T(" "), 1).cx * 2;

    CRect rcHighlight;
    /*CRect rcWnd;
    int nExt;
    switch( m_nHighlight )
    {
    case 0:
        nExt = pDC->GetOutputTextExtent(sLabel).cx + offset;
        rcHighlight = rcLabel;
        if( rcLabel.left + nExt < rcLabel.right )
            rcHighlight.right = rcLabel.left + nExt;
        break;
    case 1:
        rcHighlight = rcBounds;
        rcHighlight.left = rcLabel.left;
        break;
    case 2:
        GetClientRect(&rcWnd);*/
        rcHighlight = rcBounds;
        rcHighlight.left = rcLabel.left;
        /*rcHighlight.right = rcWnd.right;
        break;
    default:
        rcHighlight = rcLabel;
    }*/

    // Draw the background color
    if (bHighlight)
    {
        pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
        pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));

        pDC->FillRect(rcHighlight, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
    }
    else
        pDC->FillRect(rcHighlight, &CBrush(::GetSysColor(COLOR_WINDOW)));

    // Set clip region
    rcCol.right = rcCol.left + GetColumnWidth(0);
    CRgn rgn;
    rgn.CreateRectRgnIndirect(&rcCol);
    pDC->SelectClipRgn(&rgn);
    rgn.DeleteObject();

    // Draw state icon
    if (lvi.state & LVIS_STATEIMAGEMASK)
    {
        int nImage = ((lvi.state & LVIS_STATEIMAGEMASK) >> 12) - 1;
        pImageList = GetImageList(LVSIL_STATE);
        if (pImageList)
        {
            pImageList->Draw(pDC, nImage,
                CPoint(rcCol.left, rcCol.top), ILD_TRANSPARENT);
        }
    }

    // Draw normal and overlay icon
    pImageList = GetImageList(LVSIL_SMALL);
    if (pImageList)
    {
        UINT nOvlImageMask = lvi.state & LVIS_OVERLAYMASK;
        pImageList->Draw(pDC, lvi.iImage,
            CPoint(rcIcon.left, rcIcon.top),
            (bHighlight ? ILD_BLEND50 : 0) | ILD_TRANSPARENT | nOvlImageMask);
    }

    // Draw item label - Column 0
    rcLabel.left += offset / 2;
    rcLabel.right -= offset;

    /*pDC->DrawText(sLabel,-1,rcLabel,DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP
        | DT_VCENTER | DT_END_ELLIPSIS);*/

    DrawTextEndEllipsis(pDC, sLabel, rcLabel, DT_LEFT | DT_SINGLELINE |
        DT_NOPREFIX | DT_NOCLIP | DT_VCENTER /*| DT_END_ELLIPSIS*/);

    // Draw labels for remaining columns
    LV_COLUMN lvc;
    lvc.mask = LVCF_FMT | LVCF_WIDTH;

    /*if( m_nHighlight == 0 )     // Highlight only first column
    {
        pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
        pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
    }*/

    rcBounds.right = rcHighlight.right > rcBounds.right ? rcHighlight.right : rcBounds.right;
    rgn.CreateRectRgnIndirect(&rcBounds);
    pDC->SelectClipRgn(&rgn);

    for (int nColumn = 1; GetColumn(nColumn, &lvc); nColumn++)
    {
        rcCol.left = rcCol.right;
        rcCol.right += lvc.cx;

        // Draw the background if needed
        /*if( m_nHighlight == HIGHLIGHT_NORMAL )
            pDC->FillRect(rcCol, &CBrush(::GetSysColor(COLOR_WINDOW)));*/

        sLabel = GetItemText(nItem, nColumn);
        if (sLabel.GetLength() == 0)
            continue;

        // Get the text justification
        UINT nJustify = DT_LEFT;
        switch(lvc.fmt & LVCFMT_JUSTIFYMASK)
        {
        case LVCFMT_RIGHT:
            nJustify = DT_RIGHT;
            break;
        case LVCFMT_CENTER:
            nJustify = DT_CENTER;
            break;
        default:
            break;
        }

        rcLabel = rcCol;
        rcLabel.left += offset;
        rcLabel.right -= offset;

        /*pDC->DrawText(sLabel, -1, rcLabel, nJustify | DT_SINGLELINE |
            DT_NOPREFIX | DT_VCENTER | DT_END_ELLIPSIS);*/

        DrawTextEndEllipsis(pDC, sLabel, rcLabel, nJustify | DT_SINGLELINE |
            DT_NOPREFIX | DT_VCENTER /*| DT_END_ELLIPSIS*/);
    }

    // Draw focus rectangle if item has focus
    if (lvi.state & LVIS_FOCUSED && (GetFocus() == this))
        pDC->DrawFocusRect(rcHighlight);

    // Restore dc
    pDC->RestoreDC(nSavedDC);
}

void CCeListCtrlEx::RepaintSelectedItems()
{
    CRect rcBounds, rcLabel;

    // Invalidate focused item so it can repaint
    int nItem = GetNextItem(-1, LVNI_FOCUSED);

    if(nItem != -1)
    {
        GetItemRect(nItem, rcBounds, LVIR_BOUNDS);
        GetItemRect(nItem, rcLabel, LVIR_LABEL);
        rcBounds.left = rcLabel.left;

        InvalidateRect(rcBounds, FALSE);
    }

    // Invalidate selected items depending on LVS_SHOWSELALWAYS
    if(!(GetStyle() & LVS_SHOWSELALWAYS))
    {
        for(nItem = GetNextItem(-1, LVNI_SELECTED);
        nItem != -1; nItem = GetNextItem(nItem, LVNI_SELECTED))
        {
            GetItemRect(nItem, rcBounds, LVIR_BOUNDS);
            GetItemRect(nItem, rcLabel, LVIR_LABEL);
            rcBounds.left = rcLabel.left;

            InvalidateRect(rcBounds, FALSE);
        }
    }
#ifdef _DEBUG
    else
        ASSERT(FALSE);
#endif

    UpdateWindow();
}

void CCeListCtrlEx::OnSetFocus(CWnd* pOldWnd)
{
	CListCtrl::OnSetFocus(pOldWnd);

	// TODO: Add your message handler code here

    // check if we are getting focus from label edit box
    if (pOldWnd != NULL && pOldWnd->GetParent() == this)
        return;

    // repaint items that should change appearance
    if ((GetStyle() & LVS_TYPEMASK) == LVS_REPORT)
        RepaintSelectedItems();
#ifdef _DEBUG
    else
        ASSERT(FALSE);
#endif
}

void CCeListCtrlEx::OnKillFocus(CWnd* pNewWnd)
{
	CListCtrl::OnKillFocus(pNewWnd);

	// TODO: Add your message handler code here

    // check if we are losing focus to label edit box
    if (pNewWnd != NULL && pNewWnd->GetParent() == this)
        return;

    // repaint items that should change appearance
    if ((GetStyle() & LVS_TYPEMASK) == LVS_REPORT)
        RepaintSelectedItems();
#ifdef _DEBUG
    else
        ASSERT(FALSE);
#endif
}

void CCeListCtrlEx::OnLButtonDown(UINT nFlags, CPoint point)
{
    Default(); // call default message handler
}

void CCeListCtrlEx::OnRecognizeGesture(NMHDR* pNMHDR, LRESULT* pResult)
{
    *pResult = TRUE; // cancel the red dot animation
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区免费观看| 久久综合九色综合97婷婷| 日本不卡在线视频| 亚洲欧洲性图库| 欧美一区二区视频网站| 不卡一区二区中文字幕| 日本视频一区二区三区| 一区二区三国产精华液| 久久久国产一区二区三区四区小说 | 久久久久久久网| 欧美在线观看禁18| 成人午夜视频在线| 美女视频网站黄色亚洲| 亚洲一区二区三区美女| 国产精品每日更新在线播放网址| 欧美一区二区人人喊爽| 欧美图片一区二区三区| 99re8在线精品视频免费播放| 国产专区欧美精品| 日本 国产 欧美色综合| 一区二区三区色| 亚洲视频一区二区免费在线观看| 久久久国产精华| 日韩精品一区二区三区视频在线观看| 精品视频一区二区不卡| 色欧美片视频在线观看| 成人黄色av网站在线| 国产精品一品视频| 精品一区二区综合| 美国十次了思思久久精品导航| 亚洲一二三四久久| 亚洲黄色录像片| 亚洲丝袜另类动漫二区| 中文字幕制服丝袜一区二区三区| 久久精品亚洲精品国产欧美kt∨| 日韩女优制服丝袜电影| 日韩视频在线一区二区| 91精品国产综合久久福利| 欧美日韩国产一二三| 欧美在线色视频| 欧美亚洲动漫精品| 精品视频一区二区不卡| 欧美美女视频在线观看| 6080亚洲精品一区二区| 欧美电影影音先锋| 日韩一卡二卡三卡国产欧美| 宅男在线国产精品| 欧美不卡一区二区| 久久久午夜精品理论片中文字幕| 亚洲精品一区二区三区香蕉| 欧美精品一区二区三区一线天视频| 欧美成人精精品一区二区频| 精品国产精品网麻豆系列| 久久久天堂av| 中文字幕的久久| 亚洲欧美日韩国产成人精品影院| 一区二区在线观看视频| 亚洲高清一区二区三区| 美日韩黄色大片| 风流少妇一区二区| 91色视频在线| 欧美另类高清zo欧美| 日韩欧美成人激情| 国产女人18毛片水真多成人如厕 | 亚洲va在线va天堂| 人人精品人人爱| 粉嫩av一区二区三区在线播放| 成人激情免费电影网址| 91蝌蚪国产九色| 欧美丰满少妇xxxbbb| 久久青草国产手机看片福利盒子| 中文字幕欧美国产| 亚洲一区欧美一区| 精品亚洲国内自在自线福利| 成人av在线一区二区三区| 欧美自拍丝袜亚洲| 2020国产精品| 亚洲欧美一区二区三区极速播放 | 麻豆国产一区二区| fc2成人免费人成在线观看播放| 在线免费观看成人短视频| 欧美一级黄色录像| 色婷婷狠狠综合| 91精品在线观看入口| 日韩欧美综合在线| 国产拍揄自揄精品视频麻豆| 亚洲婷婷在线视频| 美国精品在线观看| 91色|porny| 精品国产欧美一区二区| 国产精品美日韩| 三级成人在线视频| 99久久精品国产导航| 51精品国自产在线| 亚洲少妇屁股交4| 国产精品一区一区三区| 欧美亚洲综合一区| 中文字幕 久热精品 视频在线| 亚洲国产成人av网| a4yy欧美一区二区三区| 精品捆绑美女sm三区| 中文字幕在线不卡一区| 精品一区二区三区日韩| 精品视频在线免费看| 欧美国产日韩亚洲一区| 免费高清不卡av| 欧美综合天天夜夜久久| 中文字幕精品一区二区三区精品| 日本aⅴ精品一区二区三区| 色成年激情久久综合| 日本一区二区三区免费乱视频 | 国产婷婷色一区二区三区四区| 亚洲成人免费电影| 色妹子一区二区| 欧美经典三级视频一区二区三区| 日韩成人dvd| 欧美手机在线视频| 亚洲免费在线播放| 成人一区在线观看| 久久久综合视频| 极品少妇xxxx精品少妇| 在线综合亚洲欧美在线视频| 亚洲一区二区三区中文字幕 | 丁香天五香天堂综合| 欧美xxx久久| 免费成人性网站| 在线观看91精品国产麻豆| 亚洲第一成年网| 欧美日韩aaaaaa| 亚洲一区二区三区爽爽爽爽爽| 色94色欧美sute亚洲线路一久| 亚洲欧洲精品一区二区三区| 成人综合激情网| 国产精品每日更新在线播放网址| 国产精品一二三在| 久久一区二区三区国产精品| 久色婷婷小香蕉久久| 日韩免费电影一区| 捆绑调教一区二区三区| 欧美电视剧在线观看完整版| 麻豆专区一区二区三区四区五区| 欧美一区二区三区电影| 免费观看91视频大全| 精品久久久久久综合日本欧美| 另类专区欧美蜜桃臀第一页| 精品国产一区二区亚洲人成毛片| 精品亚洲国内自在自线福利| 2023国产一二三区日本精品2022| 国精产品一区一区三区mba桃花| 久久精品一区二区三区不卡牛牛| 国产精品夜夜嗨| 国产精品国产三级国产aⅴ入口 | 91麻豆精品国产91久久久使用方法| 亚洲高清免费视频| 欧美一区二区精美| 国产在线播放一区三区四| 久久先锋影音av鲁色资源网| 国产成人精品网址| 亚洲欧洲精品一区二区三区 | 中文字幕精品一区二区三区精品| 北条麻妃一区二区三区| 亚洲人成在线观看一区二区| 一本色道a无线码一区v| 亚洲777理论| 久久久久久久久免费| 99精品欧美一区二区三区小说| 亚洲激情图片小说视频| 欧美一区二区三区视频在线| 国产一区视频导航| 中文字幕欧美一| 91精品久久久久久久91蜜桃| 国内精品视频一区二区三区八戒| 国产精品美日韩| 9191成人精品久久| 国产一区二区精品久久99| 中文字幕欧美一| 日韩网站在线看片你懂的| 暴力调教一区二区三区| 五月天激情综合网| 日本一区二区免费在线观看视频| 欧美主播一区二区三区| 久久99九九99精品| 亚洲欧美乱综合| 日韩欧美国产不卡| 91在线小视频| 九九国产精品视频| 一区二区三区蜜桃| 久久日韩精品一区二区五区| 色综合欧美在线| 国产一区二三区| 午夜国产精品一区| 国产精品理论在线观看| 91精品国产综合久久久久久久 | 亚洲免费成人av| 日韩精品一区二区三区swag| 91视频观看免费| 国产精品一区不卡| 蜜臀a∨国产成人精品| 亚洲一区二区视频在线| 中文字幕在线视频一区|