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

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

?? gridctrl.cpp

?? 收錄《Visual C++ 編程技巧典型案例解析——圖形圖像處理與數(shù)據(jù)庫篇》 中43個源代碼。
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
        break;
        
    case SB_PAGELEFT:
        if (scrollPos > 0)
        {
            rect.left = GetFixedColumnWidth();
            int offset = -rect.Width();
            int pos = max(0, scrollPos + offset);
            SetScrollPos32(SB_HORZ, pos);
            rect.left = GetFixedColumnWidth();
            InvalidateRect(rect);
        }
        break;
        
    case SB_THUMBPOSITION:
    case SB_THUMBTRACK:
        {
            SetScrollPos32(SB_HORZ, GetScrollPos32(SB_HORZ, TRUE));
            CCellID idNewTopLeft = GetTopleftNonFixedCell();
            if (idNewTopLeft != idTopLeft)
            {
                rect.left = GetFixedColumnWidth();
                InvalidateRect(rect);
            }
        }
        break;
        
    case SB_LEFT:
        if (scrollPos > 0)
        {
            SetScrollPos32(SB_HORZ, 0);
            Invalidate();
        }
        break;
        
    case SB_RIGHT:
        if (scrollPos < m_nHScrollMax)
        {
            SetScrollPos32(SB_HORZ, m_nHScrollMax);
            Invalidate();
        }
        break;
        
        
    default: 
        break;
    }
}

// Handle vert scrollbar notifications
void CGridCtrl::OnVScroll(UINT nSBCode, UINT /*nPos*/, CScrollBar* /*pScrollBar*/)
{
    EndEditing();

#ifndef GRIDCONTROL_NO_TITLETIPS
    m_TitleTip.Hide();  // hide any titletips
#endif

    // Get the scroll position ourselves to ensure we get a 32 bit value
    int scrollPos = GetScrollPos32(SB_VERT);

    CCellID idTopLeft = GetTopleftNonFixedCell();

    CRect rect;
    GetClientRect(rect);

    switch (nSBCode)
    {
    case SB_LINEDOWN:
        if (scrollPos < m_nVScrollMax)
        {
            // may have contiguous hidden rows.  Blow by them
            while(  idTopLeft.row < (GetRowCount()-1)
                    && GetRowHeight( idTopLeft.row) < 1 )
            {
                idTopLeft.row++;
            }

            int yScroll = GetRowHeight(idTopLeft.row);
            SetScrollPos32(SB_VERT, scrollPos + yScroll);
            if (GetScrollPos32(SB_VERT) == scrollPos)
                break;          // didn't work

            rect.top = GetFixedRowHeight();
            //rect.top = GetFixedRowHeight() + yScroll;
            //ScrollWindow(0, -yScroll, rect);
            //rect.top = rect.bottom - yScroll;
            InvalidateRect(rect);
        }
        break;
        
    case SB_LINEUP:
        if (scrollPos > 0 && idTopLeft.row > GetFixedRowCount())
        {
            int iRowToUse = idTopLeft.row-1;
            // may have contiguous hidden rows.  Blow by them
            while(  iRowToUse > GetFixedRowCount()
                    && GetRowHeight( iRowToUse) < 1 )
            {
                iRowToUse--;
            }

            int yScroll = GetRowHeight( iRowToUse);
            SetScrollPos32(SB_VERT, max(0, scrollPos - yScroll));
            rect.top = GetFixedRowHeight();
            //ScrollWindow(0, yScroll, rect);
            //rect.bottom = rect.top + yScroll;
            InvalidateRect(rect);
        }
        break;
        
    case SB_PAGEDOWN:
        if (scrollPos < m_nVScrollMax)
        {
            rect.top = GetFixedRowHeight();
            scrollPos = min(m_nVScrollMax, scrollPos + rect.Height());
            SetScrollPos32(SB_VERT, scrollPos);
            rect.top = GetFixedRowHeight();
            InvalidateRect(rect);
        }
        break;
        
    case SB_PAGEUP:
        if (scrollPos > 0)
        {
            rect.top = GetFixedRowHeight();
            int offset = -rect.Height();
            int pos = max(0, scrollPos + offset);
            SetScrollPos32(SB_VERT, pos);
            rect.top = GetFixedRowHeight();
            InvalidateRect(rect);
        }
        break;
        
    case SB_THUMBPOSITION:
    case SB_THUMBTRACK:
        {
            SetScrollPos32(SB_VERT, GetScrollPos32(SB_VERT, TRUE));
            CCellID idNewTopLeft = GetTopleftNonFixedCell();
            if (idNewTopLeft != idTopLeft)
            {
                rect.top = GetFixedRowHeight();
                InvalidateRect(rect);
            }
        }
        break;
        
    case SB_TOP:
        if (scrollPos > 0)
        {
            SetScrollPos32(SB_VERT, 0);
            Invalidate();
        }
        break;
        
    case SB_BOTTOM:
        if (scrollPos < m_nVScrollMax)
        {
            SetScrollPos32(SB_VERT, m_nVScrollMax);
            Invalidate();
        }
        
    default: 
        break;
    }
}

