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

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

?? gdi.c

?? 一個windows顯示驅動的好程序
?? C
字號:
/***********************************************************************
 * GDI.C
 *  
 *    API for GDI
 *
 *
 * Toby Opferman Copyright (c) 2003
 *
 ***********************************************************************/
 

                                                                     
#include <windows.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include "gdi.h"


 /***********************************************************************
  * Macros
  ***********************************************************************/
#define COLOR_GOTO_COLOR(x, y, z) if(x > y) { x--; z = FALSE; } else if(x < y) { x++; z = FALSE; } 


 /***********************************************************************
  * Internal Structures
  ***********************************************************************/
  typedef struct {

      HWND hWnd;
      HDC hDoubleBuffer;
      HDC hDoubleBufferWorker;
      BITMAPINFO BitmapInfo;
      HBITMAP hCompatBitmap;
      HBITMAP hOldCompatBitmap;
      HGDIOBJ hOldBitMap;
      HBITMAP hDBBitMap;
      UCHAR *pBuffer;
      DWORD dwScreenX;
      DWORD dwScreenY;
      PALETTEENTRY VirtualPalette[256];
      DWORD dwOptimizedPaletteLookUp[256];
      CRITICAL_SECTION csRepaintBlock;

  } GDI, *PGDI;




 /***********************************************************************
  * GDI_Init
  *  
  *    Initialize Full Screen
  *
  * Parameters
  *     Window  Handle
  * 
  * Return Value
  *     Handle To Cubix
  *
  ***********************************************************************/
HGDI WINAPI GDI_Init(HWND hWnd, UINT dwScreenX, UINT dwScreenY)
{
    PGDI pGDI = NULL;
    HDC hDC;
    int iScreenY = dwScreenY;

    /* Bitmaps Are Upside Down, Need To Negate */
    iScreenY = -iScreenY;

    if(pGDI = (PGDI)LocalAlloc(LMEM_ZEROINIT, sizeof(GDI)))
    {
        
        InitializeCriticalSection(&pGDI->csRepaintBlock);
        

        pGDI->dwScreenX = dwScreenX;
        pGDI->dwScreenY = dwScreenY;

        pGDI->BitmapInfo.bmiHeader.biSize     = sizeof(BITMAPINFOHEADER);
        pGDI->BitmapInfo.bmiHeader.biBitCount = 32;
        pGDI->BitmapInfo.bmiHeader.biWidth    = dwScreenX;
        pGDI->BitmapInfo.bmiHeader.biHeight   = iScreenY;
        pGDI->BitmapInfo.bmiHeader.biPlanes   = 1;
        pGDI->BitmapInfo.bmiHeader.biCompression = BI_RGB;

        hDC = GetDC(hWnd);

        pGDI->hDoubleBuffer = CreateCompatibleDC(hDC);
        pGDI->hDoubleBufferWorker = CreateCompatibleDC(hDC);
        pGDI->hDBBitMap  = CreateDIBSection(pGDI->hDoubleBufferWorker, &pGDI->BitmapInfo, DIB_RGB_COLORS, (VOID **)&pGDI->pBuffer, NULL, 0);
        pGDI->hCompatBitmap = CreateCompatibleBitmap(hDC, dwScreenX, dwScreenY);
        pGDI->hOldCompatBitmap = SelectObject(pGDI->hDoubleBuffer, pGDI->hCompatBitmap);
        pGDI->hOldBitMap = SelectObject(pGDI->hDoubleBufferWorker, pGDI->hDBBitMap);

        ReleaseDC(hWnd, hDC);
        
    }

    return (HGDI)pGDI;
}



 /***********************************************************************
  * GDI_UnInit
  *  
  *    UnInitialize Test Graphics
  *
  * Parameters
  *     Handle to Test
  * 
  * Return Value
  *     Nothing
  *
  ***********************************************************************/
void WINAPI GDI_UnInit(HGDI hGDI)
{
    PGDI pGDI = (PGDI)hGDI;

    if(pGDI)
    {
        LocalFree(pGDI);
    }
}


 /***********************************************************************
  * GDI_GetDC
  *  
  *    Get The Video DC
  *
  * Parameters
  *     Handle to Test
  * 
  * Return Value
  *     Nothing
  *
  ***********************************************************************/
HDC GDI_GetDC(HGDI hGDI)
{
    PGDI pGDI = (PGDI)hGDI;

    EnterCriticalSection(&pGDI->csRepaintBlock);
    return pGDI->hDoubleBuffer;
}


 /***********************************************************************
  * GDI_GetDC
  *  
  *    Get The Video DC
  *
  * Parameters
  *     Handle to Test
  * 
  * Return Value
  *     Nothing
  *
  ***********************************************************************/
