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

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

?? clv_listview.c

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? C
?? 第 1 頁 / 共 5 頁
字號:

////////////////////////////////////////////////////////////////////////////////



#include "stdafx.h"
#include "globals.h"
#include "resource.h"


////////////////////////////////////////////////////////////////////////////////
//
typedef enum _CIe_WindowMode
{
    wmQuiescent,
    wmHeader_Click,
    wmHeader_ChangeWidth,
    wmHeader_ChangeOrder,

    wmHScrollbar_DragThumb,
    wmHScrollbar_Scroll_Left,
    wmHScrollbar_Scroll_Right,
    wmHScrollbar_Page_Left,
    wmHScrollbar_Page_Right,

    wmVScrollbar_DragThumb,
    wmVScrollbar_Scroll_Up,
    wmVScrollbar_Scroll_Down,
    wmVScrollbar_Page_Up,
    wmVScrollbar_Page_Down,

    wmList_Click,
    wmList_Drag

} CIe_WindowMode;
//
//
//
typedef struct _CIs_ListView_Column
{
    char* m_pColumnText;
    int m_iColumnWidth;
    DWORD m_dwFlags;
    wp_GetItemText m_pfnTextAccessor;
    wp_GetItemDrawColour m_pfnGetCustomDrawColour;
    CPe_ListColumnAlign m_enAlign;

} CIs_ListView_Column;
//
//
//
typedef struct _CIs_ListView_Item
{
    DWORD m_dwFlags;
    const void* m_pItemData;

} CIs_ListView_Item;
//
//
//
typedef struct _CIs_ListViewData
{
    HWND m_hWnd;
    BOOL m_bInBatch;
    int m_iBatchNesting;
    BOOL m_bHasFocus;
    unsigned int m_iItemHeight;
    int m_iNumItemsOnPage;
    RECT m_rClient;
    RECT m_rHeader;
    RECT m_rList;
    RECT m_rScrollbar_Horiz;
    RECT m_rScrollbar_Horiz_Thumb;
    RECT m_rScrollbar_Vert;
    RECT m_rScrollbar_Vert_Thumb;

    // Columns
    unsigned int m_iNumColumns;
    CIs_ListView_Column* m_pColumns;
    unsigned int* m_piColumnOrder;

    // Items
    CIs_ListView_Item* m_pItems;
    int m_iNumItemsInBuffer;
    int m_iNumItems;

    // Selection, scroll & focus
    int m_iXOrigin;
    int m_iXScrollExtent;
    BOOL m_bScrollBarVisible_Horiz;
    BOOL m_bScrollBarVisible_Vert;
    int m_iFirstVisibleItem;
    int m_iFocusItem;
    int m_iKeyboardAnchor;

    // State
    CIe_WindowMode m_enWindowMode;
    unsigned int m_uiAutorepeatTimer;
    BOOL m_bAutoRepeatFirst;
    BOOL m_bMouseOverScrollbutton;
    int m_iActiveHeaderCol;
    int m_iClickedItem;
    POINT m_ptMouseDown;
    POINT m_ptMouseDown_OnHitItem;
    DWORD m_dwMouseDown_Keys;

    // Callback handlers
    wp_DrawBackgroundRect m_hndlr_DrawBackgroundRect;
    wp_HeaderChanged m_hndlr_HeaderChanged;
    wp_ItemCallback m_hndlr_ItemSelected;
    wp_ItemCallback m_hndlr_ItemAction;
    wp_ItemCallback m_hndlr_ItemDrag;
    wp_ItemSubCallback m_hndlr_ItemRightClick;
    wp_ColHeaderClick m_hndlr_ColHeaderClick;
    wp_UnhandledKeyPress m_hndlr_UnhandledKeyPress;

} CIs_ListViewData;
//
////////////////////////////////////////////////////////////////////////////////


