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

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

?? snakeview.cpp

?? 嘿嘿
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// SnakeView.cpp : implementation of the CSnakeView class
//

#include "stdafx.h"
#include "Snake.h"

#include "MainFrm.h"
#include "SnakeDoc.h"
#include "SnakeView.h"

#include "ScoreBoardDlg.h"
#include "ChangeSpeedDlg.h"

#include <mmsystem.h>

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

#define IDT_TIMER 1000
/////////////////////////////////////////////////////////////////////////////
// CSnakeView

IMPLEMENT_DYNCREATE(CSnakeView, CView)

BEGIN_MESSAGE_MAP(CSnakeView, CView)
    //{{AFX_MSG_MAP(CSnakeView)
    ON_WM_SIZE()
    ON_WM_PAINT()
	ON_WM_CONTEXTMENU()
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	ON_WM_KEYDOWN()
	ON_WM_CLOSE()
	ON_COMMAND(IDM_CHANGELEVEL, OnChangeLevel)
	//}}AFX_MSG_MAP
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSnakeView construction/destruction

CSnakeView::CSnakeView()
    : m_pDCMemDB(0),
      m_pBmpDB(0),
      m_pActionHandler(0),
      m_numCellsX(10),
      m_numCellsY(10),
      m_timerID(0)
{
}

CSnakeView::~CSnakeView()
{
    if (m_pDCMemDB)
        delete m_pDCMemDB;
    if (m_pBmpDB)
        delete m_pBmpDB;
    if (m_pActionHandler)
        delete m_pActionHandler;
}

BOOL CSnakeView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSnakeView drawing

void CSnakeView::OnDraw(CDC* pDC)
{
    CSnakeDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    m_pDC = pDC;

    CRect rect;
    GetClientRect(&rect);

//  draw boundary

    CBitmap bmpBrick;
    bmpBrick.LoadBitmap(IDB_BRICK);
    CBrush brBrick;
    brBrick.CreatePatternBrush(&bmpBrick);
    CBrush *pBrOld = pDC->SelectObject(&brBrick);
    pDC->PatBlt(rect.left, rect.top,
                rect.Width(), rect.Height(),
                PATCOPY);
    pDC->SelectObject(pBrOld);

//  draw interior field

    CBitmap bmpCell;
    bmpCell.LoadBitmap(IDB_CELL);
    CBrush brCell;
    brCell.CreatePatternBrush(&bmpCell);
    pBrOld = pDC->SelectObject(&brCell);
    pDC->PatBlt(rect.left+32, rect.top+32+32,
                rect.Width()-64, rect.Height()-64-32,
                PATCOPY);
    pDC->SelectObject(pBrOld);

//  draw scoreboard

    drawSprite(pDC, IDB_SCOREBOARD, 
               (int)((m_numCellsX-9)/2.0+1)*32, 5);

    pDC->SetBkMode(TRANSPARENT);
    pDC->TextOut((int)((m_numCellsX-9)/2.0+2)*32, 16, 
                 "Scores:");

//  draw all game components

    if (m_pActionHandler)
        m_pActionHandler->draw();

    m_pDC = 0;
}

/////////////////////////////////////////////////////////////////////////////
// CSnakeView printing

BOOL CSnakeView::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default preparation
    return DoPreparePrinting(pInfo);
}

void CSnakeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add extra initialization before printing
}

void CSnakeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CSnakeView diagnostics

#ifdef _DEBUG
void CSnakeView::AssertValid() const
{
    CView::AssertValid();
}

void CSnakeView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}

