/*------------------------------------------------------------------ /*------------------------------------------------------------------ //{{NO_DEPENDENCIES}}
DEVCAPS2.C
-- Displays Device Capability Information (Version 2)
(c) Charles Petzold, 1998
------------------------------------------------------------------*/
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc
(HWND, UINT, WPARAM, LPARAM) ;
void DoBasicInfo
(HDC, HDC, int, int) ;
void DoOtherInfo
(HDC, HDC, int, int) ;
void DoBitCodedCaps
(HDC, HDC, int, int, int) ;
typedef struct
{
int iMask ;
TCHAR * szDesc ;
}
BITS ;
#define IDM_DEVMODE
1000
int WINAPI WinMain
(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("DevCaps2
") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW
| CS_VREDRAW
;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL
, IDI_APPLICATION
) ;
wndclass.hCursor = LoadCursor (NULL
, IDC_ARROW
) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH
) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass
(&wndclass))
{
MessageBox
(NULL
, TEXT ("This program requires Windows NT!
"),
szAppName, MB_ICONERROR
) ;
return 0 ;
}
hwnd = CreateWindow
(szAppName, NULL
,
WS_OVERLAPPEDWINDOW
,
CW_USEDEFAULT
, CW_USEDEFAULT
,
CW_USEDEFAULT
, CW_USEDEFAULT
,
NULL
, NULL
, hInstance, NULL
) ;
ShowWindow
(hwnd, iCmdShow) ;
UpdateWindow
(hwnd) ;
while (GetMessage
(&msg, NULL
, 0, 0))
{
TranslateMessage
(&msg) ;
DispatchMessage
(&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc
(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static TCHAR szDevice[32], szWindowText[64] ;
static int cxChar, cyChar, nCurrentDevice = IDM_SCREEN
,
nCurrentInfo = IDM_BASIC
;
static DWORD dwNeeded, dwReturned ;
static PRINTER_INFO_4 * pinfo4 ;
static PRINTER_INFO_5 * pinfo5 ;
DWORD i ;
HDC hdc, hdcInfo ;
HMENU hMenu ;
HANDLE hPrint ;
PAINTSTRUCT ps ;
TEXTMETRIC tm ;
switch (message)
{
case WM_CREATE
:
//获取系统文字宽高
hdc = GetDC
(hwnd) ;
SelectObject
(hdc, GetStockObject
(SYSTEM_FIXED_FONT
)) ;
GetTextMetrics
(hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
ReleaseDC
(hwnd, hdc) ;
// fall through
case WM_SETTINGCHANGE
:
//取得 Device 菜单中激活的下拉式菜单或子菜单的句柄
hMenu = GetSubMenu
(GetMenu (hwnd), 0) ;
/* GetMenuItemCount 返回菜单中条目(菜单项)的数量 */
while (GetMenuItemCount
(hMenu) > 1)
/*DeleteMenu 删除指定的菜单条目
(菜单句柄, 条目在菜单中的位置, wFlags中设置的标志)*/
DeleteMenu
(hMenu, 1, MF_BYPOSITION
) ; //删除screen菜单项之后的所有条目
if (GetVersion
() & 0x80000000
) // Windows 98
{
/* EnumPrinters (枚举本地打印机, 欲对打印机进行枚举的服务器的名字,
欲枚举的结构类型, PRINTER_ENUM_x结构的缓冲区,
缓冲区中的字符数量, 保存请求的缓冲区长度, 保存载入缓冲区的结构数量)*/
EnumPrinters
(PRINTER_ENUM_LOCAL
, NULL
, 5, NULL
,
0, &dwNeeded, &dwReturned) ;
pinfo5 = malloc
(dwNeeded) ;
EnumPrinters
(PRINTER_ENUM_LOCAL
, NULL
, 5, (PBYTE) pinfo5,
dwNeeded, &dwNeeded, &dwReturned) ;
for (i = 0 ; i < dwReturned ; i++)
{
/* 在指定的位置末尾追加一个新菜单项
(将被修改的菜单条句柄, 以16为单位添加垂直分割线, 新菜单项的标识符,新菜单项的内容)*/
AppendMenu
(hMenu, (i+1) % 16 ? 0 : MF_MENUBARBREAK
, i + 1,
pinfo5[i].pPrinterName) ;
}
free
(pinfo5) ;
}
else // Windows NT
{
EnumPrinters
(PRINTER_ENUM_LOCAL
, NULL
, 4, NULL
,
0, &dwNeeded, &dwReturned) ;
pinfo4 = malloc
(dwNeeded) ;
EnumPrinters
(PRINTER_ENUM_LOCAL
, NULL
, 4, (PBYTE) pinfo4,
dwNeeded, &dwNeeded, &dwReturned) ;
for (i = 0 ; i < dwReturned ; i++)
{
AppendMenu
(hMenu, (i+1) % 16 ? 0 : MF_MENUBARBREAK
, i + 1,
pinfo4[i].pPrinterName) ;
}
free
(pinfo4) ;
}
AppendMenu
(hMenu, MF_SEPARATOR
, 0, NULL
) ; //添加一个分割线
AppendMenu
(hMenu, 0, IDM_DEVMODE
, TEXT ("Properties
")) ; //添加打印机对话框菜单项
wParam = IDM_SCREEN
;
// fall through
case WM_COMMAND
:
hMenu = GetMenu
(hwnd) ;
/* || 逻辑或
当选择 screen 或者 打印机 时为真*/
if (LOWORD (wParam) == IDM_SCREEN
||
LOWORD (wParam) < IDM_DEVMODE
)
{
/* 设置当前选择的菜单项标记 */
CheckMenuItem
(hMenu, nCurrentDevice, MF_UNCHECKED
) ;
nCurrentDevice
= LOWORD (wParam) ;
CheckMenuItem
(hMenu, nCurrentDevice, MF_CHECKED
) ;
}
else if (LOWORD (wParam) == IDM_DEVMODE
) //选择 Properties 菜单项时
{
//将nCurrentDevice标识的菜单项的正文字符串拷贝到szDevice缓冲区
GetMenuString
(hMenu, nCurrentDevice, szDevice,
sizeof (szDevice) / sizeof (TCHAR), MF_BYCOMMAND
);
/*打开选择的打印机,并获取打印机的句柄
(要打开的打印机的名字, 保存该打印机的句柄, 保存要载入的打印机信息的结构指针)*/
if (OpenPrinter
(szDevice, &hPrint, NULL
))
{
/*启动打印机属性对话框
(对话框的父窗口, 已打开的打印机的句柄)*/
PrinterProperties
(hwnd, hPrint) ;
ClosePrinter
(hPrint) ; //关闭一个打开的打印机对象
}
}
else //如果选择的菜单项在 Capabilities 中,则仅保存菜单标识和修改选择标记
{
CheckMenuItem
(hMenu, nCurrentInfo, MF_UNCHECKED
) ;
nCurrentInfo = LOWORD (wParam) ;
CheckMenuItem
(hMenu, nCurrentInfo, MF_CHECKED
) ;
}
InvalidateRect
(hwnd, NULL
, TRUE
) ;
return 0 ;
case WM_INITMENUPOPUP
: //当Windows准备显示一个弹出式菜单时
if (lParam == 0) //确定是菜单消息
//如果 Device 中选择的非 screen 则 Properties 有效
EnableMenuItem
(GetMenu
(hwnd), IDM_DEVMODE
,
nCurrentDevice == IDM_SCREEN
? MF_GRAYED
: MF_ENABLED
) ;
return 0 ;
case WM_PAINT
:
//复制字符串
lstrcpy
(szWindowText, TEXT ("Device Capabilities:
")) ;
if (nCurrentDevice == IDM_SCREEN
)
{
lstrcpy
(szDevice, TEXT ("DISPLAY
")) ;
/*为专用设备创建一个信息场景(获取整个屏幕的设备场景)*/
hdcInfo = CreateIC
(szDevice, NULL
, NULL
, NULL
) ;
}
else
{
hMenu = GetMenu
(hwnd) ;
//将nCurrentDevice标识的菜单项的正文字符串拷贝到szDevice缓冲区
GetMenuString
(hMenu, nCurrentDevice, szDevice,
sizeof (szDevice) / sizeof (TCHAR), MF_BYCOMMAND
) ;
/* szDevice 指定了所用专门设备的名称。该名由打印管理器分配显示*/
hdcInfo = CreateIC
(NULL
, szDevice, NULL
, NULL
) ;
}
// 拼接字符串,并显示到窗口标题栏
lstrcat
(szWindowText, szDevice) ;
SetWindowText
(hwnd, szWindowText) ;
hdc = BeginPaint
(hwnd, &ps) ;
SelectObject
(hdc, GetStockObject
(SYSTEM_FIXED_FONT
)) ;
if (hdcInfo)
{
switch (nCurrentInfo)
{
case IDM_BASIC
:
DoBasicInfo
(hdc, hdcInfo, cxChar, cyChar) ;
break ;
case IDM_OTHER
:
DoOtherInfo
(hdc, hdcInfo, cxChar, cyChar) ;
break ;
case IDM_CURVE
:
case IDM_LINE
:
case IDM_POLY
:
case IDM_TEXT
:
DoBitCodedCaps
(hdc, hdcInfo, cxChar, cyChar,
nCurrentInfo - IDM_CURVE
) ;
break ;
}
DeleteDC
(hdcInfo) ;
}
EndPaint
(hwnd, &ps) ;
return 0 ;
case WM_DESTROY
:
PostQuitMessage
(0) ;
return 0 ;
}
return DefWindowProc
(hwnd, message, wParam, lParam) ;
}
void DoBasicInfo
(HDC hdc, HDC hdcInfo, int cxChar, int cyChar)
{
static struct
{
int nIndex ;
TCHAR * szDesc ;
}
info[] =
{
HORZSIZE
, TEXT ("HORZSIZE Width in millimeters:
"),
VERTSIZE
, TEXT ("VERTSIZE Height in millimeters:
"),
HORZRES
, TEXT ("HORZRES Width in pixels:
"),
VERTRES
, TEXT ("VERTRES Height in raster lines:
"),
BITSPIXEL
, TEXT ("BITSPIXEL Color bits per pixel:
"),
PLANES
, TEXT ("PLANES Number of color planes:
"),
NUMBRUSHES
, TEXT ("NUMBRUSHES Number of device brushes:
"),
NUMPENS
, TEXT ("NUMPENS Number of device pens:
"),
NUMMARKERS
, TEXT ("NUMMARKERS Number of device markers:
"),
NUMFONTS
, TEXT ("NUMFONTS Number of device fonts:
"),
NUMCOLORS
, TEXT ("NUMCOLORS Number of device colors:
"),
PDEVICESIZE
, TEXT ("PDEVICESIZE Size of device structure:
"),
ASPECTX
, TEXT ("ASPECTX Relative width of pixel:
"),
ASPECTY
, TEXT ("ASPECTY Relative height of pixel:
"),
ASPECTXY
, TEXT ("ASPECTXY Relative diagonal of pixel:
"),
LOGPIXELSX
, TEXT ("LOGPIXELSX Horizontal dots per inch:
"),
LOGPIXELSY
, TEXT ("LOGPIXELSY Vertical dots per inch:
"),
SIZEPALETTE
, TEXT ("SIZEPALETTE Number of palette entries:
"),
NUMRESERVED
, TEXT ("NUMRESERVED Reserved palette entries:
"),
COLORRES
, TEXT ("COLORRES Actual color resolution:
"),
PHYSICALWIDTH
, TEXT ("PHYSICALWIDTH Printer page pixel width:
"),
PHYSICALHEIGHT
, TEXT ("PHYSICALHEIGHT Printer page pixel height:
"),
PHYSICALOFFSETX
, TEXT ("PHYSICALOFFSETX Printer page x offset:
"),
PHYSICALOFFSETY
, TEXT ("PHYSICALOFFSETY Printer page y offset:
")
} ;
int i ;
TCHAR szBuffer[80] ;
for (i = 0 ; i < sizeof (info) / sizeof (info[0]) ; i++)
TextOut
(hdc, cxChar, (i + 1) * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("%-45s%8d
"), info[i].szDesc,
GetDeviceCaps
(hdcInfo, info[i].nIndex))) ;
}
void DoOtherInfo
(HDC hdc, HDC hdcInfo, int cxChar, int cyChar)
{
static BITS clip[] =
{
CP_RECTANGLE
, TEXT ("CP_RECTANGLE Can Clip To Rectangle:
")
} ;
static BITS raster[] =
{
RC_BITBLT
, TEXT ("RC_BITBLT Capable of simple BitBlt:
"),
RC_BANDING
, TEXT ("RC_BANDING Requires banding support:
"),
RC_SCALING
, TEXT ("RC_SCALING Requires scaling support:
"),
RC_BITMAP64
, TEXT ("RC_BITMAP64 Supports bitmaps >64K:
"),
RC_GDI20_OUTPUT
, TEXT ("RC_GDI20_OUTPUT Has 2.0 output calls:
"),
RC_DI_BITMAP
, TEXT ("RC_DI_BITMAP Supports DIB to memory:
"),
RC_PALETTE
, TEXT ("RC_PALETTE Supports a palette:
"),
RC_DIBTODEV
, TEXT ("RC_DIBTODEV Supports bitmap conversion:
"),
RC_BIGFONT
, TEXT ("RC_BIGFONT Supports fonts >64K:
"),
RC_STRETCHBLT
, TEXT ("RC_STRETCHBLT Supports StretchBlt:
"),
RC_FLOODFILL
, TEXT ("RC_FLOODFILL Supports FloodFill:
"),
RC_STRETCHDIB
, TEXT ("RC_STRETCHDIB Supports StretchDIBits:
")
} ;
static TCHAR * szTech[] = { TEXT ("DT_PLOTTER (Vector plotter)
"),
TEXT ("DT_RASDISPLAY (Raster display)
"),
TEXT ("DT_RASPRINTER (Raster printer)
"),
TEXT ("DT_RASCAMERA (Raster camera)
"),
TEXT ("DT_CHARSTREAM (Character stream)
"),
TEXT ("DT_METAFILE (Metafile)
"),
TEXT ("DT_DISPFILE (Display file)
") } ;
int i ;
TCHAR szBuffer[80] ;
TextOut
(hdc, cxChar, cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("%-24s%04XH
"), TEXT ("DRIVERVERSION
:"),
GetDeviceCaps
(hdcInfo, DRIVERVERSION
))) ;
TextOut
(hdc, cxChar, 2 * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("%-24s%-40s
"), TEXT ("TECHNOLOGY
:"),
szTech[GetDeviceCaps
(hdcInfo, TECHNOLOGY
)])) ;
TextOut
(hdc, cxChar, 4 * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("CLIPCAPS (Clipping capabilities)
"))) ;
for (i = 0 ; i < sizeof (clip) / sizeof (clip[0]) ; i++)
TextOut
(hdc, 9 * cxChar, (i + 6) * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("%-45s %3s
"), clip[i].szDesc,
GetDeviceCaps
(hdcInfo, CLIPCAPS
) & clip[i].iMask ?
TEXT ("Yes
") : TEXT ("No
"))) ;
TextOut
(hdc, cxChar, 8 * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("RASTERCAPS (Raster capabilities)
"))) ;
for (i = 0 ; i < sizeof (raster) / sizeof (raster[0]) ; i++)
TextOut
(hdc, 9 * cxChar, (i + 10) * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("%-45s %3s
"), raster[i].szDesc,
GetDeviceCaps
(hdcInfo, RASTERCAPS
) & raster[i].iMask ?
TEXT ("Yes
") : TEXT ("No
"))) ;
}
void DoBitCodedCaps
(HDC hdc, HDC hdcInfo, int cxChar, int cyChar, int iType)
{
static BITS curves[] =
{
CC_CIRCLES
, TEXT ("CC_CIRCLES Can do circles:
"),
CC_PIE
, TEXT ("CC_PIE Can do pie wedges:
"),
CC_CHORD
, TEXT ("CC_CHORD Can do chord arcs:
"),
CC_ELLIPSES
, TEXT ("CC_ELLIPSES Can do ellipses:
"),
CC_WIDE
, TEXT ("CC_WIDE Can do wide borders:
"),
CC_STYLED
, TEXT ("CC_STYLED Can do styled borders:
"),
CC_WIDESTYLED
, TEXT ("CC_WIDESTYLED Can do wide and styled borders:
"),
CC_INTERIORS
, TEXT ("CC_INTERIORS Can do interiors:
")
} ;
static BITS lines[] =
{
LC_POLYLINE
, TEXT ("LC_POLYLINE Can do polyline:
"),
LC_MARKER
, TEXT ("LC_MARKER Can do markers:
"),
LC_POLYMARKER
, TEXT ("LC_POLYMARKER Can do polymarkers
"),
LC_WIDE
, TEXT ("LC_WIDE Can do wide lines:
"),
LC_STYLED
, TEXT ("LC_STYLED Can do styled lines:
"),
LC_WIDESTYLED
, TEXT ("LC_WIDESTYLED Can do wide and styled lines:
"),
LC_INTERIORS
, TEXT ("LC_INTERIORS Can do interiors:
")
} ;
static BITS poly[] =
{
PC_POLYGON
, TEXT ("PC_POLYGON Can do alternate fill polygon:
"),
PC_RECTANGLE
, TEXT ("PC_RECTANGLE Can do rectangle:
"),
PC_WINDPOLYGON
, TEXT ("PC_WINDPOLYGON Can do winding number fill polygon:
"),
PC_SCANLINE
, TEXT ("PC_SCANLINE Can do scanlines:
"),
PC_WIDE
, TEXT ("PC_WIDE Can do wide borders:
"),
PC_STYLED
, TEXT ("PC_STYLED Can do styled borders:
"),
PC_WIDESTYLED
, TEXT ("PC_WIDESTYLED Can do wide and styled borders:
"),
PC_INTERIORS
, TEXT ("PC_INTERIORS Can do interiors:
")
} ;
static BITS text[] =
{
TC_OP_CHARACTER
,
TEXT ("TC_OP_CHARACTER Can do character output precision:
"),
TC_OP_STROKE
,
TEXT ("TC_OP_STROKE Can do stroke output precision:
"),
TC_CP_STROKE
,
TEXT ("TC_CP_STROKE Can do stroke clip precision:
"),
TC_CR_90
,
TEXT ("TC_CP_90 Can do 90 degree character rotation:
"),
TC_CR_ANY
,
TEXT ("TC_CR_ANY Can do any character rotation:
"),
TC_SF_X_YINDEP
,
TEXT ("TC_SF_X_YINDEP Can do scaling independent of X and Y:
"),
TC_SA_DOUBLE
,
TEXT ("TC_SA_DOUBLE Can do doubled character for scaling:
"),
TC_SA_INTEGER
,
TEXT ("TC_SA_INTEGER Can do integer multiples for scaling:
"),
TC_SA_CONTIN
,
TEXT ("TC_SA_CONTIN Can do any multiples for exact scaling:
"),
TC_EA_DOUBLE
,
TEXT ("TC_EA_DOUBLE Can do double weight characters:
"),
TC_IA_ABLE
, TEXT ("TC_IA_ABLE Can do italicizing:
"),
TC_UA_ABLE
, TEXT ("TC_UA_ABLE Can do underlining:
"),
TC_SO_ABLE
, TEXT ("TC_SO_ABLE Can do strikeouts:
"),
TC_RA_ABLE
, TEXT ("TC_RA_ABLE Can do raster fonts:
"),
TC_VA_ABLE
, TEXT ("TC_VA_ABLE Can do vector fonts:
")
} ;
static struct
{
int iIndex ;
TCHAR * szTitle ;
BITS (*pbits)[] ; //名为pbits的指向BITS结构数组的指针
int iSize ;
}
bitinfo[] =
{
CURVECAPS
, TEXT ("CURVCAPS (Curve Capabilities)
"),
//强制类型转换 curves 为一个指向BITS结构数组的指针
(BITS (*)[]) curves, sizeof (curves) / sizeof (curves[0]),
LINECAPS
, TEXT ("LINECAPS (Line Capabilities)
"),
(BITS (*)[]) lines, sizeof (lines) / sizeof (lines[0]),
POLYGONALCAPS
, TEXT ("POLYGONALCAPS (Polygonal Capabilities)
"),
(BITS (*)[]) poly, sizeof (poly) / sizeof (poly[0]),
TEXTCAPS
, TEXT ("TEXTCAPS (Text Capabilities)
"),
(BITS (*)[]) text, sizeof (text) / sizeof (text[0])
} ;
static TCHAR szBuffer[80] ;
// 定义 pbits 是指向 BITS 结构数组的指针,赋值后变为指向 bitinfo[iType].pbits 指针的指针
BITS (*pbits)[] = bitinfo[iType].pbits ;
//返回设备所支持的特性,由多个旗标组合而成
int i, iDevCaps = GetDeviceCaps
(hdcInfo, bitinfo[iType].iIndex) ;
TextOut
(hdc, cxChar, cyChar, bitinfo[iType].szTitle,
lstrlen
(bitinfo[iType].szTitle)) ;
for (i = 0 ; i < bitinfo[iType].iSize ; i++)
TextOut
(hdc, cxChar, (i + 3) * cyChar, szBuffer,
wsprintf
(szBuffer, TEXT ("%-55s %3s
"), (*pbits)[i].szDesc,
//与 支持 旗标相与,判断设备是否支持该特性
iDevCaps & (*pbits)[i].iMask ? TEXT ("Yes
") : TEXT ("No
")));
}
RESOURCE.H
------------------------------------------------------------------*/
// Microsoft Developer Studio generated include file.
// Used by DevCaps2.rc
//
#define IDM_SCREEN 40001
#define IDM_BASIC 40002
#define IDM_OTHER 40003
#define IDM_CURVE 40004
#define IDM_LINE 40005
#define IDM_POLY 40006
#define IDM_TEXT 40007
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40008
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
/*------------------------------------------------------------------
DevCaps2.rc
------------------------------------------------------------------*/
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h/0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""/r/n"
"/0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"/r/n"
"/0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
DEVCAPS2 MENU DISCARDABLE
BEGIN
POPUP "&Device"
BEGIN
MENUITEM "&Screen", IDM_SCREEN, CHECKED
END
POPUP "&Capabilities"
BEGIN
MENUITEM "&Basic Information", IDM_BASIC
MENUITEM "&Other Information", IDM_OTHER
MENUITEM "&Curve Capabilities", IDM_CURVE
MENUITEM "&Line Capabilities", IDM_LINE
MENUITEM "&Polygonal Capabilities", IDM_POLY
MENUITEM "&Text Capabilities", IDM_TEXT
END
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
DevCaps2是一款用于展示设备能力信息的应用程序,包括基本设备信息、其他详细信息、曲线、线条、多边形和文本相关的能力。通过设备菜单选择不同的设备类型和信息类别,用户可以查看设备的尺寸、分辨率、颜色深度、设备类型等关键参数,以及裁剪、矢量和栅格渲染能力。此外,应用还提供了设备曲线、线、多边形和文本的编码能力详情。
3478

被折叠的 条评论
为什么被折叠?



