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

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

?? visualpng.c

?? Borland C++BuilderT 6 Developer s Guide
?? C
?? 第 1 頁 / 共 2 頁
字號:
//------------------------------------
//  VisualPng.C -- Shows a PNG image
//------------------------------------

// Copyright 2000, Willem van Schaik.  For conditions of distribution and
// use, see the copyright/license/disclaimer notice in png.h

// switches

// defines

#define PROGNAME  "VisualPng"
#define LONGNAME  "Win32 Viewer for PNG-files"
#define VERSION   "1.0 of 2000 June 07"

// constants

#define MARGIN 8

// standard includes

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

// application includes

#include "png.h"
#include "pngfile.h"
#include "resource.h"

// macros

// function prototypes

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
BOOL    CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;

BOOL CenterAbout (HWND hwndChild, HWND hwndParent);

BOOL BuildPngList (PTSTR pstrPathName, TCHAR **ppFileList, int *pFileCount,
        int *pFileIndex);

BOOL SearchPngList (TCHAR *pFileList, int FileCount, int *pFileIndex,
        PTSTR pstrPrevName, PTSTR pstrNextName);

BOOL LoadImageFile(HWND hwnd, PTSTR pstrPathName,
        png_byte **ppbImage, int *pxImgSize, int *pyImgSize, int *piChannels,
        png_color *pBkgColor);

BOOL DisplayImage (HWND hwnd, BYTE **ppDib,
        BYTE **ppDiData, int cxWinSize, int cyWinSize,
        BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels,
        BOOL bStretched);

BOOL InitBitmap (
        BYTE *pDiData, int cxWinSize, int cyWinSize);

BOOL FillBitmap (
        BYTE *pDiData, int cxWinSize, int cyWinSize,
        BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels,
        BOOL bStretched);

// a few global variables

static char *szProgName = PROGNAME;
static char *szAppName = LONGNAME;
static char *szIconName = PROGNAME;
static char szCmdFileName [MAX_PATH];

