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

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

?? ddutil.cpp

?? 傳奇3客戶端源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
// File: ddutil.cpp
//
// Desc: Routines for loading bitmap and palettes from resources
//
//
// Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

//-----------------------------------------------------------------------------
// Include files
//-----------------------------------------------------------------------------
#include "stdafx.h"

#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#include <io.h>
#include "ddutil.h"




//-----------------------------------------------------------------------------
// Name: DDLoadBitmap()
// Desc: Create a DirectDrawSurface from a bitmap resource.
//-----------------------------------------------------------------------------
extern "C" IDirectDrawSurface7 *
DDLoadBitmap(IDirectDraw7 * pdd, LPCSTR szBitmap, int dx, int dy)
{
    HBITMAP                 hbm;
    BITMAP                  bm;
    DDSURFACEDESC2          ddsd;
    IDirectDrawSurface7    *pdds;

    //
    //  Try to load the bitmap as a resource, if that fails, try it as a file
    //
    hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx,
                              dy, LR_CREATEDIBSECTION);
    if (hbm == NULL)
        hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, dx, dy,
                                  LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    if (hbm == NULL)
        return NULL;
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    //
    // Create a DirectDrawSurface for this bitmap
    //
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    ddsd.dwWidth = bm.bmWidth;
    ddsd.dwHeight = bm.bmHeight;
    if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
        return NULL;
    DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    DeleteObject(hbm);
    return pdds;
}




//-----------------------------------------------------------------------------
// Name: DDReLoadBitmap()
// Desc: Load a bitmap from a file or resource into a directdraw surface.
//       normaly used to re-load a surface after a restore.
//-----------------------------------------------------------------------------
HRESULT
DDReLoadBitmap(IDirectDrawSurface7 * pdds, LPCSTR szBitmap)
{
    HBITMAP                 hbm;
    HRESULT                 hr;

    //
    //  Try to load the bitmap as a resource, if that fails, try it as a file
    //
    hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, 0,
                              0, LR_CREATEDIBSECTION);
    if (hbm == NULL)
        hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, 0, 0,
                                  LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    if (hbm == NULL)
    {
        OutputDebugString("handle is null\n");
        return E_FAIL;
    }
    hr = DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    if (hr != DD_OK)
    {
        OutputDebugString("ddcopybitmap failed\n");
    }
    DeleteObject(hbm);
    return hr;
}




//-----------------------------------------------------------------------------
// Name: DDCopyBitmap()
// Desc: Draw a bitmap into a DirectDrawSurface
//-----------------------------------------------------------------------------
extern "C" HRESULT
DDCopyBitmap(IDirectDrawSurface7 * pdds, HBITMAP hbm, int x, int y,
             int dx, int dy)
{
    HDC                     hdcImage;
    HDC                     hdc;
    BITMAP                  bm;
    DDSURFACEDESC2          ddsd;
    HRESULT                 hr;

    if (hbm == NULL || pdds == NULL)
        return E_FAIL;
    //
    // Make sure this surface is restored.
    //
    pdds->Restore();
    //
    // Select bitmap into a memoryDC so we can use it.
    //
    hdcImage = CreateCompatibleDC(NULL);
    if (!hdcImage)
        OutputDebugString("createcompatible dc failed\n");
    SelectObject(hdcImage, hbm);
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    dx = dx == 0 ? bm.bmWidth : dx;     // Use the passed size, unless zero
    dy = dy == 0 ? bm.bmHeight : dy;
    //
    // Get size of surface.
    //
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
    pdds->GetSurfaceDesc(&ddsd);
    
    if ((hr = pdds->GetDC(&hdc)) == DD_OK)
    {
        StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,
                   dx, dy, SRCCOPY);
        pdds->ReleaseDC(hdc);
    }

    DeleteDC(hdcImage);
    return hr;
}