/////////////////////////////////////////////////////////////////////////////
// CGridCtrl implementation functions

void CGridCtrl::OnDraw(CDC* pDC)
{
    if (!m_bAllowDraw)
        return;

    CRect clipRect;
    if (pDC->GetClipBox(&clipRect) == ERROR)
        return;

    EraseBkgnd(pDC);            // OnEraseBkgnd does nothing, so erase bkgnd here.
    // This necessary since we may be using a Memory DC.

    CRect rect;
    int row, col;
    CGridCellBase* pCell;


    int nFixedRowHeight = GetFixedRowHeight();
    int nFixedColWidth  = GetFixedColumnWidth();

    CCellID idTopLeft = GetTopleftNonFixedCell();
    int minVisibleRow = idTopLeft.row,
        minVisibleCol = idTopLeft.col;

    CRect VisRect;
    CCellRange VisCellRange = GetVisibleNonFixedCellRange(VisRect);
    int maxVisibleRow = VisCellRange.GetMaxRow(),
        maxVisibleCol = VisCellRange.GetMaxCol();

    // draw top-left cells 0..m_nFixedRows-1, 0..m_nFixedCols-1
    rect.bottom = -1;
    for (row = 0; row < m_nFixedRows; row++)
    {
        rect.top = rect.bottom+1;
        rect.bottom = rect.top + GetRowHeight(row)-1;
        rect.right = -1;
        for (col = 0; col < m_nFixedCols; col++)
        {
            rect.left = rect.right+1;
            rect.right = rect.left + GetColumnWidth(col)-1;

            pCell = GetCell(row, col);
            if (pCell)
                pCell->Draw(pDC, row, col, rect, FALSE);
        }
    }

    // draw fixed column cells:  m_nFixedRows..n, 0..m_nFixedCols-1
    rect.bottom = nFixedRowHeight-1;
    for (row = minVisibleRow; row <= maxVisibleRow; row++)
    {
        rect.top = rect.bottom+1;
        rect.bottom = rect.top + GetRowHeight(row)-1;

        // rect.bottom = bottom pixel of previous row
        if (rect.top > clipRect.bottom)
            break;                // Gone past cliprect
        if (rect.bottom < clipRect.top)
            continue;             // Reached cliprect yet?

        rect.right = -1;
        for (col = 0; col < m_nFixedCols; col++)
        {
            rect.left = rect.right+1;
            rect.right = rect.left + GetColumnWidth(col)-1;

            if (rect.left > clipRect.right)
                break;            // gone past cliprect
            if (rect.right < clipRect.left)
                continue;         // Reached cliprect yet?

            pCell = GetCell(row, col);
            if (pCell)
                pCell->Draw(pDC, row, col, rect, FALSE);
        }
    }

    // draw fixed row cells  0..m_nFixedRows, m_nFixedCols..n
    rect.bottom = -1;
    for (row = 0; row < m_nFixedRows; row++)
    {
        rect.top = rect.bottom+1;
        rect.bottom = rect.top + GetRowHeight(row)-1;

        // rect.bottom = bottom pixel of previous row
        if (rect.top > clipRect.bottom)
            break;                // Gone past cliprect
        if (rect.bottom < clipRect.top)
            continue;             // Reached cliprect yet?

        rect.right = nFixedColWidth-1;
        for (col = minVisibleCol; col <= maxVisibleCol; col++)
        {
            rect.left = rect.right+1;
            rect.right = rect.left + GetColumnWidth(col)-1;

            if (rect.left > clipRect.right)
                break;        // gone past cliprect
            if (rect.right < clipRect.left)
                continue;     // Reached cliprect yet?

            pCell = GetCell(row, col);
            if (pCell)
                pCell->Draw(pDC, row, col, rect, FALSE);
        }
    }

    // draw rest of non-fixed cells
    rect.bottom = nFixedRowHeight-1;
    for (row = minVisibleRow; row <= maxVisibleRow; row++)
    {
        rect.top = rect.bottom+1;
        rect.bottom = rect.top + GetRowHeight(row)-1;

        // rect.bottom = bottom pixel of previous row
        if (rect.top > clipRect.bottom)
            break;                // Gone past cliprect
        if (rect.bottom < clipRect.top)
            continue;             // Reached cliprect yet?

        rect.right = nFixedColWidth-1;
        for (col = minVisibleCol; col <= maxVisibleCol; col++)
        {
            rect.left = rect.right+1;
            rect.right = rect.left + GetColumnWidth(col)-1;

            if (rect.left > clipRect.right)
                break;        // gone past cliprect
            if (rect.right < clipRect.left)
                continue;     // Reached cliprect yet?

            pCell = GetCell(row, col);
            // TRACE(_T("Cell %d,%d type: %s\n"), row, col, pCell->GetRuntimeClass()->m_lpszClassName);
            if (pCell)
                pCell->Draw(pDC, row, col, rect, FALSE);
        }
    }


    CPen pen;
    TRY
    {
        pen.CreatePen(PS_SOLID, 0, m_crGridColour);
    }
    CATCH (CResourceException, e)
    {
        e->Delete();
        return;
    }
    END_CATCH
        pDC->SelectObject(&pen);

    // draw vertical lines (drawn at ends of cells)
    if (m_nGridLines == GVL_BOTH || m_nGridLines == GVL_VERT)
    {
        int x = nFixedColWidth;
        for (col = minVisibleCol; col <= maxVisibleCol; col++)
        {
            x += GetColumnWidth(col);
            pDC->MoveTo(x-1, nFixedRowHeight);
            pDC->LineTo(x-1, VisRect.bottom);
        }
    }

    // draw horizontal lines (drawn at bottom of each cell)
    if (m_nGridLines == GVL_BOTH || m_nGridLines == GVL_HORZ)
    {
        int y = nFixedRowHeight;
        for (row = minVisibleRow; row <= maxVisibleRow; row++)
        {
            y += GetRowHeight(row);
            pDC->MoveTo(nFixedColWidth, y-1);
            pDC->LineTo(VisRect.right,  y-1);
        }
    }

    pDC->SelectStockObject(NULL_PEN);

}

