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

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

?? gridcellbase.cpp

?? 以BREW為開發平臺,以C為開發語言的BREW中demo實現的程序,是自己做的作業比較簡單
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// GridCellBase.cpp : implementation file
//
// MFC Grid Control - Main grid cell base class
//
// Provides the implementation for the base cell type of the
// grid control. No data is stored (except for state) but default
// implementations of drawing, printingetc provided. MUST be derived
// from to be used.
//
// Written by Chris Maunder <cmaunder@mail.com>
// Copyright (c) 1998-2002. All Rights Reserved.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is 
// not sold for profit without the authors written consent, and 
// providing that this notice and the authors name and all copyright 
// notices remains intact. 
//
// An email letting me know how you are using it would be nice as well. 
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability for any damage/loss of business that
// this product may cause.
//
// For use with CGridCtrl v2.22+
//
// History:
// Ken Bertelson - 12 Apr 2000 - Split CGridCell into CGridCell and CGridCellBase
// C Maunder     - 19 May 2000 - Fixed sort arrow drawing (Ivan Ilinov)
// C Maunder     - 29 Aug 2000 - operator= checks for NULL font before setting (Martin Richter)
// C Maunder     - 15 Oct 2000 - GetTextExtent fixed (Martin Richter)
// C Maunder     -  1 Jan 2001 - Added ValidateEdit
//
// NOTES: Each grid cell should take care of it's own drawing, though the Draw()
//        method takes an "erase background" paramter that is called if the grid
//        decides to draw the entire grid background in on hit. Certain ambient
//        properties such as the default font to use, and hints on how to draw
//        fixed cells should be fetched from the parent grid. The grid trusts the
//        cells will behave in a certain way, and the cells trust the grid will
//        supply accurate information.
//        
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GridCtrl.h"
#include "GridCellBase.h"

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

IMPLEMENT_DYNAMIC(CGridCellBase, CObject)

/////////////////////////////////////////////////////////////////////////////
// GridCellBase

CGridCellBase::CGridCellBase()
{
    Reset();
}

CGridCellBase::~CGridCellBase()
{
}

/////////////////////////////////////////////////////////////////////////////
// GridCellBase Operations

void CGridCellBase::Reset()
{
    m_nState  = 0;
}

void CGridCellBase::operator=(const CGridCellBase& cell)
{
	if (this == &cell) return;

    SetGrid(cell.GetGrid());    // do first in case of dependencies

    SetText(cell.GetText());
    SetImage(cell.GetImage());
    SetData(cell.GetData());
    SetState(cell.GetState());
    SetFormat(cell.GetFormat());
    SetTextClr(cell.GetTextClr());
    SetBackClr(cell.GetBackClr());
    SetFont(cell.IsDefaultFont()? NULL : cell.GetFont());
    SetMargin(cell.GetMargin());
}

/////////////////////////////////////////////////////////////////////////////
// CGridCellBase Attributes

// Returns a pointer to a cell that holds default values for this particular type of cell
CGridCellBase* CGridCellBase::GetDefaultCell() const
{
    if (GetGrid())
        return GetGrid()->GetDefaultCell(IsFixedRow(), IsFixedCol());
    return NULL;
}


/////////////////////////////////////////////////////////////////////////////
// CGridCellBase Operations