//-----------------------------------------------------------------------------
// Name: DDLoadPalette()
// Desc: Create a DirectDraw palette object from a bitmap resource
//       if the resource does not exist or NULL is passed create a
//       default 332 palette.
//-----------------------------------------------------------------------------
extern "C" IDirectDrawPalette *
DDLoadPalette(IDirectDraw7 * pdd, LPCSTR szBitmap)
{
    IDirectDrawPalette     *ddpal;
    int                     i;
    int                     n;
    int                     fh;
    HRSRC                   h;
    LPBITMAPINFOHEADER      lpbi;
    PALETTEENTRY            ape[256];
    RGBQUAD                *prgb;

    //
    // Build a 3:3:2 palette as the default.
    //
    for (i = 0; i < 256; i++)
    {
        ape[i].peRed = (BYTE) (((i >> 5) & 0x07) * 255 / 7);
        ape[i].peGreen = (BYTE) (((i >> 2) & 0x07) * 255 / 7);
        ape[i].peBlue = (BYTE) (((i >> 0) & 0x03) * 255 / 3);
        ape[i].peFlags = (BYTE) 0;
    }
    //
    // Get a pointer to the bitmap resource.
    //
    if (szBitmap && (h = FindResource(NULL, szBitmap, RT_BITMAP)))
    {
        lpbi = (LPBITMAPINFOHEADER) LockResource(LoadResource(NULL, h));
        if (!lpbi)
            OutputDebugString("lock resource failed\n");
        prgb = (RGBQUAD *) ((BYTE *) lpbi + lpbi->biSize);
        if (lpbi == NULL || lpbi->biSize < sizeof(BITMAPINFOHEADER))
            n = 0;
        else if (lpbi->biBitCount > 8)
            n = 0;
        else if (lpbi->biClrUsed == 0)
            n = 1 << lpbi->biBitCount;
        else
            n = lpbi->biClrUsed;
        //
        //  A DIB color table has its colors stored BGR not RGB
        //  so flip them around.
        //
        for (i = 0; i < n; i++)
        {
            ape[i].peRed = prgb[i].rgbRed;
            ape[i].peGreen = prgb[i].rgbGreen;
            ape[i].peBlue = prgb[i].rgbBlue;
            ape[i].peFlags = 0;
        }
    }
    else if (szBitmap && (fh = _lopen(szBitmap, OF_READ)) != -1)
    {
        BITMAPFILEHEADER        bf;
        BITMAPINFOHEADER        bi;

        _lread(fh, &bf, sizeof(bf));
        _lread(fh, &bi, sizeof(bi));
        _lread(fh, ape, sizeof(ape));
        _lclose(fh);
        if (bi.biSize != sizeof(BITMAPINFOHEADER))
            n = 0;
        else if (bi.biBitCount > 8)
            n = 0;
        else if (bi.biClrUsed == 0)
            n = 1 << bi.biBitCount;
        else
            n = bi.biClrUsed;
        //
        //  A DIB color table has its colors stored BGR not RGB
        //  so flip them around.
        //
        for (i = 0; i < n; i++)
        {
            BYTE        r = ape[i].peRed;

            ape[i].peRed = ape[i].peBlue;
            ape[i].peBlue = r;
        }
    }
    pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL);
    return ddpal;
}