void GDI_ReleaseDC(HGDI hGDI)
{
    PGDI pGDI = (PGDI)hGDI;

    LeaveCriticalSection(&pGDI->csRepaintBlock);
}

 /***********************************************************************
  * GDI_BeginPaint
  *  
  *    Get The Video Buffer
  *
  * Parameters
  *     Handle to Test
  * 
  * Return Value
  *     Nothing
  *
  ***********************************************************************/
PUCHAR WINAPI GDI_BeginPaint(HGDI hGDI)
{
   PGDI pGDI = (PGDI)hGDI;

   return pGDI->pBuffer;
}



 /***********************************************************************
  * GDI_EndPaint
  *  
  *    End Painting
  *
  * Parameters
  *     Handle to Test
  * 
  * Return Value
  *     Nothing
  *
  ***********************************************************************/
void WINAPI GDI_EndPaint(HGDI hGDI)
{
    PGDI pGDI = (PGDI)hGDI;

    EnterCriticalSection(&pGDI->csRepaintBlock);
    BitBlt(pGDI->hDoubleBuffer, 0, 0, pGDI->dwScreenX, pGDI->dwScreenY, pGDI->hDoubleBufferWorker, 0, 0, SRCCOPY);
    LeaveCriticalSection(&pGDI->csRepaintBlock);
    
}



