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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? clv_listview.c

?? VC++視頻開(kāi)發(fā)實(shí)例集錦(包括“遠(yuǎn)程視頻監(jiān)控”"語(yǔ)音識(shí)別系統(tǒng)"等13個(gè)經(jīng)典例子)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
    // No (horiz) scrollbar needed?
    if(pListData->m_iXScrollExtent <= iListRectWidth)
    {
        pListData->m_rList.bottom = pListData->m_rClient.bottom;
        if(pListData->m_bScrollBarVisible_Horiz == TRUE)
            CLV_InvalidateWindow(pListData);
        pListData->m_bScrollBarVisible_Horiz = FALSE;
        pListData->m_iXOrigin = 0;
        SetRect(&pListData->m_rScrollbar_Horiz, 0, 0, 0, 0);
    }
    else
    {
        int iTrackWidth;
        int iTrackThumbWidth;
        int iTrackThumbPos;
        int iTrackThumbWidth_Min;
        int iTrackThumbWidth_Max;

        pListData->m_rList.bottom = pListData->m_rClient.bottom - glb_pSkin->mpl_pHScrollBar_TrackUp->m_szSize.cy;

        // The presence of this scrollbar may require a vertical scrollbar - take this into account
        if(bCountedVScrollbar == FALSE)
        {
            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;
            }
        }

        // Work out size of scroll track
        iTrackWidth = iListRectWidth - (glb_pSkin->mpl_pHScrollBar_Left->m_pImage->m_szSize.cx
                                        + glb_pSkin->mpl_pHScrollBar_Right->m_pImage->m_szSize.cx);

        // Setup scrollbar
        if(pListData->m_bScrollBarVisible_Horiz == FALSE)
            CLV_InvalidateWindow(pListData);
        pListData->m_bScrollBarVisible_Horiz = TRUE;
        pListData->m_rScrollbar_Horiz = pListData->m_rList;
        pListData->m_rScrollbar_Horiz.top = pListData->m_rList.bottom;
        pListData->m_rScrollbar_Horiz.bottom = pListData->m_rClient.bottom;

        // Limit scroll to fit into window
        if( (pListData->m_iXOrigin + iListRectWidth) > pListData->m_iXScrollExtent)
            pListData->m_iXOrigin = pListData->m_iXScrollExtent - iListRectWidth;

        // Setup track rect
        iTrackThumbWidth = (int)( (( (float)iListRectWidth / (float)pListData->m_iXScrollExtent ) * (float)iTrackWidth));
        iTrackThumbWidth_Min = glb_pSkin->mpl_rHScrollBar_Track_Tile.left
                               + (glb_pSkin->mpl_pHScrollBar_TrackUp->m_szSize.cx - glb_pSkin->mpl_rHScrollBar_Track_Tile.right);
        iTrackThumbWidth_Max = (pListData->m_rScrollbar_Horiz.right - pListData->m_rScrollbar_Horiz.left);
        if(iTrackThumbWidth < iTrackThumbWidth_Min)
            iTrackThumbWidth = iTrackThumbWidth_Min;
        if(iTrackThumbWidth > iTrackThumbWidth_Max)
            iTrackThumbWidth = iTrackThumbWidth_Max;
        pListData->m_rScrollbar_Horiz_Thumb = pListData->m_rScrollbar_Horiz;
        iTrackThumbPos = (int)( (  ((float)pListData->m_iXOrigin / (float)(pListData->m_iXScrollExtent - iListRectWidth)) * (float)(iTrackWidth-iTrackThumbWidth)));
        pListData->m_rScrollbar_Horiz_Thumb.left = iTrackThumbPos + glb_pSkin->mpl_pHScrollBar_Left->m_pImage->m_szSize.cx;
        pListData->m_rScrollbar_Horiz_Thumb.right = pListData->m_rScrollbar_Horiz_Thumb.left + iTrackThumbWidth;

        InvalidateRect(pListData->m_hWnd, &pListData->m_rScrollbar_Horiz, FALSE);
    }

    // Vertical scrollbar
    iListRectHeight_Lines = CLV_GetListRect_Lines(pListData);
    if(pListData->m_iNumItems <= iListRectHeight_Lines)
    {
        pListData->m_rList.right = pListData->m_rClient.right;
        pListData->m_rHeader.right = pListData->m_rList.right;
        if(pListData->m_bScrollBarVisible_Vert == TRUE)
            CLV_InvalidateWindow(pListData);
        pListData->m_bScrollBarVisible_Vert = FALSE;
        pListData->m_iFirstVisibleItem = 0;
        SetRect(&pListData->m_rScrollbar_Vert, 0, 0, 0, 0);
    }
    else
    {
        int iTrackHeight;
        int iTrackThumbHeight;
        int iTrackThumbPos;
        int iTrackThumbHeight_Min;
        int iTrackThumbHeight_Max;
        const int iListRectHeight = pListData->m_rList.bottom - pListData->m_rList.top;

        // Work out size of scroll track
        iTrackHeight = iListRectHeight - (glb_pSkin->mpl_pVScrollBar_Up->m_iStateHeight
                                          + glb_pSkin->mpl_pVScrollBar_Down->m_iStateHeight);

        // Setup scrollbar
        pListData->m_rList.right = pListData->m_rClient.right - glb_pSkin->mpl_pVScrollBar_TrackUp->m_szSize.cx;
        pListData->m_rHeader.right = pListData->m_rList.right;
        if(pListData->m_bScrollBarVisible_Vert == FALSE)
            CLV_InvalidateWindow(pListData);
        pListData->m_bScrollBarVisible_Vert = TRUE;
        pListData->m_rScrollbar_Vert = pListData->m_rList;
        pListData->m_rScrollbar_Vert.left = pListData->m_rList.right;
        pListData->m_rScrollbar_Vert.right = pListData->m_rClient.right;

        // Limit scroll to fit into window
        if( (pListData->m_iFirstVisibleItem + iListRectHeight_Lines) > pListData->m_iNumItems)
            pListData->m_iFirstVisibleItem = pListData->m_iNumItems - iListRectHeight_Lines;

        // Setup track rect
        iTrackThumbHeight = (int)( (( (float)iListRectHeight_Lines / (float)pListData->m_iNumItems ) * (float)iTrackHeight));
        iTrackThumbHeight_Min = glb_pSkin->mpl_rVScrollBar_Track_Tile.top
                                + (glb_pSkin->mpl_pVScrollBar_TrackUp->m_szSize.cy - glb_pSkin->mpl_rVScrollBar_Track_Tile.bottom);
        iTrackThumbHeight_Max = (pListData->m_rScrollbar_Vert.bottom - pListData->m_rScrollbar_Vert.top);
        if(iTrackThumbHeight < iTrackThumbHeight_Min)
            iTrackThumbHeight = iTrackThumbHeight_Min;
        if(iTrackThumbHeight > iTrackThumbHeight_Max)
            iTrackThumbHeight = iTrackThumbHeight_Max;
        pListData->m_rScrollbar_Vert_Thumb = pListData->m_rScrollbar_Vert;
        iTrackThumbPos = (int)( (  ((float)pListData->m_iFirstVisibleItem / (float)(pListData->m_iNumItems - iListRectHeight_Lines)) * (float)(iTrackHeight-iTrackThumbHeight)));
        pListData->m_rScrollbar_Vert_Thumb.top = iTrackThumbPos + pListData->m_rScrollbar_Vert.top + glb_pSkin->mpl_pVScrollBar_Up->m_iStateHeight;
        pListData->m_rScrollbar_Vert_Thumb.bottom = pListData->m_rScrollbar_Vert_Thumb.top + iTrackThumbHeight;

        InvalidateRect(pListData->m_hWnd, &pListData->m_rScrollbar_Horiz, FALSE);
    }
}
//
//
//
void CLV_BeginBatch(CP_HLISTVIEW _hListData)
{
    CIs_ListViewData* pListData = (CIs_ListViewData*)_hListData;
    CP_CHECKOBJECT(pListData);

    pListData->m_bInBatch = TRUE;
    pListData->m_iBatchNesting ++;
}
//
//
//
void CLV_EndBatch(CP_HLISTVIEW _hListData)
{
    CIs_ListViewData* pListData = (CIs_ListViewData*)_hListData;
    CP_CHECKOBJECT(pListData);

    pListData->m_iBatchNesting--;
    if(pListData->m_iBatchNesting == 0)
    {
        pListData->m_bInBatch = FALSE;
        CLV_InvalidateWindow(pListData);
        CLV_UpdateScrollBars(pListData);
    }
}
//
//
//
void CLV_Scroll_Horiz(CIs_ListViewData* pListData, const int iPixels)
{
    const int iListRectWidth = pListData->m_rList.right-pListData->m_rList.left;
    int iNewXOrigin;

    iNewXOrigin = pListData->m_iXOrigin + iPixels;

    // Ensure scoll is in range
    if(iNewXOrigin < 0)
        iNewXOrigin = 0;
    if( (iNewXOrigin + iListRectWidth) > pListData->m_iXScrollExtent)
        iNewXOrigin = pListData->m_iXScrollExtent - iListRectWidth;

    // Update only if we have changed the origin
    if(iNewXOrigin != pListData->m_iXOrigin)
    {
        pListData->m_iXOrigin = iNewXOrigin;

        // Update display
        CLV_UpdateScrollBars(pListData);
        CLV_InvalidateWindow(pListData);
    }
}
//
//
//
void CLV_Scroll_Vert(CIs_ListViewData* pListData, const int iLines)
{
    const int iListRectHeight_Lines = CLV_GetListRect_Lines(pListData);
    int iNewFirstVisibleItem;

    iNewFirstVisibleItem = pListData->m_iFirstVisibleItem + iLines;

    // Ensure scoll is in range
    if(iNewFirstVisibleItem < 0)
        iNewFirstVisibleItem = 0;
    if( (iNewFirstVisibleItem + iListRectHeight_Lines) > pListData->m_iNumItems)
        iNewFirstVisibleItem = pListData->m_iNumItems - iListRectHeight_Lines;

    // Update only if we have changed the first visible item
    if(iNewFirstVisibleItem != pListData->m_iFirstVisibleItem)
    {
        pListData->m_iFirstVisibleItem = iNewFirstVisibleItem;
        CLV_UpdateScrollBars(pListData);
        CLV_InvalidateWindow(pListData);
    }
}
//
//
//
void CLV_UpdateWindowDims(CIs_ListViewData* pListData, const int iCX, const int iCY)
{
    // Work out window parts
    pListData->m_rClient.top = 0;
    pListData->m_rClient.left = 0;
    pListData->m_rClient.right = iCX;
    pListData->m_rClient.bottom = iCY;

    pListData->m_rHeader.top = 0;
    pListData->m_rHeader.left = 0;
    pListData->m_rHeader.right = iCX;
    pListData->m_rHeader.bottom = pListData->m_iItemHeight;

    pListData->m_rList.top = pListData->m_rHeader.bottom;
    pListData->m_rList.left = 0;
    pListData->m_rList.right = iCX;
    pListData->m_rList.bottom = iCY;

    CLV_UpdateScrollBars(pListData);

    pListData->m_iNumItemsOnPage = (int)floor( (float)(pListData->m_rList.bottom-pListData->m_rList.top) / (float)pListData->m_iItemHeight);
}
//
//
//
void CLV_DrawBackgroundRect(CIs_ListViewData* pListData, CPs_DrawContext* pDC, const RECT* _prTarget)
{
    // Call the parent and get it to draw into this rect
    RECT rDraw;
    POINT ptParentOffset;
    CPs_DrawContext drawcontext;
    HRGN rgnClip;

    // Skip this draw if there is no handler registered
    if(!pListData->m_hndlr_DrawBackgroundRect)
        return;

    // 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;
    }

    // Get rect and clip relative to the parent's origin
    IntersectRect(&rDraw, _prTarget, &pDC->m_rClip);

    // Correct our draw context to bring it into our parent's domain
    ptParentOffset.x = 0;
    ptParentOffset.y = 0;
    ClientToScreen(pListData->m_hWnd, &ptParentOffset);
    ScreenToClient(GetParent(pListData->m_hWnd), &ptParentOffset);
    drawcontext = *pDC;
    drawcontext.m_ptOffset.x -= ptParentOffset.x;
    drawcontext.m_ptOffset.y -= ptParentOffset.y;
    drawcontext.m_rClip = rDraw;
    OffsetRect(&drawcontext.m_rClip, ptParentOffset.x, ptParentOffset.y);

    // Setup a GDI clip region
    rgnClip = CreateRectRgn(rDraw.left + pDC->m_ptOffset.x, rDraw.top + pDC->m_ptOffset.y,
                            rDraw.right + pDC->m_ptOffset.x, rDraw.bottom + pDC->m_ptOffset.y);
    SelectClipRgn(drawcontext.m_dcDraw, rgnClip);
    pListData->m_hndlr_DrawBackgroundRect(&drawcontext);
    SelectClipRgn(drawcontext.m_dcDraw, NULL);
}
//
//
//
void CLV_Handle_WM_PAINT(CIs_ListViewData* pListData)
{
    RECT rClient;
    PAINTSTRUCT ps;
    HDC dcPaint;
    HBITMAP hbmSurface, hbmSurface_Old;
    HFONT hfOld;
    CPs_DrawContext drawcontext;
    BOOL bAvoidFlicker;

    // Do some debug checking
    CP_ASSERT(pListData->m_iFocusItem == CPC_INVALIDITEM || (pListData->m_iFocusItem >= 0 && pListData->m_iFocusItem < pListData->m_iNumItems));

    // Prepare for draw
    dcPaint = BeginPaint(pListData->m_hWnd, &ps);
    rClient = pListData->m_rClient;
    GetClipBox(dcPaint, &drawcontext.m_rClip);

    // Null clip rgn?
    if(drawcontext.m_rClip.right == drawcontext.m_rClip.left
            || drawcontext.m_rClip.top == drawcontext.m_rClip.bottom)
    {
        EndPaint(pListData->m_hWnd, &ps);
        return;
    }

    bAvoidFlicker = TRUE;
    if(bAvoidFlicker == TRUE)
    {
        hbmSurface = CreateCompatibleBitmap(dcPaint, drawcontext.m_rClip.right-drawcontext.m_rClip.left, drawcontext.m_rClip.bottom-drawcontext.m_rClip.top);
        CP_ASSERT(hbmSurface);
        drawcontext.m_dcDraw = CreateCompatibleDC(dcPaint);
        CP_ASSERT(drawcontext.m_dcDraw);
        hbmSurface_Old = (HBITMAP)SelectObject(drawcontext.m_dcDraw, hbmSurface);

        drawcontext.m_ptOffset.x = -drawcontext.m_rClip.left;
        drawcontext.m_ptOffset.y = -drawcontext.m_rClip.top;
    }
    else
    {
        hbmSurface = NULL;
        drawcontext.m_dcDraw = dcPaint;
        drawcontext.m_ptOffset.x = 0;
        drawcontext.m_ptOffset.y = 0;
        hbmSurface_Old = NULL;
    }

    // Draw header
    hfOld = (HFONT)SelectObject(drawcontext.m_dcDraw, glb_pSkin->mpl_hfFont);
    {
        int iCursorX;
        unsigned int _iColIDX;
        RECT rHeaderItem;

        // Draw header items
        iCursorX = -pListData->m_iXOrigin;
        SetTextColor(drawcontext.m_dcDraw, glb_pSkin->mpl_ListHeaderColour);
        SetBkMode(drawcontext.m_dcDraw, TRANSPARENT);
        for(_iColIDX = 0; _iColIDX < pListData->m_iNumColumns; _iColIDX++)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久影音资源网| 国产精品三级av在线播放| 亚洲国产毛片aaaaa无费看| 99精品久久久久久| 中文无字幕一区二区三区| 狠狠狠色丁香婷婷综合激情 | 欧美日本精品一区二区三区| 亚洲精品第1页| 色噜噜久久综合| 亚洲精品国产无天堂网2021| 97se亚洲国产综合自在线不卡| 日本一区二区久久| 懂色av一区二区夜夜嗨| 国产欧美精品日韩区二区麻豆天美| 欧美美女直播网站| 亚洲五码中文字幕| 欧美视频一区二区在线观看| 亚洲一区二区三区激情| 日本黄色一区二区| 亚洲电影中文字幕在线观看| 欧美视频一区二区| 天天综合色天天综合| 777午夜精品免费视频| 日韩主播视频在线| 日韩一区二区三区在线视频| 另类人妖一区二区av| 欧美va在线播放| 国产精品主播直播| 国产精品美女久久久久aⅴ国产馆| 北条麻妃国产九九精品视频| 欧美日韩在线观看一区二区| 国产.欧美.日韩| 日韩一区欧美二区| 国产日韩视频一区二区三区| 久久久高清一区二区三区| 日韩女优av电影在线观看| 91精选在线观看| 中文字幕欧美一| 91论坛在线播放| 亚洲精品欧美综合四区| 精品污污网站免费看| 亚洲h精品动漫在线观看| 日韩一区二区视频| 国产成人日日夜夜| 综合在线观看色| 欧美三区在线观看| 亚洲国产精品久久久男人的天堂| 亚洲一区二区三区四区在线| 国产亚洲精品久| 国产91精品久久久久久久网曝门| 国产精品嫩草久久久久| 91久久精品一区二区| 日日夜夜免费精品视频| 26uuu国产电影一区二区| 成人av免费网站| 午夜私人影院久久久久| 久久麻豆一区二区| 日本精品视频一区二区| 老汉av免费一区二区三区| 国产精品每日更新| 欧美日韩国产乱码电影| 国产美女娇喘av呻吟久久| 欧美一级黄色录像| 欧美日韩高清在线播放| 精品亚洲欧美一区| 亚洲欧美日韩成人高清在线一区| 337p亚洲精品色噜噜噜| 国产宾馆实践打屁股91| 亚洲在线一区二区三区| 欧美日韩一区二区在线观看视频| 884aa四虎影成人精品一区| 久久99国产精品免费网站| 亚洲最快最全在线视频| 欧美经典一区二区三区| 日韩欧美综合一区| 欧美三级视频在线| 色综合天天综合网天天狠天天| 国产激情视频一区二区在线观看| 蜜桃精品视频在线| 亚洲成av人片观看| 有码一区二区三区| 中文字幕亚洲不卡| 中文字幕欧美三区| 久久精品欧美日韩| 精品免费国产一区二区三区四区| 欧美日韩激情一区二区| 色综合色综合色综合色综合色综合| 国产精品88888| 麻豆国产欧美日韩综合精品二区| 亚洲成人免费在线| 亚洲精品国产视频| 国产精品久久久久久久久果冻传媒 | 欧美xxxxxxxx| 欧美一二三四在线| 91精品国产一区二区三区| 欧美日韩在线综合| 91成人国产精品| 91天堂素人约啪| 99久久精品国产麻豆演员表| 成人性视频免费网站| 国产成人在线免费观看| 国产精品自拍三区| 国产激情一区二区三区| 国产精品1区2区| 国产精品亚洲成人| 国产98色在线|日韩| 国产成人免费网站| 国产剧情一区二区| 国产成人自拍高清视频在线免费播放| 国产一区二区剧情av在线| 国产永久精品大片wwwapp| 国产精品一区二区三区99| 国产黄色精品视频| 成人精品在线视频观看| 波多野结衣欧美| 91在线精品秘密一区二区| 93久久精品日日躁夜夜躁欧美| 91一区二区三区在线播放| 91啪亚洲精品| 91九色02白丝porn| 欧美日韩在线一区二区| 欧美精品一卡两卡| 欧美巨大另类极品videosbest| 成人h动漫精品| 99亚偷拍自图区亚洲| av一二三不卡影片| av成人动漫在线观看| 国产91综合一区在线观看| 国产精品18久久久| 国产福利视频一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 在线影院国内精品| 日本精品一区二区三区四区的功能| 色婷婷国产精品| 91视频你懂的| 欧美色综合久久| 欧美日韩视频专区在线播放| 欧美日韩久久久久久| 在线电影一区二区三区| 亚洲精品免费看| 欧美主播一区二区三区美女| 日韩激情视频在线观看| 精品国产污污免费网站入口| 国产乱人伦偷精品视频免下载| 国产精品三级电影| 91精品视频网| 国产欧美一区二区精品性色超碰| 国产亚洲精品aa| 午夜精品成人在线| 成人国产免费视频| 国产成人在线视频网站| 精品影视av免费| 亚洲日本韩国一区| 日韩精品中文字幕在线不卡尤物| 丁香天五香天堂综合| 日韩成人精品在线观看| 久久精品亚洲精品国产欧美kt∨| 91精品国产综合久久久久| 久久精品亚洲麻豆av一区二区| 欧美在线观看禁18| 国产91精品入口| 91成人免费在线| 日韩美女一区二区三区四区| 久久亚洲一级片| 中文字幕在线播放不卡一区| 一区二区三区日韩欧美精品| 美女视频黄 久久| 91亚洲精品一区二区乱码| 欧美日韩国产美| 久久影院午夜片一区| 亚洲四区在线观看| 亚洲一区免费在线观看| 国产美女视频一区| 色婷婷av一区二区三区之一色屋| 538在线一区二区精品国产| 国产午夜亚洲精品不卡| 亚洲影院免费观看| 九九国产精品视频| 色综合久久久久| 日韩欧美区一区二| 国产精品久久久久久久蜜臀| 日本不卡一区二区| 成人av资源网站| 欧美疯狂做受xxxx富婆| 国产欧美一区二区精品性色超碰| 亚洲国产视频网站| 国产精品综合网| 在线观看一区二区视频| 久久综合丝袜日本网| 国产精品护士白丝一区av| 久草热8精品视频在线观看| 99久久精品一区二区| 日韩视频中午一区| 中文字幕字幕中文在线中不卡视频| 日韩精品成人一区二区在线| 成人av电影在线网| 日韩一二三区视频| 亚洲天堂2016| 久久99精品国产.久久久久| 欧美日韩一级大片网址|