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

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

?? grwin32.c

?? freetype庫的應用demo,里面包含freetype的很多實例
?? C
字號:
/******************************************************************* * *  grwin32.c  graphics driver for Win32 platform * *  This is the driver for displaying inside a window under Win32, *  used by the graphics utility of the FreeType test suite. * *  Written by Antoine Leca. *  Copyright 1999-2000, 2001, 2002 by Antoine Leca, David Turner *  David Turner, Robert Wilhelm, and Werner Lemberg. * *  Borrowing liberally from the other FreeType drivers. * *  This file is part of the FreeType project, and may only be used *  modified and distributed under the terms of the FreeType project *  license, LICENSE.TXT. By continuing to use, modify or distribute *  this file you indicate that you have read the license and *  understand and accept it fully. * ******************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <grobjs.h>#include <grdevice.h>/* logging facility */#include <stdarg.h>#define  DEBUGxxx#ifdef DEBUG#define LOG(x)  LogMessage##x#else#define LOG(x)  /* rien */#endif#ifdef DEBUG  static void  LogMessage( const char*  fmt, ... )  {    va_list  ap;    va_start( ap, fmt );    vfprintf( stderr, fmt, ap );    va_end( ap );  }#endif/*-------------------*//*  Size of the window. */#define WIN_WIDTH   640u#define WIN_HEIGHT  450u/* These values can be changed, but WIN_WIDTH should remain for now a  *//* multiple of 32 to avoid padding issues.                             */  typedef struct  _Translator  {    ULONG   winkey;    grKey   grkey;  } Translator;  static  Translator  key_translators[] =  {    { VK_BACK,      grKeyBackSpace },    { VK_TAB,       grKeyTab       },    { VK_RETURN,    grKeyReturn    },    { VK_ESCAPE,    grKeyEsc       },    { VK_HOME,      grKeyHome      },    { VK_LEFT,      grKeyLeft      },    { VK_UP,        grKeyUp        },    { VK_RIGHT,     grKeyRight     },    { VK_DOWN,      grKeyDown      },    { VK_PRIOR,     grKeyPageUp    },    { VK_NEXT,      grKeyPageDown  },    { VK_END,       grKeyEnd       },    { VK_F1,        grKeyF1        },    { VK_F2,        grKeyF2        },    { VK_F3,        grKeyF3        },    { VK_F4,        grKeyF4        },    { VK_F5,        grKeyF5        },    { VK_F6,        grKeyF6        },    { VK_F7,        grKeyF7        },    { VK_F8,        grKeyF8        },    { VK_F9,        grKeyF9        },    { VK_F10,       grKeyF10       },    { VK_F11,       grKeyF11       },    { VK_F12,       grKeyF12       }  };  static  Translator  syskey_translators[] =  {    { VK_F1,        grKeyF1        }  };  static ATOM  ourAtom;  typedef struct grWin32SurfaceRec_  {    grSurface     root;    HWND          window;    int           window_width;    int           window_height;    int           title_set;    const char*   the_title;    LPBITMAPINFO  pbmi;    char          bmi[ sizeof(BITMAPINFO) + 256*sizeof(RGBQUAD) ];    HBITMAP       hbm;    grEvent       ourevent;    int           eventToProcess;  } grWin32Surface;/* destroys the surface*/static voidgr_win32_surface_done( grWin32Surface*  surface ){  /* The graphical window has perhaps already destroyed itself */  if ( surface->window )  {    DestroyWindow ( surface->window );    PostMessage( surface->window, WM_QUIT, 0, 0 );  }  grDoneBitmap( &surface->root.bitmap );}static voidgr_win32_surface_refresh_rectangle(         grWin32Surface*  surface,         int              x,         int              y,         int              w,         int              h ){  HDC           hDC;  int           row_bytes, delta;  LPBITMAPINFO  pbmi   = surface->pbmi;  HANDLE        window = surface->window;  LOG(( "gr_win32_surface_refresh_rectangle: ( %p, %d, %d, %d, %d )\n",        (long)surface, x, y, w, h ));  /* clip update rectangle */  if ( x < 0 )  {    w += x;    x  = 0;  }  delta = x + w - surface->window_width;  if ( delta > 0 )    w -= delta;  if ( y < 0 )  {    h += y;    y  = 0;  }  delta = y + h - surface->window_height;  if ( delta > 0 )    h -= delta;  if ( w <= 0 || h <= 0 )    return;  /* now, perform the blit */  row_bytes = surface->root.bitmap.pitch;  if (row_bytes < 0) row_bytes = -row_bytes;  if ( row_bytes*8 != pbmi->bmiHeader.biWidth * pbmi->bmiHeader.biBitCount )    pbmi->bmiHeader.biWidth  = row_bytes * 8 / pbmi->bmiHeader.biBitCount;  hDC = GetDC ( window );  SetDIBits ( hDC, surface->hbm,              0,              surface->root.bitmap.rows,              surface->root.bitmap.buffer,              pbmi,              DIB_RGB_COLORS );  ReleaseDC ( window, hDC );  ShowWindow( window, SW_SHOW );  InvalidateRect ( window, NULL, FALSE );  UpdateWindow ( window );}static voidgr_win32_surface_set_title( grWin32Surface*  surface,                            const char*      title ){  /* the title will be set on the next listen_event, just */  /* record it there..                                    */  surface->title_set = 1;  surface->the_title = title;}static voidgr_win32_surface_listen_event( grWin32Surface*  surface,                               int              event_mask,                               grEvent*         grevent ){  MSG     msg;  HANDLE  window = surface->window;  event_mask=event_mask;  /* unused parameter */  if ( window && !surface->title_set )  {    SetWindowText( window, surface->the_title );    surface->title_set = 1;  }  surface->eventToProcess = 0;  while (GetMessage( &msg, 0, 0, 0 ))  {    TranslateMessage( &msg );    DispatchMessage( &msg );    if (surface->eventToProcess)      break;  }  *grevent = surface->ourevent;}/* * set graphics mode * and create the window class and the message handling. */static grWin32Surface*gr_win32_surface_init( grWin32Surface*  surface,                       grBitmap*        bitmap ){  static RGBQUAD  black = {    0,    0,    0, 0 };  static RGBQUAD  white = { 0xFF, 0xFF, 0xFF, 0 };  LPBITMAPINFO    pbmi;  /* find some memory for the bitmap header */  surface->pbmi = pbmi = (LPBITMAPINFO) surface->bmi;  LOG(( "Win32: init_surface( %p, %p )\n", surface, bitmap ));  LOG(( "       -- input bitmap =\n" ));  LOG(( "       --   mode   = %d\n", bitmap->mode ));  LOG(( "       --   grays  = %d\n", bitmap->grays ));  LOG(( "       --   width  = %d\n", bitmap->width ));  LOG(( "       --   height = %d\n", bitmap->rows ));  /* create the bitmap - under Win32, we support all modes as the GDI */  /* handles all conversions automatically..                          */  if ( grNewBitmap( bitmap->mode,                    bitmap->grays,                    bitmap->width,                    bitmap->rows,                    bitmap ) )    return 0;  LOG(( "       -- output bitmap =\n" ));  LOG(( "       --   mode   = %d\n", bitmap->mode ));  LOG(( "       --   grays  = %d\n", bitmap->grays ));  LOG(( "       --   width  = %d\n", bitmap->width ));  LOG(( "       --   height = %d\n", bitmap->rows ));  bitmap->pitch        = -bitmap->pitch;  surface->root.bitmap = *bitmap;  /* initialize the header to appropriate values */  memset( pbmi, 0, sizeof ( BITMAPINFO ) + sizeof ( RGBQUAD ) * 256 );  pbmi->bmiHeader.biSize   = sizeof ( BITMAPINFOHEADER );  pbmi->bmiHeader.biWidth  = bitmap->width;  pbmi->bmiHeader.biHeight = bitmap->rows;  pbmi->bmiHeader.biPlanes = 1;  switch ( bitmap->mode )  {  case gr_pixel_mode_mono:    pbmi->bmiHeader.biBitCount = 1;    pbmi->bmiColors[0] = white;    pbmi->bmiColors[1] = black;    break;  case gr_pixel_mode_rgb24:    pbmi->bmiHeader.biBitCount    = 24;    pbmi->bmiHeader.biCompression = BI_RGB;    break;  case gr_pixel_mode_gray:    pbmi->bmiHeader.biBitCount = 8;    pbmi->bmiHeader.biClrUsed  = bitmap->grays;    {      int   count = bitmap->grays;      int   x;      RGBQUAD*  color = pbmi->bmiColors;      for ( x = 0; x < count; x++, color++ )      {        color->rgbRed   =        color->rgbGreen =        color->rgbBlue  = (unsigned char)(((count-x)*255)/count);        color->rgbReserved = 0;      }    }    break;  default:    return 0;         /* Unknown mode */  }  surface->window_width  = bitmap->width;  surface->window_height = bitmap->rows;  surface->window = CreateWindow(        /* LPCSTR lpszClassName;    */ "FreeTypeTestGraphicDriver",        /* LPCSTR lpszWindowName;   */ "FreeType Test Graphic Driver",        /* DWORD dwStyle;           */  WS_OVERLAPPED | WS_SYSMENU,        /* int x;                   */  CW_USEDEFAULT,        /* int y;                   */  CW_USEDEFAULT,        /* int nWidth;              */  bitmap->width + 2*GetSystemMetrics(SM_CXBORDER),        /* int nHeight;             */  bitmap->rows  + GetSystemMetrics(SM_CYBORDER)                                              + GetSystemMetrics(SM_CYCAPTION),        /* HWND hwndParent;         */  HWND_DESKTOP,        /* HMENU hmenu;             */  0,        /* HINSTANCE hinst;         */  GetModuleHandle( NULL ),        /* void FAR* lpvParam;      */  surface );  if ( surface->window == 0 )    return  0;  surface->root.done         = (grDoneSurfaceFunc) gr_win32_surface_done;  surface->root.refresh_rect = (grRefreshRectFunc) gr_win32_surface_refresh_rectangle;  surface->root.set_title    = (grSetTitleFunc)    gr_win32_surface_set_title;  surface->root.listen_event = (grListenEventFunc) gr_win32_surface_listen_event;  return surface;}/* ---- Windows-specific stuff ------------------------------------------- */  /* Message processing for our Windows class */LRESULT CALLBACK Message_Process( HWND handle, UINT mess,                                  WPARAM wParam, LPARAM lParam )  {    grWin32Surface*  surface = NULL;    if ( mess == WM_CREATE )    {      /* WM_CREATE is the first message sent to this function, and the */      /* surface handle is available from the 'lParam' parameter. We   */      /* save its value in a window property..                         */      /*                                                               */      surface = ((LPCREATESTRUCT)lParam)->lpCreateParams;      SetProp( handle, (LPCSTR)(LONG)ourAtom, surface );    }    else    {      /* for other calls, we retrieve the surface handle from the window */      /* property.. ugly, isn't it ??                                    */      /*                                                                 */      surface = (grWin32Surface*) GetProp( handle, (LPCSTR)(LONG)ourAtom );    }    switch( mess )    {    case WM_DESTROY:        /* warn the main thread to quit if it didn't know */      surface->ourevent.type  = gr_event_key;      surface->ourevent.key   = grKeyEsc;      surface->eventToProcess = 1;      surface->window         = 0;      PostQuitMessage ( 0 );      DeleteObject ( surface->hbm );      return 0;    case WM_CREATE:      {        HDC           hDC;        LPBITMAPINFO  pbmi = surface->pbmi;        hDC          = GetDC ( handle );        surface->hbm = CreateDIBitmap (          /* HDC hdc;     handle of device context        */ hDC,          /* BITMAPINFOHEADER FAR* lpbmih;  addr.of header*/ &pbmi->bmiHeader,          /* DWORD dwInit;  CBM_INIT to initialize bitmap */ 0,          /* const void FAR* lpvBits;   address of values */ NULL,          /* BITMAPINFO FAR* lpbmi;   addr.of bitmap data */ pbmi,          /* UINT fnColorUse;      RGB or palette indices */ DIB_RGB_COLORS);        ReleaseDC ( handle, hDC );        break;      }    case WM_PAINT:      {      HDC           hDC, memDC;      HANDLE        oldbm;      PAINTSTRUCT   ps;      hDC   = BeginPaint ( handle, &ps );      memDC = CreateCompatibleDC( hDC );      oldbm = SelectObject( memDC, surface->hbm );      BitBlt ( hDC, 0, 0, surface->window_width, surface->window_height,               memDC, 0, 0, SRCCOPY);      ReleaseDC ( handle, hDC );      SelectObject ( memDC, oldbm );      DeleteObject ( memDC );      EndPaint ( handle, &ps );      return 0;      }    case WM_SYSKEYDOWN:      {        int          count = sizeof( syskey_translators )/sizeof( syskey_translators[0] );        Translator*  trans = syskey_translators;        Translator*  limit = trans + count;        for ( ; trans < limit; trans++ )          if ( wParam == trans->winkey )          {            surface->ourevent.key = trans->grkey;            goto Do_Key_Event;          }        return DefWindowProc( handle, mess, wParam, lParam );      }    case WM_KEYDOWN:      switch ( wParam )      {      case VK_ESCAPE:        surface->ourevent.type  = gr_event_key;        surface->ourevent.key   = grKeyEsc;        surface->eventToProcess = 1;        PostQuitMessage ( 0 );        return 0;      default:        /* lookup list of translated keys */        {          int          count = sizeof( key_translators )/sizeof( key_translators[0] );          Translator*  trans = key_translators;          Translator*  limit = trans + count;          for ( ; trans < limit; trans++ )            if ( wParam == trans->winkey )            {              surface->ourevent.key = trans->grkey;              goto Do_Key_Event;            }        }        /* the key isn't found, default processing               */        /* return DefWindowProc( handle, mess, wParam, lParam ); */        return DefWindowProc( handle, mess, wParam, lParam );    }    case WM_CHAR:      {        surface->ourevent.key = wParam;    Do_Key_Event:        surface->ourevent.type  = gr_event_key;        surface->eventToProcess = 1;      }      break;    default:       return DefWindowProc( handle, mess, wParam, lParam );    }    return 0;  }  static int  gr_win32_device_init( void )  {    WNDCLASS ourClass = {      /* UINT    style        */ 0,      /* WNDPROC lpfnWndProc  */ Message_Process,      /* int     cbClsExtra   */ 0,      /* int     cbWndExtra   */ 0,      /* HANDLE  hInstance    */ 0,      /* HICON   hIcon        */ 0,      /* HCURSOR hCursor      */ 0,      /* HBRUSH  hbrBackground*/ 0,      /* LPCTSTR lpszMenuName */ NULL,      /* LPCTSTR lpszClassName*/ "FreeTypeTestGraphicDriver"    };    /* register window class */    ourClass.hInstance    = GetModuleHandle( NULL );    ourClass.hIcon        = LoadIcon(0, IDI_APPLICATION);    ourClass.hCursor      = LoadCursor(0, IDC_ARROW);    ourClass.hbrBackground= GetStockObject(BLACK_BRUSH);    if ( RegisterClass(&ourClass) == 0 )      return -1;    /* add global atom */    ourAtom = GlobalAddAtom( "FreeType.Surface" );    return 0;  }  static void  gr_win32_device_done( void )  {    GlobalDeleteAtom( ourAtom );  }  grDevice  gr_win32_device =  {    sizeof( grWin32Surface ),    "win32",    gr_win32_device_init,    gr_win32_device_done,    (grDeviceInitSurfaceFunc) gr_win32_surface_init,    0,    0  };/* End */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本伦理一区二区| 91亚洲精品一区二区乱码| 国产福利不卡视频| 91麻豆精品国产91久久久资源速度| 国产日产欧美精品一区二区三区| 日本午夜一区二区| 欧美日韩成人高清| 午夜视频在线观看一区| 91蜜桃免费观看视频| 中文字幕一区二区三区色视频| 国产99精品国产| 国产精品国产自产拍高清av | 国内精品视频666| 国产亚洲一本大道中文在线| 日韩精品国产欧美| 久久精品亚洲精品国产欧美kt∨| 国产乱码一区二区三区| 国产精品灌醉下药二区| 欧美亚洲综合一区| 看电视剧不卡顿的网站| 欧美激情一区不卡| 欧美三电影在线| 国产自产高清不卡| 一区二区三区不卡在线观看| 欧美色男人天堂| 国模套图日韩精品一区二区 | 亚洲一二三四区不卡| 91麻豆精品国产无毒不卡在线观看| 九色综合狠狠综合久久| 国产精品久久久久四虎| 91成人网在线| 懂色中文一区二区在线播放| 午夜欧美一区二区三区在线播放 | 欧美色网一区二区| 国产毛片精品视频| 午夜精品久久一牛影视| 欧美极品另类videosde| 日韩免费一区二区| 欧美三级一区二区| 成人综合日日夜夜| 美国毛片一区二区三区| 亚洲高清免费视频| 亚洲影院免费观看| 日韩久久一区二区| 成人欧美一区二区三区黑人麻豆 | 精品一区二区三区视频在线观看 | 丝袜亚洲另类欧美综合| 亚洲欧洲韩国日本视频| 国产欧美日韩精品a在线观看| 欧美一区二区三区婷婷月色| 欧美美女bb生活片| 欧美三级视频在线播放| 欧美日韩一二区| 911精品产国品一二三产区| 欧美日韩一区二区三区视频| 欧美午夜精品一区二区蜜桃| 91久久精品国产91性色tv| 99re这里都是精品| 色屁屁一区二区| 欧美日韩在线精品一区二区三区激情| 在线观看欧美日本| 欧美成人bangbros| 久久综合资源网| 中文字幕一区二区日韩精品绯色| 欧美激情一区二区三区不卡| 亚洲视频一区二区在线| 一区二区三区欧美久久| 免费在线观看日韩欧美| 麻豆精品视频在线观看| 成人性生交大片免费看视频在线| 99国产精品久久| 日韩一区二区精品葵司在线| 精品盗摄一区二区三区| 亚洲精品久久7777| 国产尤物一区二区在线| 欧美综合天天夜夜久久| 精品精品国产高清一毛片一天堂| 国产精品色噜噜| 麻豆久久一区二区| 色国产综合视频| 中文字幕中文字幕在线一区| 老司机免费视频一区二区 | 奇米亚洲午夜久久精品| 99国产精品久| 国产人伦精品一区二区| 日韩国产高清在线| 91福利小视频| 18涩涩午夜精品.www| 国产精品一线二线三线精华| 欧美日韩精品欧美日韩精品| 中文字幕一区二区三区在线不卡| 美女高潮久久久| 欧美美女激情18p| 亚洲小说欧美激情另类| 色综合天天综合给合国产| 国产亚洲美州欧州综合国| 久久成人免费网站| 欧美α欧美αv大片| 美女视频黄a大片欧美| 欧美挠脚心视频网站| 国产性天天综合网| 亚洲国产精品影院| 欧美日韩国产小视频| 亚洲成人激情av| 欧美视频你懂的| 天堂在线亚洲视频| 欧美mv日韩mv| 成人性生交大合| 一区二区三区欧美亚洲| 91小视频免费观看| 欧美一区中文字幕| 夜夜嗨av一区二区三区网页| 欧美亚洲动漫精品| 亚洲成人av中文| 欧美大片日本大片免费观看| 国产精品自拍av| 亚洲一区二区视频| 精品久久人人做人人爰| 蜜桃av一区二区在线观看| 日韩美女视频在线| 成人爽a毛片一区二区免费| 中文字幕乱码亚洲精品一区| 色伊人久久综合中文字幕| 天天操天天色综合| 国产日韩欧美精品综合| 欧美性色综合网| 99久免费精品视频在线观看| 婷婷一区二区三区| 亚洲日本在线视频观看| 日韩亚洲欧美一区二区三区| 9i看片成人免费高清| 美女一区二区三区在线观看| 国产精品国产三级国产aⅴ无密码| 欧美午夜电影一区| 大胆亚洲人体视频| 蜜桃视频在线观看一区二区| 亚洲人成网站色在线观看 | 全部av―极品视觉盛宴亚洲| 中文字幕一区二区三| 国产亚洲欧美日韩俺去了| 91精品国产高清一区二区三区蜜臀| av激情成人网| 成人理论电影网| 国产美女主播视频一区| 蜜桃av一区二区在线观看| 亚洲福利视频一区| 一区二区久久久久| 国产精品色婷婷| 国产精品午夜在线观看| 久久久青草青青国产亚洲免观| 精品久久一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 欧美日韩中字一区| 欧美视频完全免费看| 91理论电影在线观看| 99天天综合性| 色婷婷久久久综合中文字幕| 一本色道久久综合精品竹菊| 91蜜桃视频在线| 制服丝袜中文字幕一区| 欧美电影免费观看高清完整版在| 久久综合色婷婷| 国产精品久久久久久久第一福利| 亚洲欧美一区二区三区极速播放| 一区二区三区中文在线观看| 肉肉av福利一精品导航| 国产精品1024久久| 一本色道久久综合精品竹菊 | 国产福利一区二区三区| 91亚洲精华国产精华精华液| 日本电影欧美片| 精品久久久久久无| 亚洲免费三区一区二区| 日本最新不卡在线| 99在线精品免费| 欧美电影免费观看高清完整版 | 蜜桃传媒麻豆第一区在线观看| 狠狠色丁香久久婷婷综合_中| 色诱亚洲精品久久久久久| 日韩欧美不卡一区| 亚洲成人一区二区| 99久久精品情趣| 久久久久久久久蜜桃| 国产精品久久久久久久久久久免费看| 久久久久久久久免费| 亚洲午夜影视影院在线观看| 国产一区二区三区美女| 91精品国产综合久久精品图片| 国产精品美日韩| 成人小视频在线观看| 国产偷国产偷精品高清尤物| 日本成人在线一区| 欧美精品三级在线观看| 亚洲图片欧美色图| 色诱视频网站一区| 一区二区三区蜜桃| 在线免费av一区| 午夜精品一区在线观看| 欧美色图一区二区三区| 亚洲一区二区视频|