// EFW - Various changes to make it draw cells better when using alternate
// color schemes.  Also removed printing references as that's now done
// by PrintCell() and fixed the sort marker so that it doesn't draw out
// of bounds.
BOOL CGridCellBase::Draw(CDC* pDC, int nRow, int nCol, CRect rect,  BOOL bEraseBkgnd /*=TRUE*/)
{
    // Note - all through this function we totally brutalise 'rect'. Do not
    // depend on it's value being that which was passed in.

    CGridCtrl* pGrid = GetGrid();
    ASSERT(pGrid);

    if (!pGrid || !pDC)
        return FALSE;

    if( rect.Width() <= 0 || rect.Height() <= 0)  // prevents imagelist item from drawing even
        return FALSE;                             //  though cell is hidden

    //TRACE3("Drawing %scell %d, %d\n", IsFixed()? _T("Fixed ") : _T(""), nRow, nCol);

    int nSavedDC = pDC->SaveDC();
    pDC->SetBkMode(TRANSPARENT);

    // Get the default cell implementation for this kind of cell. We use it if this cell
    // has anything marked as "default"
    CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell();
    if (!pDefaultCell)
        return FALSE;

    // Set up text and background colours
    COLORREF TextClr, TextBkClr;

    TextClr = (GetTextClr() == CLR_DEFAULT)? pDefaultCell->GetTextClr() : GetTextClr();
    if (GetBackClr() == CLR_DEFAULT)
        TextBkClr = pDefaultCell->GetBackClr();
    else
    {
        bEraseBkgnd = TRUE;
        TextBkClr = GetBackClr();
    }

    // Draw cell background and highlighting (if necessary)
    if ( IsFocused() || IsDropHighlighted() )
    {
        // Always draw even in list mode so that we can tell where the
        // cursor is at.  Use the highlight colors though.
        if(GetState() & GVIS_SELECTED)
        {
            TextBkClr = ::GetSysColor(COLOR_HIGHLIGHT);
            TextClr = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
            bEraseBkgnd = TRUE;
        }

        rect.right++; rect.bottom++;    // FillRect doesn't draw RHS or bottom
        if (bEraseBkgnd)
        {
            TRY 
            {
                CBrush brush(TextBkClr);
                pDC->FillRect(rect, &brush);
            } 
            CATCH(CResourceException, e)
            {
                //e->ReportError();
            }
            END_CATCH
        }

        // Don't adjust frame rect if no grid lines so that the
        // whole cell is enclosed.
        if(pGrid->GetGridLines() != GVL_NONE)
        {
            rect.right--;
            rect.bottom--;
        }

        if (pGrid->GetFrameFocusCell())
        {
                // Use same color as text to outline the cell so that it shows
                // up if the background is black.
            TRY 
            {
                CBrush brush(TextClr);
                pDC->FrameRect(rect, &brush);
            }
            CATCH(CResourceException, e)
            {
                //e->ReportError();
            }
            END_CATCH
        }
        pDC->SetTextColor(TextClr);

        // Adjust rect after frame draw if no grid lines
        if(pGrid->GetGridLines() == GVL_NONE)
        {
            rect.right--;
            rect.bottom--;
        }

		rect.DeflateRect(0,1,1,1); 
    }
    else if ((GetState() & GVIS_SELECTED))
    {
        rect.right++; rect.bottom++;    // FillRect doesn't draw RHS or bottom
        pDC->FillSolidRect(rect, ::GetSysColor(COLOR_HIGHLIGHT));
        rect.right--; rect.bottom--;
        pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
    }
    else
    {
        if (bEraseBkgnd)
        {
            rect.right++; rect.bottom++;    // FillRect doesn't draw RHS or bottom
            CBrush brush(TextBkClr);
            pDC->FillRect(rect, &brush);
            rect.right--; rect.bottom--;
        }
        pDC->SetTextColor(TextClr);
    }

    // Draw lines only when wanted
    if (IsFixed() && pGrid->GetGridLines() != GVL_NONE)
    {
        CCellID FocusCell = pGrid->GetFocusCell();

        // As above, always show current location even in list mode so
        // that we know where the cursor is at.
        BOOL bHiliteFixed = pGrid->GetTrackFocusCell() && pGrid->IsValid(FocusCell) &&
                            (FocusCell.row == nRow || FocusCell.col == nCol);

        // If this fixed cell is on the same row/col as the focus cell,
        // highlight it.
        if (bHiliteFixed)
        {
            rect.right++; rect.bottom++;
            pDC->DrawEdge(rect, BDR_SUNKENINNER /*EDGE_RAISED*/, BF_RECT);
            rect.DeflateRect(1,1);
        }
        else
        {
            CPen lightpen(PS_SOLID, 1,  ::GetSysColor(COLOR_3DHIGHLIGHT)),
                darkpen(PS_SOLID,  1, ::GetSysColor(COLOR_3DDKSHADOW)),
                *pOldPen = pDC->GetCurrentPen();

            pDC->SelectObject(&lightpen);
            pDC->MoveTo(rect.right, rect.top);
            pDC->LineTo(rect.left, rect.top);
            pDC->LineTo(rect.left, rect.bottom);

            pDC->SelectObject(&darkpen);
            pDC->MoveTo(rect.right, rect.top);
            pDC->LineTo(rect.right, rect.bottom);
            pDC->LineTo(rect.left, rect.bottom);

            pDC->SelectObject(pOldPen);
            rect.DeflateRect(1,1);
        }
    }

    // Draw Text and image
#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
    if (!pDC->m_bPrinting)
#endif
    {
        CFont *pFont = GetFontObject();
		ASSERT(pFont);
        if (pFont)
            pDC->SelectObject(pFont);
    }

    rect.DeflateRect(GetMargin(), 0);

    if (pGrid->GetImageList() && GetImage() >= 0)
    {
        IMAGEINFO Info;
        if (pGrid->GetImageList()->GetImageInfo(GetImage(), &Info))
        {
            //  would like to use a clipping region but seems to have issue
            //  working with CMemDC directly.  Instead, don't display image
            //  if any part of it cut-off
            //
            // CRgn rgn;
            // rgn.CreateRectRgnIndirect(rect);
            // pDC->SelectClipRgn(&rgn);
            // rgn.DeleteObject();

            int nImageWidth = Info.rcImage.right-Info.rcImage.left+1;
            int nImageHeight = Info.rcImage.bottom-Info.rcImage.top+1;

            if( nImageWidth + rect.left <= rect.right + (int)(2*GetMargin())
                && nImageHeight + rect.top <= rect.bottom + (int)(2*GetMargin())  )
            {
                pGrid->GetImageList()->Draw(pDC, GetImage(), rect.TopLeft(), ILD_NORMAL);
            }

            //rect.left += nImageWidth+GetMargin();
        }
    }

    // Draw sort arrow
    if (pGrid->GetSortColumn() == nCol && nRow == 0)
    {
        CSize size = pDC->GetTextExtent(_T("M"));
        int nOffset = 2;

        // Base the size of the triangle on the smaller of the column
        // height or text height with a slight offset top and bottom.
        // Otherwise, it can get drawn outside the bounds of the cell.
        size.cy -= (nOffset * 2);

        if (size.cy >= rect.Height())
            size.cy = rect.Height() - (nOffset * 2);

        size.cx = size.cy;      // Make the dimensions square

        // Kludge for vertical text
        BOOL bVertical = (GetFont()->lfEscapement == 900);

        // Only draw if it'll fit!
        if (size.cx + rect.left < rect.right + (int)(2*GetMargin()))
        {
            int nTriangleBase = rect.bottom - nOffset - size.cy;    // Triangle bottom right
            //int nTriangleBase = (rect.top + rect.bottom - size.cy)/2; // Triangle middle right
            //int nTriangleBase = rect.top + nOffset;                 // Triangle top right

            //int nTriangleLeft = rect.right - size.cx;                 // Triangle RHS
            //int nTriangleLeft = (rect.right + rect.left - size.cx)/2; // Triangle middle
            //int nTriangleLeft = rect.left;                            // Triangle LHS

            int nTriangleLeft;
            if (bVertical)
                nTriangleLeft = (rect.right + rect.left - size.cx)/2; // Triangle middle
            else
                nTriangleLeft = rect.right - size.cx;               // Triangle RHS

            CPen penShadow(PS_SOLID, 0, ::GetSysColor(COLOR_3DSHADOW));
            CPen penLight(PS_SOLID, 0, ::GetSysColor(COLOR_3DHILIGHT));
            if (pGrid->GetSortAscending())
            {
                // Draw triangle pointing upwards
                CPen *pOldPen = (CPen*) pDC->SelectObject(&penLight);
                pDC->MoveTo( nTriangleLeft + 1, nTriangleBase + size.cy + 1);
                pDC->LineTo( nTriangleLeft + (size.cx / 2) + 1, nTriangleBase + 1 );
                pDC->LineTo( nTriangleLeft + size.cx + 1, nTriangleBase + size.cy + 1);
                pDC->LineTo( nTriangleLeft + 1, nTriangleBase + size.cy + 1);

                pDC->SelectObject(&penShadow);
                pDC->MoveTo( nTriangleLeft, nTriangleBase + size.cy );
                pDC->LineTo( nTriangleLeft + (size.cx / 2), nTriangleBase );
                pDC->LineTo( nTriangleLeft + size.cx, nTriangleBase + size.cy );
                pDC->LineTo( nTriangleLeft, nTriangleBase + size.cy );
                pDC->SelectObject(pOldPen);
            }
            else
            {
                // Draw triangle pointing downwards
                CPen *pOldPen = (CPen*) pDC->SelectObject(&penLight);
                pDC->MoveTo( nTriangleLeft + 1, nTriangleBase + 1 );
                pDC->LineTo( nTriangleLeft + (size.cx / 2) + 1, nTriangleBase + size.cy + 1 );
                pDC->LineTo( nTriangleLeft + size.cx + 1, nTriangleBase + 1 );
                pDC->LineTo( nTriangleLeft + 1, nTriangleBase + 1 );
    
                pDC->SelectObject(&penShadow);
                pDC->MoveTo( nTriangleLeft, nTriangleBase );
                pDC->LineTo( nTriangleLeft + (size.cx / 2), nTriangleBase + size.cy );
                pDC->LineTo( nTriangleLeft + size.cx, nTriangleBase );
                pDC->LineTo( nTriangleLeft, nTriangleBase );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久国产综合色|国产精品| 男女激情视频一区| 成人av在线一区二区三区| 欧美激情在线一区二区| 91欧美一区二区| 一区二区三区色| 在线不卡一区二区| 久久精品国产亚洲a| 国产丝袜在线精品| 97se亚洲国产综合在线| 无吗不卡中文字幕| 亚洲精品一区二区三区蜜桃下载| 国产成人综合视频| 一区二区三区不卡在线观看| 欧美一区二区在线视频| 国产永久精品大片wwwapp| 成人欧美一区二区三区小说| 欧美日韩国产色站一区二区三区| 捆绑变态av一区二区三区| 中国色在线观看另类| 欧美日韩一区在线| 国产精品中文字幕欧美| 亚洲国产欧美在线| 欧美精品一区二区三区高清aⅴ| 成人午夜短视频| 夜夜揉揉日日人人青青一国产精品 | 国产夫妻精品视频| 一区二区三区蜜桃网| 欧美本精品男人aⅴ天堂| av成人免费在线观看| 男男视频亚洲欧美| 亚洲欧美成人一区二区三区| 日韩一区二区精品在线观看| 成人视屏免费看| 免费高清视频精品| 亚洲欧美另类小说| 国产亚洲精品免费| 9191成人精品久久| 色先锋资源久久综合| 国产一区二区伦理片| 丝袜脚交一区二区| 中文字幕佐山爱一区二区免费| 欧美哺乳videos| 欧美特级限制片免费在线观看| 成熟亚洲日本毛茸茸凸凹| 免费亚洲电影在线| 亚洲一级二级在线| 国产精品视频线看| 精品久久久久香蕉网| 欧美日韩一区二区三区在线看| 国产精品91xxx| 蜜桃视频一区二区三区在线观看| 亚洲一区二区三区四区不卡| 中文字幕一区在线观看视频| 26uuu久久综合| 欧美一卡二卡在线| 欧美日韩国产在线观看| 色嗨嗨av一区二区三区| www.性欧美| 国产成人啪午夜精品网站男同| 久久99国产精品久久99| 免费看日韩a级影片| 亚洲午夜激情网页| 亚洲一区二区视频| 亚洲一区自拍偷拍| 一区二区免费视频| 亚洲精品国产成人久久av盗摄| 国产欧美精品一区aⅴ影院| 久久只精品国产| 久久亚洲一级片| 久久久亚洲高清| 久久精品欧美日韩| 国产亚洲人成网站| 国产色产综合产在线视频| 国产日韩av一区二区| 国产女同互慰高潮91漫画| 国产三级欧美三级| 国产欧美日本一区视频| 国产精品嫩草久久久久| 中文字幕欧美国产| 国产精品乱码妇女bbbb| 成人免费小视频| 亚洲人成小说网站色在线| 亚洲色欲色欲www| 亚洲另类中文字| 亚洲成人黄色小说| 蜜桃在线一区二区三区| 蜜桃精品在线观看| 国产制服丝袜一区| 岛国精品一区二区| 色菇凉天天综合网| 欧美日韩国产色站一区二区三区| 91精品国产综合久久福利软件 | 一区二区三区欧美激情| 一区二区三区 在线观看视频| 午夜精品影院在线观看| 日韩国产精品91| 国产一区二三区| av亚洲精华国产精华精华| 欧美视频中文字幕| 精品国产精品网麻豆系列| 久久午夜免费电影| 亚洲欧美另类在线| 免费观看在线色综合| 国产91露脸合集magnet| 91黄色免费看| 日韩欧美国产三级| 亚洲视频一区在线观看| 日韩电影在线免费观看| 国产91精品精华液一区二区三区| 91视频国产观看| 欧美成人女星排名| 亚洲欧美视频在线观看视频| 老司机午夜精品99久久| 92精品国产成人观看免费| 欧美一区三区四区| 日韩久久一区二区| 美女视频免费一区| 99精品国产91久久久久久| 在线综合亚洲欧美在线视频| 国产精品久久久久天堂| 美女一区二区在线观看| 94-欧美-setu| 久久久精品黄色| 午夜电影久久久| 99精品视频中文字幕| 久久婷婷国产综合精品青草| 伊人色综合久久天天| 国产盗摄一区二区| 欧美一区二区三区免费在线看 | 国产日韩欧美麻豆| 五月激情综合网| 色综合网色综合| 久久免费精品国产久精品久久久久| 一区二区三区日韩精品视频| 国产v综合v亚洲欧| 日韩欧美区一区二| 亚洲成av人在线观看| 91蝌蚪国产九色| 欧美国产日产图区| 精一区二区三区| 在线不卡的av| 亚洲va国产天堂va久久en| gogo大胆日本视频一区| 国产欧美日韩视频一区二区| 久久99精品国产麻豆不卡| 69p69国产精品| 一级特黄大欧美久久久| 91丨porny丨中文| 国产精品麻豆欧美日韩ww| 国产伦精品一区二区三区视频青涩 | www.亚洲在线| 国产精品三级久久久久三级| 国产毛片一区二区| 久久一区二区视频| 蜜臀av国产精品久久久久| 911精品国产一区二区在线| 亚洲国产精品久久久久婷婷884| 99久久精品久久久久久清纯| 国产精品久久久久婷婷| 成人av在线一区二区三区| 中文字幕欧美三区| 波多野结衣的一区二区三区| 中文字幕高清不卡| 成人永久免费视频| 国产精品欧美综合在线| 成人av资源在线| 综合激情成人伊人| 97久久人人超碰| 亚洲蜜桃精久久久久久久| 91亚洲精品一区二区乱码| 中文字幕亚洲精品在线观看 | 亚洲精品亚洲人成人网在线播放| 成人黄色小视频| 亚洲天堂2016| 色综合一区二区| 亚洲一区在线视频观看| 欧美另类一区二区三区| 免播放器亚洲一区| 久久久欧美精品sm网站| 国产99精品视频| 一区视频在线播放| 在线观看av一区二区| 日韩电影网1区2区| 欧美va亚洲va| 成人avav影音| 亚洲一线二线三线视频| 日韩欧美一区二区视频| 国产一区 二区| 国产精品国产三级国产专播品爱网 | 久久免费偷拍视频| 91丨porny丨户外露出| 性久久久久久久久久久久 | 精品少妇一区二区三区免费观看| 精品一区二区三区久久| 国产精品美日韩| 在线视频一区二区三区| 青青草原综合久久大伊人精品 | 色婷婷精品大在线视频 | 欧美变态tickling挠脚心|