////////////////////////////////////////////////////////////////////////////////////////
// CGridCtrl Cell selection stuff

// Is a given cell designation valid (ie within the bounds of our number
// of columns/rows)?
BOOL CGridCtrl::IsValid(int nRow, int nCol) const
{
    return (nRow >= 0 && nRow < m_nRows && nCol >= 0 && nCol < m_nCols);
}

BOOL CGridCtrl::IsValid(const CCellID& cell) const
{
    return IsValid(cell.row, cell.col);
}

// Is a given cell range valid (ie within the bounds of our number
// of columns/rows)?
BOOL CGridCtrl::IsValid(const CCellRange& range) const
{
    return (range.GetMinRow() >= 0 && range.GetMinCol() >= 0 &&
        range.GetMaxRow() >= 0 && range.GetMaxCol() >= 0 &&
        range.GetMaxRow() < m_nRows && range.GetMaxCol() < m_nCols &&
        range.GetMinRow() <= range.GetMaxRow() && range.GetMinCol() <= range.GetMaxCol());
}

// Enables/Disables redraw for certain operations like columns auto-sizing etc,
// but not for user caused things such as selection changes.
void CGridCtrl::SetRedraw(BOOL bAllowDraw, BOOL bResetScrollBars /* = FALSE */)
{
//    TRACE(_T("%s: Setting redraw to %s\n"),
//             GetRuntimeClass()->m_lpszClassName, bAllowDraw? _T("TRUE") : _T("FALSE"));

    if (bAllowDraw && !m_bAllowDraw)
        Invalidate();

    m_bAllowDraw = bAllowDraw;
    if (bResetScrollBars)
        ResetScrollBars();
}