// MAIN routine

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    HACCEL   hAccel;
    HWND     hwnd;
    MSG      msg;
    WNDCLASS wndclass;
    int ixBorders, iyBorders;

    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hInstance;
    wndclass.hIcon         = LoadIcon (hInstance, szIconName) ;
    wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wndclass.hbrBackground = NULL; // (HBRUSH) GetStockObject (GRAY_BRUSH);
    wndclass.lpszMenuName  = szProgName;
    wndclass.lpszClassName = szProgName;

    if (!RegisterClass (&wndclass))
    {
        MessageBox (NULL, TEXT ("Error: this program requires Windows NT!"),
            szProgName, MB_ICONERROR);
        return 0;
    }

    // if filename given on commandline, store it
    if ((szCmdLine != NULL) && (*szCmdLine != '\0'))
        if (szCmdLine[0] == '"')
            strncpy (szCmdFileName, szCmdLine + 1, strlen(szCmdLine) - 2);
        else
            strcpy (szCmdFileName, szCmdLine);
    else
        strcpy (szCmdFileName, "");

    // calculate size of window-borders
    ixBorders = 2 * (GetSystemMetrics (SM_CXBORDER) +
                     GetSystemMetrics (SM_CXDLGFRAME));
    iyBorders = 2 * (GetSystemMetrics (SM_CYBORDER) +
                     GetSystemMetrics (SM_CYDLGFRAME)) +
                     GetSystemMetrics (SM_CYCAPTION) +
                     GetSystemMetrics (SM_CYMENUSIZE) +
                     1; /* WvS: don't ask me why? */

    hwnd = CreateWindow (szProgName, szAppName,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        512 + 2 * MARGIN + ixBorders, 384 + 2 * MARGIN + iyBorders,
//      CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, hInstance, NULL);

    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);

    hAccel = LoadAccelerators (hInstance, szProgName);

    while (GetMessage (&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator (hwnd, hAccel, &msg))
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,
        LPARAM lParam)
{
    static HINSTANCE          hInstance ;
    static HDC                hdc;
    static PAINTSTRUCT        ps;
    static HMENU              hMenu;

    static BITMAPFILEHEADER  *pbmfh;
    static BITMAPINFOHEADER  *pbmih;
    static BYTE              *pbImage;
    static int                cxWinSize, cyWinSize;
    static int                cxImgSize, cyImgSize;
    static int                cImgChannels;
    static png_color          bkgColor = {127, 127, 127};

    static BOOL               bStretched = TRUE;

    static BYTE              *pDib = NULL;
    static BYTE              *pDiData = NULL;

    static TCHAR              szImgPathName [MAX_PATH];
    static TCHAR              szTitleName [MAX_PATH];

    static TCHAR             *pPngFileList = NULL;
    static int                iPngFileCount;
    static int                iPngFileIndex;

    BOOL                      bOk;

    switch (message)
    {
    case WM_CREATE:
        hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
        PngFileInitialize (hwnd);

        strcpy (szImgPathName, "");

        // in case we process file given on command-line

        if (szCmdFileName[0] != '\0')
        {
            strcpy (szImgPathName, szCmdFileName);

            // read the other png-files in the directory for later
            // next/previous commands

            BuildPngList (szImgPathName, &pPngFileList, &iPngFileCount,
                          &iPngFileIndex);

            // load the image from file

            if (!LoadImageFile (hwnd, szImgPathName,
                &pbImage, &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor))
                return 0;

            // invalidate the client area for later update

            InvalidateRect (hwnd, NULL, TRUE);

            // display the PNG into the DIBitmap

            DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
                pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
        }

        return 0;

    case WM_SIZE:
        cxWinSize = LOWORD (lParam);
        cyWinSize = HIWORD (lParam);

        // invalidate the client area for later update

        InvalidateRect (hwnd, NULL, TRUE);

        // display the PNG into the DIBitmap

        DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
            pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);

        return 0;

    case WM_INITMENUPOPUP:
        hMenu = GetMenu (hwnd);

        if (pbImage)
            EnableMenuItem (hMenu, IDM_FILE_SAVE, MF_ENABLED);
        else
            EnableMenuItem (hMenu, IDM_FILE_SAVE, MF_GRAYED);

        return 0;

    case WM_COMMAND:
        hMenu = GetMenu (hwnd);

        switch (LOWORD (wParam))
        {
        case IDM_FILE_OPEN:

            // show the File Open dialog box

            if (!PngFileOpenDlg (hwnd, szImgPathName, szTitleName))
                return 0;

            // read the other png-files in the directory for later
            // next/previous commands

            BuildPngList (szImgPathName, &pPngFileList, &iPngFileCount,
                          &iPngFileIndex);

            // load the image from file

            if (!LoadImageFile (hwnd, szImgPathName,
                &pbImage, &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor))
                return 0;

            // invalidate the client area for later update

            InvalidateRect (hwnd, NULL, TRUE);

            // display the PNG into the DIBitmap

            DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
                pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);

            return 0;

        case IDM_FILE_SAVE:

            // show the File Save dialog box

            if (!PngFileSaveDlg (hwnd, szImgPathName, szTitleName))
                return 0;

            // save the PNG to a disk file

            SetCursor (LoadCursor (NULL, IDC_WAIT));
            ShowCursor (TRUE);

            bOk = PngSaveImage (szImgPathName, pDiData, cxWinSize, cyWinSize,
                  bkgColor);

            ShowCursor (FALSE);
            SetCursor (LoadCursor (NULL, IDC_ARROW));

            if (!bOk)
                MessageBox (hwnd, TEXT ("Error in saving the PNG image"),
                szProgName, MB_ICONEXCLAMATION | MB_OK);
            return 0;

        case IDM_FILE_NEXT:

            // read next entry in the directory

            if (SearchPngList (pPngFileList, iPngFileCount, &iPngFileIndex,
                NULL, szImgPathName))
            {
                if (strcmp (szImgPathName, "") == 0)
                    return 0;
                
                // load the image from file
                
                if (!LoadImageFile (hwnd, szImgPathName, &pbImage,
                        &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor))
                    return 0;
                
                // invalidate the client area for later update
                
                InvalidateRect (hwnd, NULL, TRUE);
                
                // display the PNG into the DIBitmap
                
                DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
                    pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
            }
            
            return 0;

        case IDM_FILE_PREVIOUS:

            // read previous entry in the directory

            if (SearchPngList (pPngFileList, iPngFileCount, &iPngFileIndex,
                szImgPathName, NULL))
            {
                
                if (strcmp (szImgPathName, "") == 0)
                    return 0;
                
                // load the image from file
                
                if (!LoadImageFile (hwnd, szImgPathName, &pbImage, &cxImgSize,
                    &cyImgSize, &cImgChannels, &bkgColor))
                    return 0;
                
                // invalidate the client area for later update
                
                InvalidateRect (hwnd, NULL, TRUE);
                
                // display the PNG into the DIBitmap
                
                DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
                    pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
            }

            return 0;

        case IDM_FILE_EXIT:

            // more cleanup needed...

            // free image buffer

            if (pDib != NULL)
            {
                free (pDib);
                pDib = NULL;
            }

            // free file-list

            if (pPngFileList != NULL)
            {
                free (pPngFileList);
                pPngFileList = NULL;
            }

            // let's go ...

            exit (0);

            return 0;

        case IDM_OPTIONS_STRETCH:
            bStretched = !bStretched;
            if (bStretched)
                CheckMenuItem (hMenu, IDM_OPTIONS_STRETCH, MF_CHECKED);
            else
                CheckMenuItem (hMenu, IDM_OPTIONS_STRETCH, MF_UNCHECKED);

            // invalidate the client area for later update

            InvalidateRect (hwnd, NULL, TRUE);

            // display the PNG into the DIBitmap

            DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
                pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);

            return 0;

        case IDM_HELP_ABOUT:
            DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
            return 0;

        } // end switch

        break;

    case WM_PAINT:
        hdc = BeginPaint (hwnd, &ps);

        if (pDib)
            SetDIBitsToDevice (hdc, 0, 0, cxWinSize, cyWinSize, 0, 0,
                0, cyWinSize, pDiData, (BITMAPINFO *) pDib, DIB_RGB_COLORS);

        EndPaint (hwnd, &ps);
        return 0;

    case WM_DESTROY:
        if (pbmfh)
        {
            free (pbmfh);
            pbmfh = NULL;
        }

        PostQuitMessage (0);
        return 0;
    }

    return DefWindowProc (hwnd, message, wParam, lParam);
}

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
                            WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case WM_INITDIALOG :
          ShowWindow (hDlg, SW_HIDE);
          CenterAbout (hDlg, GetWindow (hDlg, GW_OWNER));
          ShowWindow (hDlg, SW_SHOW);
          return TRUE ;

     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDOK :
          case IDCANCEL :
               EndDialog (hDlg, 0) ;
               return TRUE ;
          }
          break ;
     }
     return FALSE ;
}