//-----------------------------------------------------------------------------
// Name: DDColorMatch()
// Desc: Convert a RGB color to a pysical color.
//       We do this by leting GDI SetPixel() do the color matching
//       then we lock the memory and see what it got mapped to.
//-----------------------------------------------------------------------------
extern "C" DWORD
DDColorMatch(IDirectDrawSurface7 * pdds, COLORREF rgb)
{
    COLORREF                rgbT;
    HDC                     hdc;
    DWORD                   dw = CLR_INVALID;
    DDSURFACEDESC2          ddsd;
    HRESULT                 hres;

    //
    //  Use GDI SetPixel to color match for us
    //
    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
    {
        rgbT = GetPixel(hdc, 0, 0);     // Save current pixel value
        SetPixel(hdc, 0, 0, rgb);       // Set our value
        pdds->ReleaseDC(hdc);
    }
    //

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久这里只有精品6| 欧美va亚洲va国产综合| 国产最新精品精品你懂的| 亚洲午夜精品在线| 国产精品国产三级国产| 欧美经典一区二区| 日本一区二区三级电影在线观看| 日韩一级大片在线观看| 日韩免费观看高清完整版在线观看| 欧美日韩在线不卡| 日本高清不卡aⅴ免费网站| 色呦呦国产精品| 91极品视觉盛宴| 欧美日韩成人一区二区| 日韩欧美一区二区三区在线| 精品久久人人做人人爰| 国产色综合久久| 久久综合久久综合九色| 国产网站一区二区| 亚洲欧美在线另类| 亚洲图片有声小说| 久久福利视频一区二区| 国产成人免费视频一区| av电影在线观看完整版一区二区| 91网站最新网址| 7799精品视频| 国产精品美女一区二区| 夜夜嗨av一区二区三区四季av| 五月激情综合婷婷| 国产ts人妖一区二区| 91在线小视频| 91精品国产一区二区三区蜜臀| 精品国产凹凸成av人导航| 国产精品九色蝌蚪自拍| 午夜激情一区二区三区| 国产一区美女在线| 欧美最猛黑人xxxxx猛交| 在线成人免费观看| 亚洲国产精品精华液ab| 亚洲成a人v欧美综合天堂下载 | 欧美一区二区三区日韩视频| 精品国产精品网麻豆系列| 亚洲特黄一级片| 免费在线观看一区二区三区| www.爱久久.com| 正在播放亚洲一区| 中文字幕日韩av资源站| 免费精品视频在线| 在线免费不卡视频| 中文字幕欧美区| 日本美女一区二区三区| 一本一道综合狠狠老| 精品国产第一区二区三区观看体验| 亚洲女厕所小便bbb| 国产福利91精品| 日韩精品一区二| 日韩主播视频在线| 日本高清不卡视频| 国产精品三级视频| 国产精品自拍一区| 日韩欧美国产综合在线一区二区三区| 一区二区视频在线看| 国产91精品一区二区| 精品国产免费人成电影在线观看四季| 亚洲一区av在线| 色哟哟一区二区| 最近日韩中文字幕| 丁香六月综合激情| 精品国产乱码久久久久久久久 | 欧美日韩视频在线一区二区| 久久精品在线观看| 麻豆国产精品视频| 欧美一区二区国产| 日韩电影在线观看网站| 欧美日韩免费一区二区三区视频| 中文字幕日韩精品一区| jlzzjlzz国产精品久久| 国产偷国产偷亚洲高清人白洁| 午夜精品久久一牛影视| 欧美中文字幕亚洲一区二区va在线 | 99久免费精品视频在线观看| 欧美极品xxx| 成人99免费视频| 国产情人综合久久777777| 国产成人啪免费观看软件| 久久久久久97三级| 国产大陆亚洲精品国产| 日本一区二区三区国色天香| www.综合网.com| 国产精品久久久久久久久动漫| 9l国产精品久久久久麻豆| 亚洲欧美一区二区久久| 在线观看精品一区| 视频一区免费在线观看| 91精品国产综合久久久久久久| 青青草伊人久久| 亚洲精品在线免费播放| 成人av在线影院| 亚洲综合色丁香婷婷六月图片| 欧美日韩成人一区二区| 韩国成人在线视频| 国产精品你懂的在线欣赏| 色婷婷精品久久二区二区蜜臂av | 日韩影院精彩在线| 欧美成人精品3d动漫h| 国产成人精品亚洲午夜麻豆| 国产精品久久久久影视| 欧美体内she精视频| 麻豆91免费观看| 一区精品在线播放| 91精品婷婷国产综合久久| 国产aⅴ综合色| 亚洲国产精品综合小说图片区| 欧美精品一区二区三区蜜桃视频| 99综合电影在线视频| 蜜桃av噜噜一区二区三区小说| 国产亚洲欧美色| 欧美日韩在线三级| 波多野结衣在线aⅴ中文字幕不卡| 亚洲三级电影网站| 精品国产伦一区二区三区观看方式 | 99久久777色| 日韩有码一区二区三区| 亚洲欧洲日产国码二区| 91精品国产免费| av电影一区二区| 美女www一区二区| 国产精品国产馆在线真实露脸| 3d成人动漫网站| caoporen国产精品视频| 美腿丝袜一区二区三区| 亚洲精品第1页| 国产精品欧美一级免费| 欧美一三区三区四区免费在线看| 成人午夜大片免费观看| 蜜臂av日日欢夜夜爽一区| 亚洲午夜av在线| 亚洲欧美色综合| 国产精品电影院| 国产嫩草影院久久久久| 亚洲精品在线观看网站| 欧美精品99久久久**| 色综合久久综合网97色综合| 国产成人av一区二区三区在线观看| 视频一区中文字幕| 亚洲一二三四久久| 亚洲乱码日产精品bd| 亚洲欧洲av色图| 欧美激情一区二区三区四区 | 99久久精品国产导航| 国产成人亚洲精品青草天美| 精品无人码麻豆乱码1区2区| 午夜精品成人在线视频| 日韩av不卡一区二区| 日本一不卡视频| 丝瓜av网站精品一区二区| 偷拍日韩校园综合在线| 午夜精品视频在线观看| 亚洲成人av中文| 亚洲高清免费观看| 亚洲大尺度视频在线观看| 亚洲线精品一区二区三区八戒| 一区二区三区在线视频观看58| 亚洲欧洲制服丝袜| 亚洲国产日韩a在线播放| 午夜国产不卡在线观看视频| 亚洲成av人片在线观看| 偷拍日韩校园综合在线| 奇米影视一区二区三区| 韩日av一区二区| 国产精品白丝jk黑袜喷水| 国产成人午夜电影网| 99re这里只有精品视频首页| 色综合久久六月婷婷中文字幕| 91黄色在线观看| 欧美一区二区性放荡片| 精品91自产拍在线观看一区| 国产免费久久精品| 一区二区三区在线免费播放| 日本免费在线视频不卡一不卡二 | av一区二区三区四区| 色狠狠综合天天综合综合| 91精品欧美综合在线观看最新| 久久综合九色综合欧美亚洲| 亚洲欧洲日产国码二区| 日韩av电影免费观看高清完整版 | 欧美欧美欧美欧美首页| 欧美xxxx老人做受| 国产精品视频一二三| 夜色激情一区二区| 国产露脸91国语对白| 91视频一区二区| 欧美大片顶级少妇| 一区二区三区四区激情| 经典一区二区三区| 在线看日本不卡| 日本一区二区视频在线| 秋霞av亚洲一区二区三| 99久久精品99国产精品| 精品电影一区二区|