/***********************************************************************
 * GDI_BlastBuffer
 *  
 *    Clear Video Buffer
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
void WINAPI GDI_BlastBuffer(HGDI hGDI, PUCHAR pBuffer)
{
   PGDI pGDI = (PGDI)hGDI;

   memcpy(pGDI->pBuffer, pBuffer, pGDI->dwScreenX*pGDI->dwScreenY*4);
}



/***********************************************************************
 * GDI_ClearVideoBuffer
 *  
 *    Clear Video Buffer
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
void WINAPI GDI_ClearVideoBuffer(HGDI hGDI)
{
   PGDI pGDI = (PGDI)hGDI;

   memset(pGDI->pBuffer, 0, pGDI->dwScreenX*pGDI->dwScreenY*4);
}

/***********************************************************************
 * GDI_SetPalette
 *  
 *    
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
void WINAPI GDI_SetPalette(HGDI hGDI, PALETTEENTRY *pPaletteEntries)
{
   PGDI pGDI = (PGDI)hGDI;
   DWORD dwIndex;

   for(dwIndex = 0; dwIndex < 256; dwIndex++)
   {
      pGDI->VirtualPalette[dwIndex].peBlue  = pPaletteEntries[dwIndex].peBlue;
      pGDI->VirtualPalette[dwIndex].peGreen = pPaletteEntries[dwIndex].peGreen;
      pGDI->VirtualPalette[dwIndex].peRed   = pPaletteEntries[dwIndex].peRed;

      pGDI->dwOptimizedPaletteLookUp[dwIndex] = pGDI->VirtualPalette[dwIndex].peBlue | (pGDI->VirtualPalette[dwIndex].peGreen<<8) | (pGDI->VirtualPalette[dwIndex].peRed<<16);
   }
}


/***********************************************************************
 * GDI_FadePalette
 *  
 *    
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
BOOL WINAPI GDI_FadePalette(HGDI hGDI)
{
   PGDI pGDI = (PGDI)hGDI;
   BOOL bFaded = TRUE;
   DWORD dwIndex;

   for(dwIndex = 0; dwIndex < 256; dwIndex++)
   {
      COLOR_GOTO_COLOR(pGDI->VirtualPalette[dwIndex].peBlue, 0, bFaded);
      COLOR_GOTO_COLOR(pGDI->VirtualPalette[dwIndex].peGreen, 0, bFaded);
      COLOR_GOTO_COLOR(pGDI->VirtualPalette[dwIndex].peRed, 0, bFaded);

      pGDI->dwOptimizedPaletteLookUp[dwIndex] = pGDI->VirtualPalette[dwIndex].peBlue | (pGDI->VirtualPalette[dwIndex].peGreen<<8) | (pGDI->VirtualPalette[dwIndex].peRed<<16);
   }

   return bFaded;
}


/***********************************************************************
 * GDI_GetVPalEntry
 *  
 *    
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
DWORD WINAPI GDI_GetVPalEntry(HGDI hGDI, DWORD dwIndex)
{
   PGDI pGDI = (PGDI)hGDI;

   return pGDI->dwOptimizedPaletteLookUp[dwIndex];
}

/***********************************************************************
 * GDI_SetPixelUsingVPal
 *  
 *    
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
void WINAPI GDI_SetPixelUsingVPal(HGDI hGDI, DWORD dwIndexX, DWORD dwIndexY, DWORD dwIndex)
{
   PGDI pGDI = (PGDI)hGDI;

   memcpy(&pGDI->pBuffer[(dwIndexX*4) + (dwIndexY*pGDI->dwScreenX*4)], &pGDI->dwOptimizedPaletteLookUp[dwIndex], 4);

}



/***********************************************************************
 * DirectX_FadeToPalette
 *  
 *    
 *
 * Parameters
 *     Video Buffer
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
BOOL WINAPI GDI_FadeToPalette(HGDI hGDI, PALETTEENTRY *pPaletteEntries)
{
   PGDI pGDI = (PGDI)hGDI;
   BOOL bFaded = TRUE;
   DWORD dwIndex;

   for(dwIndex = 0; dwIndex < 256; dwIndex++)
   {
      COLOR_GOTO_COLOR(pGDI->VirtualPalette[dwIndex].peBlue, pPaletteEntries[dwIndex].peBlue, bFaded);
      COLOR_GOTO_COLOR(pGDI->VirtualPalette[dwIndex].peGreen, pPaletteEntries[dwIndex].peGreen, bFaded);
      COLOR_GOTO_COLOR(pGDI->VirtualPalette[dwIndex].peRed, pPaletteEntries[dwIndex].peRed, bFaded);

      pGDI->dwOptimizedPaletteLookUp[dwIndex] = pGDI->VirtualPalette[dwIndex].peBlue | (pGDI->VirtualPalette[dwIndex].peGreen<<8) | (pGDI->VirtualPalette[dwIndex].peRed<<16);
   }

   return bFaded;
}







/***********************************************************************
 * GDI_Debug
 *  
 *    Debug Shit
 *
 *    
 *
 * Parameters
 *     Debug
 *
 * Return Value
 *     Nothing
 *
 ***********************************************************************/
 void GDI_Debug(char *pszFormatString, ...)
 {
     char DebugString[256];
     va_list vl;

     va_start(vl, pszFormatString);
     vsprintf(DebugString, pszFormatString, vl);
     va_end(vl);

     OutputDebugString(DebugString);
 }





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品视频一区二区三区 | 91美女在线看| 国产欧美一区视频| 成人午夜碰碰视频| 成人免费小视频| 欧美写真视频网站| 日韩av一级片| 久久久久国产精品免费免费搜索| 国产电影精品久久禁18| 国产亚洲一区二区三区在线观看| 成人激情文学综合网| 中文字幕亚洲在| 欧美日产国产精品| 精品无人区卡一卡二卡三乱码免费卡 | 精品成人在线观看| 国产福利一区在线| 亚洲免费av高清| 91精品国产美女浴室洗澡无遮挡| 国产一区不卡视频| √…a在线天堂一区| 欧美私人免费视频| 激情图片小说一区| 亚洲黄色录像片| 久久综合999| 91久久精品一区二区三区| 婷婷成人激情在线网| 欧美精品一区二区三区在线 | 国产精品伦理在线| 欧美日韩免费不卡视频一区二区三区| 久久丁香综合五月国产三级网站| 国产精品无码永久免费888| 欧美在线观看一区二区| 久久电影网站中文字幕| 亚洲精品日产精品乱码不卡| 91麻豆精品国产91久久久更新时间| 国产成人精品一区二区三区四区 | 成人av免费在线观看| 亚洲午夜久久久久久久久久久| 精品人在线二区三区| 色呦呦网站一区| 国产一区二区成人久久免费影院 | 蜜臀久久久99精品久久久久久| 欧美激情在线看| 91麻豆精品久久久久蜜臀| 成人免费毛片app| 久久成人综合网| 天天综合日日夜夜精品| 中文字幕久久午夜不卡| 日韩免费一区二区三区在线播放| 欧美伊人久久久久久久久影院| 国产一区不卡在线| 日本不卡一区二区三区高清视频| 亚洲欧美日韩国产手机在线| 亚洲精品一区二区三区在线观看| 欧亚一区二区三区| 99re成人在线| 成人免费的视频| 国产一区亚洲一区| 久久国产三级精品| 免费三级欧美电影| 日韩制服丝袜av| 亚洲成人动漫在线观看| 一区二区三区不卡在线观看 | 欧美裸体一区二区三区| 97se亚洲国产综合自在线| 国产剧情一区二区| 国产一区二区三区国产| 久久激五月天综合精品| 日本va欧美va欧美va精品| 亚洲成av人片在线| 石原莉奈在线亚洲二区| 香蕉久久一区二区不卡无毒影院| 亚洲久本草在线中文字幕| 国产精品电影一区二区三区| 国产日韩视频一区二区三区| 久久免费的精品国产v∧| 久久一日本道色综合| 2021久久国产精品不只是精品| 日韩欧美在线一区二区三区| 日韩欧美在线网站| 26uuu亚洲综合色| 精品少妇一区二区三区在线播放| 日韩免费观看高清完整版在线观看| 91精品国产综合久久小美女| 91精品国产手机| 欧美mv和日韩mv的网站| 久久看人人爽人人| 中文字幕亚洲区| 亚洲综合小说图片| 日日摸夜夜添夜夜添精品视频 | 国产精品久久久久影院老司| 国产精品久久久久久亚洲毛片| 中文字幕不卡一区| 亚洲伦理在线免费看| 亚洲高清免费在线| 激情av综合网| 成人黄色电影在线 | 中文字幕一区二区在线观看 | 欧美日韩激情一区二区| 91精品国产综合久久久久久久久久 | 日韩美女视频一区二区在线观看| 久久众筹精品私拍模特| 国产精品免费人成网站| 亚洲精品网站在线观看| 视频一区视频二区中文| 国产精品一二三区在线| 成人激情校园春色| 欧美艳星brazzers| 精品久久久久久久久久久久久久久 | 国产成人自拍网| 色先锋久久av资源部| 欧美日韩一级视频| 久久久蜜桃精品| 一区二区在线观看视频在线观看| 日韩精品福利网| 成人黄色小视频在线观看| 欧美三片在线视频观看| 欧美白人最猛性xxxxx69交| 国产三级一区二区| 亚洲大片一区二区三区| 经典三级一区二区| 97成人超碰视| 欧美成人精品福利| 亚洲视频一区在线| 美女网站色91| 日本精品一区二区三区高清| 日韩一区二区三区视频在线观看| 国产精品国产三级国产普通话蜜臀| 亚洲超丰满肉感bbw| 国产成人精品亚洲日本在线桃色| 欧美日韩二区三区| 国产精品久久久久久久久晋中| 天天色图综合网| 91在线观看污| 国产日产欧美一区| 蜜臀久久久久久久| 欧美亚洲日本一区| 国产精品久久精品日日| 蜜臀av国产精品久久久久| 91久久一区二区| 国产精品成人免费在线| 麻豆成人在线观看| 欧美高清激情brazzers| 中文字幕日本不卡| 国产成人在线色| 国产亚洲欧美日韩俺去了| 蜜桃一区二区三区在线观看| 欧美优质美女网站| 亚洲三级视频在线观看| 国产美女一区二区| 欧美电视剧在线看免费| 亚洲成人精品影院| 欧美亚洲日本一区| 亚洲国产你懂的| 91网站视频在线观看| 中文乱码免费一区二区| 国产一区美女在线| 亚洲精品一区二区三区福利 | 国产suv精品一区二区三区| 欧美一级生活片| 蜜桃视频在线观看一区二区| 欧美日韩成人高清| 亚洲成人你懂的| 717成人午夜免费福利电影| 亚洲线精品一区二区三区八戒| 色狠狠桃花综合| 亚洲精品久久嫩草网站秘色| 97精品电影院| 亚洲午夜一区二区三区| 色播五月激情综合网| 一个色妞综合视频在线观看| 日本韩国一区二区三区| 亚洲一区免费在线观看| 欧美日韩在线免费视频| 亚洲一区二区三区自拍| 在线视频你懂得一区二区三区| 亚洲一区二区中文在线| 欧美日韩欧美一区二区| 天堂影院一区二区| 日韩精品一区二| 国产很黄免费观看久久| 国产精品网站在线播放| eeuss影院一区二区三区| 亚洲三级电影网站| 欧美日韩1区2区| 精品亚洲porn| 中文字幕一区二区三区蜜月| 成人av免费在线| 亚洲成人免费影院| 26uuu另类欧美亚洲曰本| 国产高清在线观看免费不卡| 亚洲视频免费在线| 欧美日韩二区三区| 国产最新精品免费| 亚洲丝袜精品丝袜在线| 91精品国产色综合久久不卡电影 | 99热99精品| 午夜视频久久久久久| 欧美videos大乳护士334| 成人福利视频在线|