/*------------------------------------------------------------------
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
------------------------------------------------------------------*/
//{{NO_DEPENDENCIES}}
// 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