|
|
/*******************************************************************************
* * (C) COPYRIGHT MICROSOFT CORPORATION * * TITLE: PAPRSIZE.CPP * * VERSION: 1.0 * * AUTHOR: ShaunIv * * DATE: 1/8/2001 * * DESCRIPTION: Scanner paper sizes * *******************************************************************************/ #include "precomp.h"
#pragma hdrstop
#include "wiauiext.h"
#include "paprsize.h"
extern HINSTANCE g_hInstance;
static const struct { int nStringId; LONG nWidth; LONG nHeight; } g_SupportedPaperSizes[] = { { IDS_WIA_PAPER_SIZE_E_SIZE_SHEET, 34000, 44000 }, { IDS_WIA_PAPER_SIZE_D_SIZE_SHEET, 22000, 34000 }, { IDS_WIA_PAPER_SIZE_A2, 16535, 23386 }, { IDS_WIA_PAPER_SIZE_C_SIZE_SHEET, 17000, 22000 }, { IDS_WIA_PAPER_SIZE_SUPER_B, 12008, 19173 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_10_ROTATED, 18031, 12756 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_C3, 12756, 18031 }, { IDS_WIA_PAPER_SIZE_A3_EXTRA, 12677, 17520 }, { IDS_WIA_PAPER_SIZE_TABLOID_EXTRA, 12000, 18000 }, { IDS_WIA_PAPER_SIZE_A3_ROTATED, 16535, 11693 }, { IDS_WIA_PAPER_SIZE_A3, 11693, 16535 }, { IDS_WIA_PAPER_SIZE_LEDGER, 17000, 11000 }, { IDS_WIA_PAPER_SIZE_TABLOID, 11000, 17000 }, { IDS_WIA_PAPER_SIZE_15X11, 15000, 11000 }, { IDS_WIA_PAPER_SIZE_US_STD_FANFOLD, 14875, 11000 }, { IDS_WIA_PAPER_SIZE_B4_JIS_ROTATED, 14331, 10118 }, { IDS_WIA_PAPER_SIZE_B4_JIS, 10118, 14331 }, { IDS_WIA_PAPER_SIZE_LEGAL_EXTRA, 9500, 15000 }, { IDS_WIA_PAPER_SIZE_10X14, 10000, 14000 }, { IDS_WIA_PAPER_SIZE_B4_ISO, 9843, 13898 }, { IDS_WIA_PAPER_SIZE_12X11, 12005, 11005 }, { IDS_WIA_PAPER_SIZE_SUPER_A, 8937, 14016 }, { IDS_WIA_PAPER_SIZE_JAPAN_ENVELOPE_KAKU_2_ROTATED, 13071, 9449 }, { IDS_WIA_PAPER_SIZE_JAPANESE_ENVELOPE_KAKU_2, 9449, 13071 }, { IDS_WIA_PAPER_SIZE_LEGAL, 8500, 14000 }, { IDS_WIA_PAPER_SIZE_A4_EXTRA, 9270, 12690 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_9_ROTATED, 12756, 9016 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_C4, 9016, 12756 }, { IDS_WIA_PAPER_SIZE_LETTER_EXTRA, 9500, 12000 }, { IDS_WIA_PAPER_SIZE_FOLIO, 8500, 13000 }, { IDS_WIA_PAPER_SIZE_10X11, 10000, 11000 }, { IDS_WIA_PAPER_SIZE_LETTER_PLUS, 8500, 12690 }, { IDS_WIA_PAPER_SIZE_A4_PLUS, 8268, 12992 }, { IDS_WIA_PAPER_SIZE_GERMAN_STD_FANFOLD, 8500, 12000 }, { IDS_WIA_PAPER_SIZE_9X11, 9000, 11000 }, { IDS_WIA_PAPER_SIZE_A4_ROTATED, 11693, 8268 }, { IDS_WIA_PAPER_SIZE_A4, 8268, 11693 }, { IDS_WIA_PAPER_SIZE_LETTER_ROTATED, 11000, 8500 }, { IDS_WIA_PAPER_SIZE_LETTER, 8500, 11000 }, { IDS_WIA_PAPER_SIZE_JAPAN_ENVELOPE_KAKU_3_ROTATED, 10906, 8504 }, { IDS_WIA_PAPER_SIZE_JAPANESE_ENVELOPE_KAKU_3, 8504, 10906 }, { IDS_WIA_PAPER_SIZE_QUARTO, 8465, 10827 }, { IDS_WIA_PAPER_SIZE_B5_ISO_EXTRA, 7913, 10866 }, { IDS_WIA_PAPER_SIZE_EXECUTIVE, 7250, 10500 }, { IDS_WIA_PAPER_SIZE_PRC_16K_ROTATED, 10236, 7402 }, { IDS_WIA_PAPER_SIZE_PRC_16K, 7402, 10236 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_INVITE, 8661, 8661 }, { IDS_WIA_PAPER_SIZE_B5_JIS_ROTATED, 10118, 7165 }, { IDS_WIA_PAPER_SIZE_B5_JIS, 7165, 10118 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_B5, 6929, 9843 }, { IDS_WIA_PAPER_SIZE_A5_EXTRA, 6850, 9252 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_C5, 6378, 9016 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_14, 5000, 11500 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_8_ROTATED, 12165, 4724 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_8, 4724, 12165 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_7_ROTATED, 9055, 6299 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_7, 6299, 9055 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_12, 4750, 11000 }, { IDS_WIA_PAPER_SIZE_A5_ROTATED, 8268, 5827 }, { IDS_WIA_PAPER_SIZE_A5, 5827, 8268 }, { IDS_WIA_PAPER_SIZE_STATEMENT, 5500, 8500 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_11, 4500, 10375 }, { IDS_WIA_PAPER_SIZE_JAPANESE_DOUBLE_POSTCARD, 7874, 5827 }, { IDS_WIA_PAPER_SIZE_DOUBLE_JAPAN_POSTCARD_ROTATED, 5827, 7874 }, { IDS_WIA_PAPER_SIZE_PRC_32KBIG_ROTATED, 7992, 5512 }, { IDS_WIA_PAPER_SIZE_PRC_32KBIG, 5512, 7992 }, { IDS_WIA_PAPER_SIZE_JAPAN_ENVELOPE_CHOU_3_ROTATED, 9252, 4724 }, { IDS_WIA_PAPER_SIZE_JAPANESE_ENVELOPE_CHOU_3, 4724, 9252 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_6_ROTATED, 9055, 4724 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_6, 4724, 9055 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_C65, 4488, 9016 }, { IDS_WIA_PAPER_SIZE_ENVELOPE, 4331, 9055 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_10, 4125, 9500 }, { IDS_WIA_PAPER_SIZE_JAPAN_ENVELOPE_YOU_4_ROTATED, 9252, 4134 }, { IDS_WIA_PAPER_SIZE_JAPAN_ENVELOPE_YOU_4, 4134, 9252 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_5_ROTATED, 8661, 4331 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_DL, 4331, 8661 }, { IDS_WIA_PAPER_SIZE_PRC_32K_ROTATED, 7244, 5118 }, { IDS_WIA_PAPER_SIZE_PRC_32K, 5118, 7244 }, { IDS_WIA_PAPER_SIZE_B6, 5040, 7170 }, { IDS_WIA_PAPER_SIZE_B6_JIS_ROTATED, 7165, 5039 }, { IDS_WIA_PAPER_SIZE_B6_JIS, 5039, 7165 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_4_ROTATED, 8189, 4331 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_4, 4331, 8189 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_9, 3875, 8875 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_B6, 6929, 4921 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_3, 4921, 6929 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_MONARCH, 3875, 7500 }, { IDS_WIA_PAPER_SIZE_ENVELOPE_C6, 4488, 6378 }, { IDS_WIA_PAPER_SIZE_JAPAN_ENVELOPE_CHOU_4_ROTATED, 8071, 3543 }, { IDS_WIA_PAPER_SIZE_JAPANESE_ENVELOPE_CHOU_4, 3543, 8071 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_2_ROTATED, 6929, 4016 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_2, 4016, 6929 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_1_ROTATED, 6496, 4016 }, { IDS_WIA_PAPER_SIZE_PRC_ENVELOPE_1, 4016, 6496 }, { IDS_WIA_PAPER_SIZE_A6_105_X_148, 4133, 5830 }, { IDS_WIA_PAPER_SIZE_A6_ROTATED, 5827, 4134 }, { IDS_WIA_PAPER_SIZE_A6, 4134, 5827 }, { IDS_WIA_PAPER_SIZE_6_34_ENVELOPE, 3625, 6500 }, { IDS_WIA_PAPER_SIZE_JAPANESE_POSTCARD_ROTATED, 5827, 3937 }, { IDS_WIA_PAPER_SIZE_JAPANESE_POSTCARD, 3937, 5827 } };
static const UINT g_SupportedPaperSizeCount = ARRAYSIZE(g_SupportedPaperSizes);
STDMETHODIMP CWiaDefaultUI::GetPaperSizes( CWiaPaperSize **ppPaperSizes, UINT *pnCount ) { //
// Verify arguments
//
if (!ppPaperSizes || !pnCount) { return E_INVALIDARG; }
//
// Initialize to NULL
//
*ppPaperSizes = NULL; *pnCount = 0;
//
// Allocate the array of paper sizes
//
CWiaPaperSize *pPaperSizes = reinterpret_cast<CWiaPaperSize*>(CoTaskMemAlloc( sizeof(CWiaPaperSize) * g_SupportedPaperSizeCount )); if (pPaperSizes) { //
// Initialize each name, so we can delete them if we encounter an error.
//
for (UINT i=0;i<g_SupportedPaperSizeCount;i++) { pPaperSizes[i].pszName = NULL; } //
// Assume success
//
bool bSucceeded = true;
//
// Loop through the paper size array
//
for (UINT i=0;i<g_SupportedPaperSizeCount && bSucceeded;i++) { //
// Load the name of this paper size
//
CSimpleStringWide strPaperName = CSimpleStringConvert::WideString(CSimpleString(g_SupportedPaperSizes[i].nStringId,g_hInstance)); if (strPaperName.Length()) { //
// Allocate the string to hold the paper size name
//
pPaperSizes[i].pszName = reinterpret_cast<LPWSTR>(CoTaskMemAlloc((strPaperName.Length()+1) * sizeof(WCHAR))); if (pPaperSizes[i].pszName) { //
// Copy over all the paper size values
//
lstrcpyW( pPaperSizes[i].pszName, strPaperName ); pPaperSizes[i].nWidth = g_SupportedPaperSizes[i].nWidth; pPaperSizes[i].nHeight = g_SupportedPaperSizes[i].nHeight; } else { bSucceeded = false; } } else { bSucceeded = false; } }
//
// If we hit some kind of error, free all memory
//
if (!bSucceeded) { UINT nCount = g_SupportedPaperSizeCount; FreePaperSizes( &pPaperSizes, &nCount ); } }
//
// Save the paper size and the array size
//
*ppPaperSizes = pPaperSizes; *pnCount = g_SupportedPaperSizeCount;
//
// Return success if we successfully allocated the paper size array
//
return (*ppPaperSizes && *pnCount) ? S_OK : E_FAIL; }
STDMETHODIMP CWiaDefaultUI::FreePaperSizes( CWiaPaperSize **ppPaperSizes, UINT *pnCount ) { //
// Verify arguments
//
if (!ppPaperSizes || !pnCount) { return E_INVALIDARG; }
//
// Loop and free the strings
//
for (UINT i=0;i<*pnCount;i++) { if ((*ppPaperSizes)[i].pszName) { CoTaskMemFree((*ppPaperSizes)[i].pszName); } }
//
// Free the array
//
CoTaskMemFree(*ppPaperSizes);
//
// 0 everything
//
*ppPaperSizes = NULL; *pnCount = 0; return S_OK; }
|