// Forces a redraw of a cell immediately (using a direct DC construction,
// or the supplied dc)
BOOL CGridCtrl::RedrawCell(const CCellID& cell, CDC* pDC /* = NULL */)
{
    return RedrawCell(cell.row, cell.col, pDC);
}

BOOL CGridCtrl::RedrawCell(int nRow, int nCol, CDC* pDC /* = NULL */)
{
    BOOL bResult = TRUE;
    BOOL bMustReleaseDC = FALSE;

    if (!m_bAllowDraw || !IsCellVisible(nRow, nCol))
        return FALSE;

    CRect rect;
    if (!GetCellRect(nRow, nCol, rect))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品免费在线观看| 99久久精品免费看| 国产精品资源在线| 91久久线看在观草草青青| 4438x亚洲最大成人网| 精品国产免费一区二区三区四区| 最新国产の精品合集bt伙计| 日本美女一区二区| 91黄色激情网站| 国产亚洲欧美激情| 麻豆成人免费电影| 欧美揉bbbbb揉bbbbb| 国产精品久久久久aaaa| 激情五月婷婷综合网| 欧美性高清videossexo| 成人欧美一区二区三区视频网页| 久久99精品国产麻豆不卡| 色av成人天堂桃色av| 国产精品伦一区| 国产精品18久久久久久vr| 制服丝袜亚洲色图| 亚洲成人一区在线| 在线一区二区三区| 亚洲欧美另类久久久精品| 成人午夜视频在线| 精品国产一区二区三区av性色| 亚洲第一主播视频| 在线视频国产一区| 亚洲免费av高清| 色综合天天综合网天天看片| 日本一区二区不卡视频| 国产很黄免费观看久久| 国产性天天综合网| 国产精品亚洲人在线观看| 精品久久久三级丝袜| 蜜臀av性久久久久蜜臀aⅴ | 韩日精品视频一区| 日韩亚洲国产中文字幕欧美| 日产国产欧美视频一区精品| 69精品人人人人| 蜜臀av国产精品久久久久| 日韩一区二区高清| 久久国产精品72免费观看| 欧美mv和日韩mv国产网站| 精品在线视频一区| 国产无人区一区二区三区| 成人午夜视频在线观看| 一区二区高清视频在线观看| 99re这里都是精品| 一区二区在线观看视频 | 一区二区三区小说| 欧美性色综合网| 青青草原综合久久大伊人精品| 欧美一区二区在线免费观看| 国产综合久久久久影院| 中文字幕一区二区三区四区| 色999日韩国产欧美一区二区| 午夜av电影一区| 精品国内二区三区| 99久久精品免费看| 日韩成人免费电影| 国产欧美日韩综合| 欧美色倩网站大全免费| 久久综合综合久久综合| 亚洲欧洲日韩av| 欧美日韩一二区| 久久99久久久久久久久久久| 国产精品视频一区二区三区不卡| 91传媒视频在线播放| 蜜臀a∨国产成人精品| 亚洲欧洲av在线| 日韩亚洲欧美成人一区| av电影在线观看一区| 日本成人在线电影网| 国产精品免费av| 91精品国产91久久综合桃花| av影院午夜一区| 久久99精品国产.久久久久| 亚洲激情校园春色| 2023国产精品自拍| 欧美色窝79yyyycom| 国产白丝网站精品污在线入口| 亚洲电影你懂得| 国产精品国产三级国产有无不卡 | 国产精品视频看| 欧美中文字幕一二三区视频| 美女精品自拍一二三四| 亚洲美女视频在线| 国产欧美一区二区精品性色| 91.成人天堂一区| 日本韩国一区二区| 国产成人亚洲综合色影视| 日本亚洲免费观看| 亚洲精品一卡二卡| 欧美激情一区二区在线| 日韩三区在线观看| 欧美日韩国产bt| 色综合视频一区二区三区高清| 国产精品一级黄| 国产美女视频91| 精品一区二区三区在线播放 | 亚洲日本电影在线| 国产丝袜在线精品| 日韩欧美一级二级三级| 欧美日韩国产一区| 欧美图片一区二区三区| 97精品国产97久久久久久久久久久久| 国产在线不卡视频| 精品无人码麻豆乱码1区2区 | 午夜电影网亚洲视频| 一区二区三区日韩欧美| **欧美大码日韩| 一区在线播放视频| 国产精品久久久久久一区二区三区| 欧美精品一区二区三| 欧美mv日韩mv亚洲| 26uuu国产电影一区二区| 精品国产欧美一区二区| 精品国产一区二区三区av性色 | 国产精品免费网站在线观看| 久久精品免费在线观看| 国产亚洲污的网站| 国产精品家庭影院| 亚洲激情图片一区| 亚洲伊人色欲综合网| 亚洲成人av在线电影| 天堂va蜜桃一区二区三区| 日韩 欧美一区二区三区| 青青草国产成人av片免费| 日本不卡视频在线观看| 久99久精品视频免费观看| 国产精品一区2区| 成人激情免费网站| 日本电影亚洲天堂一区| 3d成人动漫网站| 久久综合九色综合97婷婷女人| 久久精品夜色噜噜亚洲aⅴ| 中文字幕免费不卡| 亚洲精品久久久久久国产精华液| 亚洲自拍偷拍九九九| 日韩精品乱码免费| 国产高清成人在线| 日本韩国精品在线| 精品国产一区二区在线观看| 国产精品久久久久久久久久免费看| 亚洲人成在线观看一区二区| 首页国产丝袜综合| 国产精品资源网| 欧美在线你懂的| 久久这里只精品最新地址| 亚洲女同ⅹxx女同tv| 日本欧美一区二区在线观看| 成人美女在线观看| 欧美亚洲综合久久| 国产日韩精品久久久| 亚洲va韩国va欧美va精品| 九九久久精品视频| 在线看不卡av| 2023国产精品自拍| 亚洲第一精品在线| 国产成人免费xxxxxxxx| 欧美日本韩国一区| 国产精品久久久久一区| 蜜臀久久久99精品久久久久久| 99国产欧美另类久久久精品 | 美女视频黄a大片欧美| 91在线码无精品| 亚洲精品一区二区三区香蕉| 亚洲综合色视频| 国产91精品一区二区麻豆网站| 3d动漫精品啪啪1区2区免费| **性色生活片久久毛片| 国产麻豆欧美日韩一区| 欧美欧美午夜aⅴ在线观看| 国产精品久久三区| 国产乱码字幕精品高清av| 欧美日韩国产精选| 最新欧美精品一区二区三区| 国产一区视频网站| 欧美午夜在线观看| 国产精品久久久久9999吃药| 国产一区 二区| 日韩一区二区三区av| 日韩一区精品字幕| 91久久人澡人人添人人爽欧美| 国产精品系列在线| 国产精品资源网| 久久久久久久国产精品影院| 毛片av一区二区| 欧美一区二区在线免费观看| 无码av中文一区二区三区桃花岛| 色综合亚洲欧洲| 亚洲激情男女视频| 91免费精品国自产拍在线不卡| 国产精品你懂的| jlzzjlzz亚洲日本少妇| 国产精品网站导航| 成人h动漫精品一区二区 | 91精选在线观看| 婷婷成人激情在线网|