CSnakeDoc* CSnakeView::GetDocument() // non-debug version is inline
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSnakeDoc)));
    return (CSnakeDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSnakeView message handlers

void CSnakeView::OnInitialUpdate() 
{
    CView::OnInitialUpdate();
    
    CClientDC dcClient(this);
    OnPrepareDC(&dcClient);

    m_pDCMemDB = new CDC;
    m_pDCMemDB->CreateCompatibleDC(&dcClient);
    m_pDCMemDB->SetMapMode(dcClient.GetMapMode());
}

void CSnakeView::OnSize(UINT nType, int cx, int cy) 
{
    CView::OnSize(nType, cx, cy);
    
    CRect rect;
    GetClientRect(&rect); // device coordinates
                          // API without DC as arguments, 
                          // always use device coordinates

    if ((rect.right <= m_sizeDB.cx) &&
        (rect.bottom <= m_sizeDB.cy)) return;

    if (rect.right > m_sizeDB.cx)
        m_sizeDB.cx = rect.right;

    if (rect.bottom > m_sizeDB.cy)
        m_sizeDB.cy = rect.bottom;

    CClientDC dcClient(this);
    OnPrepareDC(&dcClient); // order dependency: after adjustScrollSizes()

    if (m_pBmpDB) delete m_pBmpDB;
    m_pBmpDB = new CBitmap;
    m_pBmpDB->CreateCompatibleBitmap(&dcClient, m_sizeDB.cx, m_sizeDB.cy);
}

void CSnakeView::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    
    OnPrepareDC(&dc);

    CBitmap *pBmpOld = m_pDCMemDB->SelectObject(m_pBmpDB);

    CRect rectInvalid;
    dc.GetClipBox(&rectInvalid); // logical coordinate

    m_pDCMemDB->SelectClipRgn(NULL);
    m_pDCMemDB->IntersectClipRect(&rectInvalid);

/*
    CBrush brBackground((COLORREF)::GetSysColor(COLOR_WINDOW));
    CBrush *pBrOld = m_pDCMemDB->SelectObject(&brBackground);
    m_pDCMemDB->PatBlt(rectInvalid.left, rectInvalid.top,
                       rectInvalid.Width(), rectInvalid.Height(),
                       PATCOPY);
    m_pDCMemDB->SelectObject(pBrOld);
*/

    OnDraw(m_pDCMemDB);

    dc.BitBlt(rectInvalid.left, rectInvalid.top,
              rectInvalid.Width(), rectInvalid.Height(),
              m_pDCMemDB, // MM_TEXT mode
              rectInvalid.left, rectInvalid.top,
              SRCCOPY);

    m_pDCMemDB->SelectObject(pBmpOld);
}