//---------------
//  CenterAbout
//---------------

BOOL CenterAbout (HWND hwndChild, HWND hwndParent)
{
   RECT    rChild, rParent, rWorkArea;
   int     wChild, hChild, wParent, hParent;
   int     xNew, yNew;
   BOOL  bResult;

   // Get the Height and Width of the child window
   GetWindowRect (hwndChild, &rChild);
   wChild = rChild.right - rChild.left;
   hChild = rChild.bottom - rChild.top;

   // Get the Height and Width of the parent window
   GetWindowRect (hwndParent, &rParent);
   wParent = rParent.right - rParent.left;
   hParent = rParent.bottom - rParent.top;

   // Get the limits of the 'workarea'
   bResult = SystemParametersInfo(
      SPI_GETWORKAREA,  // system parameter to query or set
      sizeof(RECT),
      &rWorkArea,
      0);
   if (!bResult) {
      rWorkArea.left = rWorkArea.top = 0;
      rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
      rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡在线视频| 精品国产麻豆免费人成网站| 欧美一区二区私人影院日本| 国产精品麻豆一区二区| 丝袜a∨在线一区二区三区不卡| 国产成人精品免费网站| 欧美肥胖老妇做爰| 亚洲永久精品大片| 99亚偷拍自图区亚洲| xnxx国产精品| 蜜臀国产一区二区三区在线播放| 色婷婷久久久久swag精品 | 亚洲自拍偷拍av| 国产成人免费高清| 久久久综合视频| 美国三级日本三级久久99 | 青青草一区二区三区| 日本久久电影网| 国产精品久久久久久久久果冻传媒 | 久久99精品国产麻豆不卡| 欧美亚洲图片小说| 一级精品视频在线观看宜春院| 成人综合在线视频| 国产欧美一区在线| 国产69精品久久久久777| 精品动漫一区二区三区在线观看| 七七婷婷婷婷精品国产| 欧美人妇做爰xxxⅹ性高电影| 亚洲影视在线播放| 欧美影院精品一区| 亚洲国产三级在线| 欧美日本在线播放| 日韩av在线发布| 日韩一级片在线播放| 麻豆精品一二三| 精品国产乱码久久久久久蜜臀| 麻豆精品新av中文字幕| 精品女同一区二区| 国产成人精品aa毛片| 中文字幕欧美国产| 99久久伊人网影院| 亚洲综合小说图片| 69久久99精品久久久久婷婷| 久久国产三级精品| 国产日产欧美一区| 91在线国产观看| 亚洲一区国产视频| 欧美成人三级在线| 成人免费毛片片v| 亚洲最新视频在线观看| 91精品国产黑色紧身裤美女| 国产真实乱偷精品视频免| 亚洲国产精品v| 欧美午夜电影在线播放| 九九九久久久精品| 最新日韩在线视频| 欧美日韩国产免费| 国产大陆精品国产| 亚洲午夜一区二区| 久久久久久久网| 91美女在线视频| 毛片不卡一区二区| 亚洲欧洲日韩av| 91精品国产综合久久香蕉麻豆| 国产一区二区三区不卡在线观看 | 欧洲一区在线观看| 美女网站色91| 综合亚洲深深色噜噜狠狠网站| 3d动漫精品啪啪1区2区免费 | 精品一区二区三区视频 | 欧美性视频一区二区三区| 久草精品在线观看| 亚洲免费在线观看| 精品久久一区二区三区| 91免费在线看| 国产在线精品一区二区夜色 | 亚洲欧美在线另类| 日韩欧美高清在线| 欧美亚洲高清一区二区三区不卡| 国产专区综合网| 五月婷婷另类国产| 中文字幕日韩一区二区| 精品欧美久久久| 欧美色倩网站大全免费| 国产福利不卡视频| 秋霞av亚洲一区二区三| 亚洲综合一区二区三区| 国产精品高潮久久久久无| 精品捆绑美女sm三区| 欧美军同video69gay| 一本在线高清不卡dvd| 国产91精品欧美| 精品一区二区成人精品| 日日摸夜夜添夜夜添亚洲女人| 日韩伦理免费电影| 中日韩av电影| 久久精品夜色噜噜亚洲a∨| 欧美区一区二区三区| 欧美美女视频在线观看| 成人动漫中文字幕| 精品一区二区三区在线播放视频| 亚洲第一av色| 一区二区三区免费| 亚洲日本一区二区三区| 国产精品美女久久久久久久久| 日韩一级大片在线| 日韩亚洲欧美一区二区三区| 精品污污网站免费看| 日本久久电影网| 色综合久久精品| 97精品久久久久中文字幕| eeuss影院一区二区三区| av一区二区三区四区| 成人h动漫精品一区二| 国产成人精品免费看| 成人精品视频网站| 不卡的av在线播放| 色综合av在线| 欧美丝袜丝交足nylons| 欧美日韩国产精选| 日韩限制级电影在线观看| 欧美一区二区精美| 久久人人97超碰com| 日本一区二区综合亚洲| 国产精品久久久久9999吃药| 亚洲女子a中天字幕| 亚洲国产欧美一区二区三区丁香婷| 一区二区高清在线| 日韩av中文在线观看| 狠狠色狠狠色综合日日91app| 国产成人免费在线观看不卡| 99re视频这里只有精品| 欧美日韩中文精品| 精品国产第一区二区三区观看体验| 精品美女一区二区三区| 国产精品久久毛片av大全日韩| 亚洲精品高清在线| 日本亚洲视频在线| 福利电影一区二区三区| 欧美在线观看一区| 日韩久久久久久| 中文字幕巨乱亚洲| 亚洲成a人片综合在线| 国产一区二区久久| 欧美在线一区二区三区| 日韩美女一区二区三区| 中文字幕一区二区视频| 日韩va欧美va亚洲va久久| 成人网在线播放| 欧美精品v日韩精品v韩国精品v| 国产亚洲精品bt天堂精选| 悠悠色在线精品| 国产在线国偷精品免费看| 色呦呦日韩精品| 久久久美女毛片| 亚洲动漫第一页| 粉嫩欧美一区二区三区高清影视| 欧美在线你懂的| 国产精品久久久久影院亚瑟| 天使萌一区二区三区免费观看| 国产精品一区二区久激情瑜伽 | 美女一区二区三区在线观看| 福利电影一区二区三区| 91精品国产免费| 亚洲免费在线电影| 国产高清无密码一区二区三区| 欧美日韩精品综合在线| 国产精品久久久爽爽爽麻豆色哟哟| 日韩va亚洲va欧美va久久| 色综合天天综合狠狠| 国产亚洲一区二区在线观看| 日韩和的一区二区| 色狠狠综合天天综合综合| 国产精品欧美久久久久无广告| 蜜桃一区二区三区在线观看| 欧美三级韩国三级日本一级| 国产精品国产自产拍高清av| 国产一区二区三区高清播放| 51精品秘密在线观看| 夜夜揉揉日日人人青青一国产精品| 国产成人日日夜夜| 精品国产乱码久久久久久久| 同产精品九九九| 在线亚洲免费视频| 亚洲色图色小说| 91视视频在线直接观看在线看网页在线看| 日韩欧美美女一区二区三区| 青青草国产成人99久久| 欧美日韩国产另类不卡| 亚洲午夜久久久久久久久电影院| 91麻豆高清视频| 亚洲美女电影在线| 欧美又粗又大又爽| 亚洲综合偷拍欧美一区色| 91黄色激情网站| 亚洲国产美国国产综合一区二区| 欧美制服丝袜第一页| 亚洲成人午夜电影| 在线成人午夜影院| 美女视频黄 久久|