#define	CPC_HEADERCOLLAPSETHRESHOLD		8
#define	CPC_HEADERDRAGDISTANCE			16
#define	CPC_BUFFERQUANTISATION			128
#define	CPC_HEADERDRAG_HTWIDTH			8
#define	CPC_HEADERDRAG_DEFAULTWIDTH		100
#define CPC_SCROLLBAR_HORIZ_LINESIZE	10
#define CPC_SCROLLBAR_HORIZ_PAGESIZE	100
#define CPC_SCROLLBAR_MOUSEWHEELAMOUNT	5
#define CPC_TIMERID_AUTOREPEAT			1
#define	CPC_LISTDRAGDISTANCE			4
LRESULT CALLBACK exp_ListViewWindowProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam);
#define	CLC_COOLPLAYER_LISTVIEW_WINDOWCLASSNAME	"CoolPlayer_ListView"
////////////////////////////////////////////////////////////////////////////////
//
//
//
CP_HLISTVIEW CLV_Create(HWND hWndParent, const int iX, const int iY, const int iWidth, const int iHeight)
{
    WNDCLASS wcPlaylist;
    HWND hWndWindow;
    CIs_ListViewData* pListData;

    wcPlaylist.style = CS_DBLCLKS;
    wcPlaylist.lpfnWndProc = exp_ListViewWindowProc;
    wcPlaylist.cbClsExtra = 0;
    wcPlaylist.cbWndExtra = 0;
    wcPlaylist.hInstance = GetModuleHandle(NULL);
    wcPlaylist.hIcon = NULL;	// We will explicity set our icons (so that we have a nice small icon)
    wcPlaylist.hCursor = NULL;
    wcPlaylist.hbrBackground = (HBRUSH)GetStockObject(HOLLOW_BRUSH); // Prevent the system drawing white over our invaid rgn before we can paint
    wcPlaylist.lpszMenuName = NULL;
    wcPlaylist.lpszClassName = CLC_COOLPLAYER_LISTVIEW_WINDOWCLASSNAME;
    RegisterClass(&wcPlaylist);

    pListData = (CIs_ListViewData*)malloc(sizeof(CIs_ListViewData));
    pListData->m_bInBatch = FALSE;
    pListData->m_iBatchNesting = 0;
    pListData->m_bHasFocus = FALSE;
    pListData->m_iNumColumns = 0;
    pListData->m_pColumns = NULL;
    pListData->m_piColumnOrder = NULL;
    pListData->m_enWindowMode = wmQuiescent;
    pListData->m_uiAutorepeatTimer = 0;
    pListData->m_pItems = NULL;
    pListData->m_iNumItems = 0;
    pListData->m_iNumItemsInBuffer = 0;
    pListData->m_iFirstVisibleItem = 0;
    pListData->m_iXOrigin = 0;
    pListData->m_bScrollBarVisible_Horiz = FALSE;
    pListData->m_iFocusItem = CPC_INVALIDITEM;
    pListData->m_iKeyboardAnchor = CPC_INVALIDITEM;

    // Handlers
    pListData->m_hndlr_DrawBackgroundRect = NULL;
    pListData->m_hndlr_HeaderChanged = NULL;
    pListData->m_hndlr_ItemSelected = NULL;
    pListData->m_hndlr_ItemAction = NULL;
    pListData->m_hndlr_ItemDrag = NULL;
    pListData->m_hndlr_ItemRightClick = NULL;
    pListData->m_hndlr_ColHeaderClick = NULL;
    pListData->m_hndlr_UnhandledKeyPress = NULL;

    hWndWindow = CreateWindowEx(WS_EX_ACCEPTFILES,
                                CLC_COOLPLAYER_LISTVIEW_WINDOWCLASSNAME,
                                "",
                                WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE,
                                iX, iY, iWidth, iHeight, hWndParent,
                                NULL,
                                GetModuleHandle(NULL),
                                pListData);


    return (CP_HLISTVIEW)pListData;
}
//
//
//
HWND CLV_GetHWND(CP_HLISTVIEW _hListData)
{
    CIs_ListViewData* pListData = (CIs_ListViewData*)_hListData;
    CP_CHECKOBJECT(pListData);

    return pListData->m_hWnd;
}
//
//
//
void CLV_EmptyItems(CIs_ListViewData* pListData)
{
    if(pListData->m_pItems == NULL)
        return;

    free(pListData->m_pItems);
    pListData->m_pItems = NULL;
    pListData->m_iNumItems = 0;
    pListData->m_iNumItemsInBuffer = 0;
}
//
//
//
void CLV_InvalidateWindow(CIs_ListViewData* pListData)
{
    InvalidateRect(pListData->m_hWnd, NULL, FALSE);
}
//
//
//
int CLV_YOffsetToItem(CIs_ListViewData* pListData, const int iYOffset)
{
    return pListData->m_iFirstVisibleItem
           + (int)floor( (float)(iYOffset-pListData->m_rList.top) / (float)pListData->m_iItemHeight);
}
//
//
//
int CLV_GetListRect_Lines(CIs_ListViewData* pListData)
{
    return (int)floor( (float)(pListData->m_rList.bottom-pListData->m_rList.top) / (float)pListData->m_iItemHeight);
}
//
//
//
void CLV_CleanupWindowData(CIs_ListViewData* pListData)
{
    // Free items
    CLV_EmptyItems(pListData);

    // Free columns
    if(pListData->m_pColumns)
    {
        unsigned int iColumnIDX;
        for(iColumnIDX = 0; iColumnIDX < pListData->m_iNumColumns; iColumnIDX++)
        {
            if(pListData->m_pColumns[iColumnIDX].m_pColumnText)
                free(pListData->m_pColumns[iColumnIDX].m_pColumnText);
        }
    }

    free(pListData);
}
//
//
//
void CLV_DrawText(CPs_DrawContext* pDC, const char* pcString, const RECT* _prTarget, const CPe_ListColumnAlign enAlign)
{
    RECT rDraw;
    UINT uiFlags;

    // Skip this draw if we are totally clipped
    if(_prTarget->right < pDC->m_rClip.left
            || _prTarget->bottom < pDC->m_rClip.top
            || _prTarget->left > pDC->m_rClip.right
            || _prTarget->top > pDC->m_rClip.bottom)
    {
        return;
    }

    rDraw = *_prTarget;
    if(enAlign == lcaLeft)
        uiFlags = DT_LEFT;
    else if(enAlign == lcaCentre)
        uiFlags = DT_CENTER;
    else if(enAlign == lcaRight)
    {
        uiFlags = DT_RIGHT;
        rDraw.right -= 5;
        if(rDraw.right < rDraw.left)
            rDraw.right = rDraw.left;
    }
    else
        uiFlags = 0L;

    OffsetRect(&rDraw, pDC->m_ptOffset.x, pDC->m_ptOffset.y);
    DrawText(pDC->m_dcDraw, pcString, -1, &rDraw, DT_WORD_ELLIPSIS | DT_NOPREFIX | uiFlags);
}
//
//
//
void CLV_UpdateScrollBars(CIs_ListViewData* pListData)
{
    unsigned int _iColIDX;
    int iListRectWidth;
    int iListRectHeight_Lines;
    BOOL bCountedVScrollbar;

    // Get the total width
    pListData->m_iXScrollExtent = 0;
    for(_iColIDX = 0; _iColIDX < pListData->m_iNumColumns; _iColIDX++)
    {
        unsigned int iColumnIDX = pListData->m_piColumnOrder[_iColIDX];
        if(pListData->m_pColumns[iColumnIDX].m_dwFlags & CPLV_COLFLAG_HIDDEN)
            continue;
        pListData->m_iXScrollExtent += pListData->m_pColumns[iColumnIDX].m_iColumnWidth;
    }

    // Work out available width
    iListRectWidth = pListData->m_rClient.right-pListData->m_rClient.left;

    // - If we need a vertical scrollbar (at this point) - then take this into account
    iListRectHeight_Lines = CLV_GetListRect_Lines(pListData);
    if(iListRectHeight_Lines < pListData->m_iNumItems)
    {
        bCountedVScrollbar = TRUE;
        pListData->m_rList.right = pListData->m_rClient.right - glb_pSkin->mpl_pVScrollBar_TrackUp->m_szSize.cx;
        iListRectWidth -= glb_pSkin->mpl_pVScrollBar_TrackUp->m_szSize.cx;
    }
    else
        bCountedVScrollbar = FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕亚洲成人| 高清av一区二区| 午夜久久福利影院| 亚洲一区二区五区| 亚洲一卡二卡三卡四卡五卡| 亚洲精品久久久久久国产精华液| 不卡一卡二卡三乱码免费网站| 国产一区二区中文字幕| 狠狠色2019综合网| 狠狠色狠狠色综合| 国产精品一二三四| 懂色av一区二区夜夜嗨| av电影一区二区| 91在线免费看| 欧美视频一二三区| 4438x成人网最大色成网站| 6080日韩午夜伦伦午夜伦| 欧美一级国产精品| 久久亚洲精品国产精品紫薇| 国产亚洲精品bt天堂精选| 国产午夜精品一区二区三区视频| 亚洲国产精华液网站w| 国产精品丝袜一区| 亚洲精品国久久99热| 亚洲国产精品久久一线不卡| 天天色天天操综合| 黄色成人免费在线| 成人精品视频网站| 色哟哟精品一区| 在线成人av影院| ww久久中文字幕| 国产精品久久久久婷婷二区次| 一区二区三区毛片| 久久精品国产999大香线蕉| 国产精品69毛片高清亚洲| 色哟哟一区二区三区| 91精品国产手机| 国产亚洲1区2区3区| 亚洲综合色网站| 久久精品国产亚洲a| 成人看片黄a免费看在线| 欧美视频一区二区三区| 亚洲精品一区二区三区福利| 国产精品超碰97尤物18| 亚洲成人精品影院| 国产99精品在线观看| 欧美视频日韩视频在线观看| 精品久久一区二区三区| 亚洲男人的天堂av| 看国产成人h片视频| 91在线视频18| www激情久久| 一区二区三区在线免费视频| 久草精品在线观看| 一本一本大道香蕉久在线精品| 日韩一区二区在线播放| 国产精品成人免费精品自在线观看| 午夜精品一区二区三区免费视频| 国产精品456| 4438x成人网最大色成网站| 中文字幕欧美一区| 九一九一国产精品| 欧美日韩一区视频| 亚洲欧洲av在线| 精品在线亚洲视频| 欧美色中文字幕| 国产欧美精品一区aⅴ影院 | 国产精品不卡一区二区三区| 视频一区免费在线观看| 9i看片成人免费高清| 2020国产精品自拍| 亚洲午夜精品一区二区三区他趣| 国产成人精品免费视频网站| 欧美一区二区女人| 亚洲国产视频a| 91丨porny丨国产入口| 久久新电视剧免费观看| 舔着乳尖日韩一区| 91欧美一区二区| 中文字幕第一区| 国产一区二区三区四区五区美女| 欧美日韩日日骚| 亚洲品质自拍视频网站| 成人午夜免费av| 久久久久久久久久久黄色| 日本一不卡视频| 欧美在线观看你懂的| 日韩美女久久久| 99久久99久久久精品齐齐| 国产欧美精品在线观看| 国产精品一二三四| 久久久国产一区二区三区四区小说| 麻豆精品精品国产自在97香蕉 | 精品日韩一区二区三区免费视频| 亚洲在线一区二区三区| 91热门视频在线观看| 国产精品久久久久桃色tv| 粉嫩aⅴ一区二区三区四区五区| 精品久久久久久无| 看国产成人h片视频| 日韩免费高清av| 极品少妇一区二区三区精品视频 | 中文字幕日韩一区二区| 成人免费av在线| 国产精品乱码人人做人人爱| 国产成人免费在线视频| 国产欧美一区二区三区在线看蜜臀| 国模冰冰炮一区二区| 2023国产一二三区日本精品2022| 久久99国内精品| 国产视频一区不卡| 国产成人av影院| 中文字幕不卡一区| 99国产精品99久久久久久| 亚洲欧美日韩成人高清在线一区| 91香蕉国产在线观看软件| 亚洲婷婷在线视频| 91电影在线观看| 日韩国产一二三区| 欧美草草影院在线视频| 国产在线精品一区二区不卡了| 久久女同性恋中文字幕| 成人午夜在线播放| 亚洲视频在线一区| 欧美视频三区在线播放| 日本va欧美va欧美va精品| 精品美女一区二区| 国产99久久久精品| 亚洲卡通欧美制服中文| 欧美日韩在线播放三区| 理论片日本一区| 国产精品久久久久久户外露出| 91在线精品秘密一区二区| 亚洲成人免费视| 久久一日本道色综合| 99国产精品久久久久| 手机精品视频在线观看| 欧美精品一区二区三区视频| av在线播放一区二区三区| 亚洲成人精品在线观看| 2023国产一二三区日本精品2022| a美女胸又www黄视频久久| 午夜精品一区二区三区电影天堂| 亚洲精品在线电影| 91黄色小视频| 极品少妇xxxx偷拍精品少妇| 亚洲图片欧美激情| 欧美一级爆毛片| 97成人超碰视| 久久99热国产| 亚洲视频在线一区| 精品久久久久久久人人人人传媒| av中文字幕在线不卡| 人人超碰91尤物精品国产| 日本一区二区不卡视频| 在线不卡免费av| 高清日韩电视剧大全免费| 午夜在线电影亚洲一区| 国产日韩欧美一区二区三区乱码| 在线欧美日韩国产| 国产成人aaaa| 日本欧美一区二区三区| 中文字幕中文在线不卡住| 欧美一级一级性生活免费录像| 成人免费视频视频| 久久精品国产精品亚洲精品| 亚洲图片你懂的| 国产无一区二区| 日韩欧美一级片| 欧美性做爰猛烈叫床潮| 成人综合日日夜夜| 美国欧美日韩国产在线播放| 一区二区在线观看视频| 久久久.com| 日韩精品一区二区三区视频播放 | 欧美丰满一区二区免费视频| 成人午夜在线视频| 国产一区二区美女| 免费成人美女在线观看| 亚洲愉拍自拍另类高清精品| 日本一区二区三区国色天香| 日韩一级大片在线观看| 在线观看国产日韩| 91网站黄www| 成人午夜大片免费观看| 精品一区二区三区免费视频| 婷婷六月综合网| 亚洲精品va在线观看| 国产精品高潮呻吟| 国产亚洲成aⅴ人片在线观看| 欧美mv和日韩mv的网站| 91麻豆精品国产91久久久久久久久 | 亚洲欧洲另类国产综合| 色爱区综合激月婷婷| 日韩精品乱码av一区二区| 亚洲综合视频在线观看| 亚洲男人的天堂网| 亚洲欧美另类久久久精品2019| 国产精品―色哟哟| 国产精品入口麻豆九色|