void CSnakeView::drawSprite(CDC *pDC, int resID, 
                            int ix, int iy)
{
    BITMAP bmpInfo;
    CSize  sizeBmp;
    CDC dcMem1, dcMem2;

    dcMem1.CreateCompatibleDC(pDC);
    dcMem2.CreateCompatibleDC(pDC);

    //  Step 1
//  create mask step 1: XOR the specified color

    CBitmap bmpSprite;
    bmpSprite.LoadBitmap(resID);
    bmpSprite.GetBitmap(&bmpInfo);
    sizeBmp = CSize(bmpInfo.bmWidth, bmpInfo.bmHeight);

    CBitmap bmpMask1;
    bmpMask1.CreateCompatibleBitmap(pDC, bmpInfo.bmWidth, bmpInfo.bmHeight);

    CBitmap *pOldBmp1 = (CBitmap *)dcMem1.SelectObject(&bmpMask1);

    CPen *pPen = (CPen *) dcMem1.SelectStockObject(NULL_PEN);
    CBrush br(RGB(131,0,0));
    CBrush *pBr = (CBrush *)dcMem1.SelectObject(&br);
    dcMem1.Rectangle(0,0,bmpInfo.bmWidth+1, bmpInfo.bmHeight+1);
    dcMem1.SelectObject(pBr);
    dcMem1.SelectObject(pPen);

    CBitmap *pOldBmp2 = (CBitmap *)dcMem2.SelectObject(&bmpSprite);

// transparent color will now be black

    dcMem1.SetMapMode(MM_TEXT); dcMem2.SetMapMode(MM_TEXT);
    dcMem1.BitBlt(0, 0,
                  bmpInfo.bmWidth, bmpInfo.bmHeight,
                  &dcMem2,
                  0, 0, SRCINVERT);
    dcMem1.SelectObject(pOldBmp1);
    dcMem2.SelectObject(pOldBmp2);

//  Step 2
//  create mask step 2: make transparent color region white

    CBitmap bmpMask2;
    bmpMask2.CreateCompatibleBitmap(pDC, bmpInfo.bmWidth, bmpInfo.bmHeight);
    pOldBmp2 = (CBitmap *)dcMem2.SelectObject(&bmpMask2);

    pOldBmp1 = (CBitmap *)dcMem1.SelectObject(&bmpMask1);
    dcMem1.SetMapMode(MM_TEXT); dcMem2.SetMapMode(MM_TEXT);
    dcMem2.BitBlt(0, 0,
                  bmpInfo.bmWidth, bmpInfo.bmHeight,
                  &dcMem1,
                  0, 0, NOTSRCCOPY);
    dcMem1.SelectObject(pOldBmp1);
    dcMem2.SelectObject(pOldBmp2);

//  Step 3
//  create mask step 3: copy to Black-white bitmap so that
//                      nontransparent color region is black

    CBitmap bmpBW1;
    bmpBW1.CreateBitmap(bmpInfo.bmWidth, bmpInfo.bmHeight,1,1,0);
    pOldBmp1 = (CBitmap *)dcMem1.SelectObject(&bmpBW1);
    pOldBmp2 = (CBitmap *)dcMem2.SelectObject(&bmpMask2);
    dcMem1.SetMapMode(MM_TEXT); dcMem2.SetMapMode(MM_TEXT);
    dcMem1.BitBlt(0, 0,
                  bmpInfo.bmWidth, bmpInfo.bmHeight,
                  &dcMem2,
                  0, 0, SRCCOPY);
    dcMem1.SelectObject(pOldBmp1);
    dcMem2.SelectObject(pOldBmp2);

/*
// view the mask
    dcMemMaskBW.SetMapMode(MM_LOENGLISH);
    pOldBmp1 = (CBitmap *)dcMem1.SelectObject(&bmpBW1);
    pDC->BitBlt(m_ptMouse.x-sizeBmp.cx/2, m_ptMouse.y-sizeBmp.cy/2, 
                sizeBmp.cx, sizeBmp.cy, 
                &dcMem1, // MM_LOENGLISH mode
                0, 0, SRCCOPY);
    dcMem1.SelectObject(pOldBmp1);
*/

//  Step 4
//  cut off the sprite from the background

    bmpBW1.GetBitmap(&bmpInfo);
    sizeBmp = CSize(bmpInfo.bmWidth, bmpInfo.bmHeight);

    // both DC must be in the same mapping mode
//    dcMem1.SetMapMode(MM_LOENGLISH);
    pOldBmp1 = (CBitmap *)dcMem1.SelectObject(&bmpBW1);
    pDC->BitBlt(ix, iy, 
                sizeBmp.cx, sizeBmp.cy, 
                &dcMem1, // MM_LOENGLISH mode

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产日韩91久久久久久| 26uuu国产电影一区二区| 亚洲综合色网站| 欧美一二三区在线观看| 国产一区二区女| 亚洲国产精品久久久久秋霞影院 | 日韩一级视频免费观看在线| 日韩和的一区二区| 中文字幕永久在线不卡| 欧美大度的电影原声| 在线一区二区三区四区| 国产福利一区二区| 久久精品久久精品| 亚洲女爱视频在线| 国产精品国产a级| 久久理论电影网| 日韩欧美视频一区| 欧美日韩成人在线| 欧美日韩在线精品一区二区三区激情| 国产·精品毛片| 国产a久久麻豆| 国产高清不卡一区| 国产在线日韩欧美| 国产一区二区精品久久| 国产一区二区三区视频在线播放 | 亚洲香肠在线观看| 亚洲国产日韩一区二区| 亚洲视频一区二区在线| 国产精品理伦片| 亚洲日本乱码在线观看| 国产精品系列在线| 中文字幕中文乱码欧美一区二区| 久久久99久久| 国产精品视频九色porn| 一区二区三区四区在线| 天堂va蜜桃一区二区三区| 亚洲成人激情社区| 国产伦精品一区二区三区视频青涩 | 成人免费电影视频| 91久久人澡人人添人人爽欧美| 在线观看亚洲a| 欧美va亚洲va香蕉在线| 中文成人av在线| 日韩高清不卡一区二区| 国产91精品欧美| 91精品综合久久久久久| 国产清纯白嫩初高生在线观看91| 中文字幕一区二区三区不卡在线| 午夜精品视频一区| 成人永久aaa| 欧美一二三四在线| 亚洲最大的成人av| 国产**成人网毛片九色 | 久久综合九色综合97婷婷女人| 国产精品久久夜| 国模少妇一区二区三区| 欧美精品一卡二卡| 亚洲福利一区二区三区| 色系网站成人免费| 欧美精彩视频一区二区三区| 视频一区欧美精品| 欧美性大战xxxxx久久久| 亚洲天堂免费在线观看视频| kk眼镜猥琐国模调教系列一区二区| 91麻豆精品国产91久久久使用方法| 亚洲男人的天堂在线观看| www.色精品| 亚洲自拍偷拍图区| 91精品久久久久久久久99蜜臂| 亚洲网友自拍偷拍| 欧美在线不卡一区| 天天综合日日夜夜精品| 日韩一区二区电影网| 久久精品免费观看| 久久精品一区二区三区四区| 国产福利不卡视频| 中文字幕一区三区| 欧美乱妇一区二区三区不卡视频 | 麻豆国产欧美一区二区三区| 国产亚洲女人久久久久毛片| 粉嫩在线一区二区三区视频| 国产精品蜜臀av| 欧美日韩国产在线播放网站| 国内精品写真在线观看| 日韩码欧中文字| 日韩一区二区电影| 不卡的av网站| 精品在线观看视频| 亚洲成精国产精品女| 中文一区在线播放| 日韩女优毛片在线| 99精品视频中文字幕| 免费久久精品视频| 亚洲影院理伦片| 国产欧美精品一区aⅴ影院 | www.成人在线| 国产成人精品免费在线| 日韩中文字幕亚洲一区二区va在线 | 亚洲高清在线视频| 亚洲国产精品国自产拍av| 91精品国产综合久久香蕉的特点 | 欧美国产精品专区| 欧美mv和日韩mv的网站| 在线综合亚洲欧美在线视频| 色美美综合视频| 欧美探花视频资源| 在线精品视频一区二区三四| 北条麻妃国产九九精品视频| 精品在线一区二区三区| 蜜桃av一区二区三区电影| 午夜不卡在线视频| 日韩激情视频在线观看| 久久se这里有精品| 蜜桃视频一区二区| 国产91露脸合集magnet| hitomi一区二区三区精品| 成人精品视频.| 成人国产一区二区三区精品| 91免费版pro下载短视频| 在线区一区二视频| 久久伊99综合婷婷久久伊| 欧美国产激情一区二区三区蜜月| 国产精品网站在线播放| 亚洲国产一区二区在线播放| 美腿丝袜一区二区三区| jlzzjlzz亚洲女人18| 欧美精品久久久久久久多人混战 | 91精品国产综合久久福利| 2024国产精品| 亚洲大片精品永久免费| 经典三级一区二区| 欧美伊人精品成人久久综合97| 日韩精品中文字幕一区| 亚洲蜜臀av乱码久久精品| 国产一区二区三区电影在线观看| 色菇凉天天综合网| 国产欧美在线观看一区| 亚洲综合一区二区精品导航| 国产乱码字幕精品高清av | 欧美日韩国产一二三| 亚洲欧美日韩国产手机在线| 国产在线不卡一区| 欧美电影免费观看高清完整版在| 亚洲午夜免费电影| 中文字幕精品在线不卡| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲美女免费在线| 91网站在线观看视频| 中文字幕第一区综合| 国产成人精品综合在线观看| 欧美国产日本视频| 91视频一区二区| 国产精品久久久久久妇女6080 | 在线播放欧美女士性生活| 亚洲最大成人综合| 欧美一区二区久久| 日韩成人一区二区三区在线观看| 欧美精品三级在线观看| 国产一区美女在线| 亚洲精品乱码久久久久久久久 | 色婷婷综合久久久久中文一区二区| 欧美日韩免费一区二区三区 | 久久精品在线观看| 一本久久a久久免费精品不卡| 一区二区三区欧美在线观看| 精品国产免费一区二区三区香蕉| 国产精品伊人色| 亚洲国产精品麻豆| 久久久久久久久久久黄色| 懂色av一区二区三区免费观看| 亚洲欧美日韩国产另类专区| 精品国产一区二区三区久久久蜜月 | 亚洲国产中文字幕在线视频综合| 国产情人综合久久777777| 欧美一区二区三区在线观看视频| 成人精品视频一区二区三区| 久久国产婷婷国产香蕉| 亚洲精品第1页| 国产日韩影视精品| 欧美videos大乳护士334| k8久久久一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 在线视频你懂得一区二区三区| 不卡电影一区二区三区| 国产91在线|亚洲| 色哦色哦哦色天天综合| 欧美日韩一区二区三区四区五区| 欧美一区二区在线不卡| 久久五月婷婷丁香社区| 欧美日韩大陆在线| 欧美在线综合视频| 在线观看国产91| 欧美少妇一区二区| 欧美性感一类影片在线播放| 国产成人精品免费看| 日韩国产欧美三级| 图片区小说区区亚洲影院| 午夜在线电影亚洲一区| 亚洲人成7777| 亚洲成人免费电影|