WindowsXP/windows/advcore/rcml/rcmlgen/controldumpers.cpp
2025-04-27 07:49:33 -04:00

1728 lines
58 KiB
C++

// ResControl.cpp: implementation of the CResControl class.
//
// http://msdn.microsoft.com/workshop/author/css/reference/attributes.asp
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ResControl.h"
#include "resfile.h"
#include "debug.h"
//
// Control Style.
// CS( ES_WANTRETURN, TEXT("WANTRETURN"), m_WantReturn, FALSE )
// -> WIN32:ELEMENT WANTRETURN="YES"
//
#define CONTROLSTYLE(p,id, member, def) if( ((dwRemainingStyles & p)==p) != def ) { wsprintf(m_szDumpBuffer, TEXT("%s=\"%s\" "), id, (dwRemainingStyles & p)?TEXT("YES"):TEXT("NO") ); AddControl(); } m_dumpedStyle |= p;
#define STYLEEX(p,id, member, def) if( ((dwRemainingStyles & p)==p) != def ) { wsprintf(m_szDumpBuffer, TEXT("%s=\"%s\" "), id, (dwRemainingStyles & p)?TEXT("YES"):TEXT("NO") ); AddWin32Style(); } m_dumpedStyleEx|=p;
#define STYLE(p,id, member, def) if( ((dwRemainingStyles & p)==p) != def ) { wsprintf(m_szDumpBuffer, TEXT("%s=\"%s\" "), id, (dwRemainingStyles & p)?TEXT("YES"):TEXT("NO") ); AddWin32Style(); } m_dumpedStyle |= p;
#define CONTROL(p,id, member, def) if( ((dwRemainingStyles & p)==p) != def ) { wsprintf(m_szDumpBuffer, TEXT("%s=\"%s\" "), id, (dwRemainingStyles & p)?TEXT("YES"):TEXT("NO") ); Add(); } m_dumpedStyle |= p;
CResControl::SHORTHAND CResControl::pShorthand[]=
{
// BUTTONS, low 4 bits are an enumeration:
// BS_PUSHBUTTON 0x00000000L
// BS_DEFPUSHBUTTON 0x00000001L
// BS_CHECKBOX 0x00000002L
// BS_AUTOCHECKBOX 0x00000003L
// BS_RADIOBUTTON 0x00000004L
// BS_3STATE 0x00000005L
// BS_AUTO3STATE 0x00000006L
// BS_GROUPBOX 0x00000007L
// BS_USERBUTTON 0x00000008L
// BS_AUTORADIOBUTTON 0x00000009L
// BS_OWNERDRAW 0x0000000BL
{ TEXT("BUTTON"), 0xf, BS_PUSHBUTTON, 0,0, CResControl::DumpPushButton , 50, 14 }, // Button
{ TEXT("BUTTON"), 0xf, BS_DEFPUSHBUTTON, 0,0, CResControl::DumpPushButton , 50, 14 }, // Defpushbutton
{ TEXT("BUTTON"), 0xf, BS_CHECKBOX, 0,0, CResControl::DumpCheckBox , 0,0 }, // GroupBox
{ TEXT("BUTTON"), 0xf, BS_AUTOCHECKBOX, 0,0, CResControl::DumpCheckBox , 0, 10 }, // AutoCheckBox
{ TEXT("BUTTON"), 0xf, BS_RADIOBUTTON, 0,0, CResControl::DumpRadioButton , 0, 10 }, // Radiobutton
{ TEXT("BUTTON"), 0xf, BS_3STATE, 0,0, CResControl::DumpCheckBox , 0, 10 }, // Radiobutton
{ TEXT("BUTTON"), 0xf, BS_AUTO3STATE, 0,0, CResControl::DumpCheckBox , 0, 10 }, // Radiobutton
{ TEXT("BUTTON"), 0xf, BS_GROUPBOX, 0,0, CResControl::DumpGroupBox , 0,0 }, // GroupBox
{ TEXT("BUTTON"), 0xf, BS_USERBUTTON, 0,0, CResControl::DumpPushButton , 0, 10 }, // Radiobutton
{ TEXT("BUTTON"), 0xf, BS_AUTORADIOBUTTON, 0,0, CResControl::DumpRadioButton , 0, 10 }, // Radiobutton
{ TEXT("BUTTON"), 0xf, BS_OWNERDRAW, 0,0, CResControl::DumpPushButton , 0, 10 }, // Radiobutton
{ TEXT("BUTTON"), 0x0, 0, 0,0, CResControl::DumpButton , 0,0 }, // Any other button.
// WS_BORDER = 0x?? 8?
// ES_LEFT - all edit controls seem to be the same.
{ TEXT("EDIT"), 0, 0, 0,0, CResControl::DumpDefEdit ,0,14}, // Edit
// SS_LEFT
/*
{ TEXT("STATIC"), SS_TYPEMASK, SS_LEFT, 0,0, CResControl::DumpDefStatic ,0,8 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_CENTER, 0,0, CResControl::DumpDefStatic ,0,8 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_RIGHT, 0,0, CResControl::DumpDefStatic ,0,8 }, // Static
*/
// Images
{ TEXT("STATIC"), SS_TYPEMASK, SS_ICON, 0,0, CResControl::DumpImage ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_BITMAP, 0,0, CResControl::DumpImage ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ENHMETAFILE, 0,0, CResControl::DumpImage ,0,0 }, // Static
// Rects
{ TEXT("STATIC"), SS_TYPEMASK, SS_BLACKRECT, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_GRAYRECT, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_WHITERECT, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_BLACKFRAME, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_GRAYFRAME, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_WHITEFRAME, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ETCHEDHORZ, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ETCHEDVERT, 0,0, CResControl::DumpRect ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ETCHEDFRAME, 0,0, CResControl::DumpRect ,0,0 }, // Static
/*
{ TEXT("STATIC"), SS_TYPEMASK, SS_USERITEM, 0,0, CResControl::DumpDefStatic ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_SIMPLE, 0,0, CResControl::DumpDefStatic ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_LEFTNOWORDWRAP, 0,0, CResControl::DumpDefStatic ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_OWNERDRAW, 0,0, CResControl::DumpDefStatic ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ETCHEDHORZ, 0,0, CResControl::DumpImage ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ETCHEDVERT, 0,0, CResControl::DumpImage ,0,0 }, // Static
{ TEXT("STATIC"), SS_TYPEMASK, SS_ETCHEDFRAME, 0,0, CResControl::DumpImage ,0,0 }, // Static
*/
// All others.
{ TEXT("STATIC"), 0x0, 0, 0,0, CResControl::DumpDefStatic , 0,8 },
{ TEXT("SCROLLBAR"), 0x0, 0, 0,0, CResControl::DumpScrollBar , 11,10 },
//
// COMBOBOX
// CBS_SIMPLE CBS_DROPDOWN CBS_DROPDOWNLIST
//
{ TEXT("COMBOBOX"), 0xf, CBS_SIMPLE , 0,0, CResControl::DumpComboBox ,0,0 },
{ TEXT("COMBOBOX"), 0xf, CBS_DROPDOWN , 0,0, CResControl::DumpComboBox ,0,0 },
{ TEXT("COMBOBOX"), 0xf, CBS_DROPDOWNLIST , 0,0, CResControl::DumpComboBox ,0,0 },
//
// LISTBOX
// LBS_
//
{ TEXT("LISTBOX"), 0, 0, 0,0, CResControl::DumpListBox ,0,0 },
/////////////// C O M M O N C O N T R O L S /////////////
/////////////// C O M M O N C O N T R O L S /////////////
/////////////// C O M M O N C O N T R O L S /////////////
//
// Slider
//
{ TRACKBAR_CLASS, 0, 0, 0,0, CResControl::DumpSlider ,0,0 },
//
// Spinner
//
{ UPDOWN_CLASS, 0, 0, 0,0, CResControl::DumpSpinner ,11,14 },
//
// Progress
//
{ PROGRESS_CLASS, 0, 0, 0,0, CResControl::DumpProgress ,0,0 },
//
// ListView
//
{ WC_LISTVIEW, 0, 0, 0,0, CResControl::DumpListView ,0,0 },
//
// TreeView
//
{ WC_TREEVIEW, 0, 0, 0,0, CResControl::DumpTreeView ,0,0 },
//
// Pager
//
{ WC_PAGESCROLLER, 0, 0, 0,0, CResControl::DumpPager ,0,0 },
//
// HEADER
//
{ WC_HEADER, 0, 0, 0,0, CResControl::DumpHeader ,0,0 },
//
// TAB
//
{ WC_TABCONTROL, 0, 0, 0,0, CResControl::DumpTab ,0,0 },
//
//
{ ANIMATE_CLASS, 0,0, 0,0, CResControl::DumpAnimation, 0,0 },
//
{ NULL, 0,0,0,0}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// B U T T O N //////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Catchall - shouldn't really ever be called.
//
void CResControl::DumpButton(LPTSTR szBuffer, LPCTSTR pszTitle)
{
// We don't know this button type.
wsprintf(szBuffer,TEXT("STYLE=\"0x%02x\" "), GetControlStyle() & 0xf );
AddWin32Style();
DumpDefButtonRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpText();
DumpIDDefMinusOne();
Emit(TEXT("BUTTON"));
}
//
// Deals with :
// BS_PUSHBUTTON BS_DEFPUSHBUTTON BS_USERBUTTON BS_OWNERDRAW
//
void CResControl::DumpPushButton(LPTSTR szBuffer, LPCTSTR pszTitle)
{
// Push Button.
switch( GetControlStyle() & 0xf )
{
case BS_PUSHBUTTON :
case BS_CHECKBOX :
case BS_AUTOCHECKBOX :
case BS_RADIOBUTTON :
case BS_3STATE :
case BS_AUTO3STATE :
case BS_GROUPBOX :
case BS_USERBUTTON :
case BS_AUTORADIOBUTTON:
case BS_OWNERDRAW :
// BUGBUG - shouldn't hit these
break;
}
switch( GetControlStyle() & 0xf )
{
case BS_PUSHBUTTON :
break;
case BS_DEFPUSHBUTTON :
AddControl(TEXT("DEFPUSH=\"YES\" "));
break;
case BS_USERBUTTON :
AddControl(TEXT("USERBUTTON=\"YES\" "));
break;
case BS_OWNERDRAW :
AddControl(TEXT("OWNERDRAW=\"YES\" "));
break;
}
m_dumpedStyle |= 0xf; // BS_PUSHBUTTON | BS_DEFPUSHBUTTON | BS_USERBUTTON | BS_OWNERDRAW;
DumpDefButtonRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpText();
if( GetCicero() )
{
LPWSTR pszShortButtonText=FindNiceText( GetRawTitle() );
TCHAR szTip[1024];
wsprintf(szTip,TEXT("Try saying '%s'"), pszShortButtonText );
BOOL bAccuracy=FALSE;
BOOL bTip=TRUE;
if((lstrcmpi(pszShortButtonText, TEXT("OK")) == 0 )||
(lstrcmpi(pszShortButtonText, TEXT("Cancel")) == 0 ) ||
(lstrcmpi(pszShortButtonText, TEXT("Apply")) == 0 ) )
bAccuracy=TRUE;
if((lstrcmpi(pszShortButtonText, TEXT("OK")) == 0 )||
(lstrcmpi(pszShortButtonText, TEXT("Cancel")) == 0 ) )
bTip=FALSE;
if(bTip)
wsprintf(szBuffer,TEXT(":CMD TEXT=\"%s%s\" TOOLTIP=\"%s\" "), bAccuracy?TEXT("+"):TEXT(""),
pszShortButtonText,
szTip);
else
wsprintf(szBuffer,TEXT(":CMD TEXT=\"%s%s\" "), bAccuracy?TEXT("+"):TEXT(""),
pszShortButtonText);
AddCicero(szBuffer);
delete pszShortButtonText;
}
DumpIDDefMinusOne();
Emit(TEXT("BUTTON"));
}
//
// BS_RADIOBUTTON BS_AUTORADIOBUTTON
// AUTO is WIN32:RADIOBUTTON\@AUTO
//
void CResControl::DumpRadioButton(LPTSTR szBuffer, LPCTSTR pszTitle)
{
// RADIOBUTTON
switch( GetControlStyle() & 0xf )
{
case BS_RADIOBUTTON :
AddControl(TEXT("AUTO=\"NO\" "));
break;
case BS_AUTORADIOBUTTON :
// Add(TEXT("AUTO=\"YES\" ")); Default
break;
}
m_dumpedStyle |= 0xf; // BS_PUSHBUTTON | BS_DEFPUSHBUTTON | BS_USERBUTTON | BS_OWNERDRAW;
// Defaults
DumpDefButtonRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpID();
DumpText();
if( GetCicero() )
{
LPWSTR pszShortButtonText=FindNiceText( GetRawTitle() );
wsprintf(szBuffer,TEXT(":CMD TEXT=\"%s\" "), pszShortButtonText );
AddCicero(szBuffer);
delete pszShortButtonText;
}
Emit(TEXT("RADIOBUTTON"));
}
//
// BS_CHECKBOX BS_AUTOCHECKBOX BS_3STATE BS_AUTO3STATE
//
// AUTO nature is WIN32:CHECKBOX\@AUTO
// TRISTATE is CHECKBOX\@TRISTATE
//
void CResControl::DumpCheckBox(LPTSTR szBuffer, LPCTSTR pszTitle)
{
// CHECKBOX
// Defaults
switch( GetControlStyle() & 0xf )
{
case BS_CHECKBOX :
AddControl(TEXT("AUTO=\"NO\" "));
break;
case BS_AUTOCHECKBOX :
// Add(TEXT("AUTO=\"YES\" ")); Default
break;
case BS_3STATE :
Add(TEXT("TRISTATE=\"YES\" "));
break;
case BS_AUTO3STATE :
AddControl(TEXT("AUTO=\"YES\" "));
Add(TEXT("TRISTATE=\"YES\" " ));
break;
}
m_dumpedStyle |= 0xf; // BS_PUSHBUTTON | BS_DEFPUSHBUTTON | BS_USERBUTTON | BS_OWNERDRAW;
DumpDefButtonRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpID();
DumpText();
if( GetCicero() )
{
LPWSTR pszShortButtonText=FindNiceText( GetRawTitle() );
TCHAR szTip[1024];
wsprintf(szTip,TEXT("Try saying 'Do %s' or 'Toggle %s'"), pszShortButtonText, pszShortButtonText );
wsprintf(szBuffer,TEXT(":CMD TEXT=\"%s\" TOOLTIP=\"%s\" "), pszShortButtonText, szTip );
AddCicero(szBuffer);
wsprintf(szBuffer,TEXT("<CICERO:FAILURE TEXT=\"Cannot check %s\" />"), pszShortButtonText );
m_pCicero->AllocAddChild( szBuffer);
delete pszShortButtonText;
}
Emit(TEXT("CHECKBOX"));
}
void CResControl::DumpGroupBox(LPTSTR szBuffer, LPCTSTR pszTitle)
{
// GROUPBOX
m_dumpedStyle |= 0xf; // BS_PUSHBUTTON | BS_DEFPUSHBUTTON | BS_USERBUTTON | BS_OWNERDRAW;
DumpDefButtonRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpText();
DumpIDDefMinusOne();
Emit(TEXT("GROUPBOX"));
}
//
// HEIGHT : defaults to 14
// PASSWORD
// CLASSIFICATION : UPPERCASE, LOWERCASE, NUMBER, DATE, TIME, FILENAME, URL, EMAILADDRESS
// ES_PASSWORD
//
// ES_LEFT 0x0000L * // STYLE\@TEXT-ALIGN
// ES_CENTER 0x0001L * // STYLE\@TEXT-ALIGN
// ES_RIGHT 0x0002L * // STYLE\@TEXT-ALIGN
// ES_MULTILINE 0x0004L * // WIN32:EDIT MULTILINE="YES"
// ES_UPPERCASE 0x0008L * // STYLE\@text-transform=uppercase
// ES_LOWERCASE 0x0010L * // STYLE\@text-transform=lowercase
// ES_PASSWORD 0x0020L * // CONTENT="PASSWORD"
// ES_AUTOVSCROLL 0x0040L * // STYLE\overflow-x="auto"
// ES_AUTOHSCROLL 0x0080L * // STYLE\overflow-y="auto"
// ES_NOHIDESEL 0x0100L * // WIN32:EDIT\NOHIDESEL
// ES_OEMCONVERT 0x0400L * // WIN32:EDIT\OEMCONVERT
// ES_READONLY 0x0800L * // READONLY="YES"
// ES_WANTRETURN 0x1000L * // WIN32:EDIT\WANTRETURN
// ES_NUMBER 0x2000L * // CONTENT="NUMBER"
// SETLENGTH // MAXLENGTH
void CResControl::DumpDefEdit(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
switch ( dwRemainingStyles & (ES_CENTER | ES_RIGHT | ES_LEFT ) )
{
case ES_CENTER:
AddStyle( TEXT("TEXT-ALIGN=\"CENTER\" ") );
break;
case ES_RIGHT:
AddStyle( TEXT("TEXT-ALIGN=\"RIGHT\" ") );
break;
default:
// AddStyle( TEXT("TEXT-ALIGN=\"LEFT\" "); Default
break;
}
m_dumpedStyle |= (ES_CENTER | ES_RIGHT | ES_LEFT );
CONTROLSTYLE( ES_MULTILINE, TEXT("MULTILINE"), m_MultiLine, FALSE );
switch( dwRemainingStyles & (ES_UPPERCASE | ES_LOWERCASE ) )
{
case ES_UPPERCASE:
AddStyle( TEXT("TEXT-TRANSFORM=\"UPPERCASE\" "));
break;
case ES_LOWERCASE:
AddStyle( TEXT("TEXT-TRANSFORM=\"LOWERCASE\" "));
break;
default:
//
break;
}
m_dumpedStyle |= (ES_UPPERCASE | ES_LOWERCASE );
if( dwRemainingStyles & ES_PASSWORD )
Add( TEXT("CONTENT=\"PASSWORD\" "));
m_dumpedStyle |=ES_PASSWORD;
if( !( dwRemainingStyles & ES_AUTOHSCROLL ) )
AddStyle( TEXT("OVERFLOW-X=\"VISIBLE\" ")); // can only type as big as the control
m_dumpedStyle |=ES_AUTOHSCROLL;
if( ( dwRemainingStyles & ES_AUTOVSCROLL ) )
AddStyle( TEXT("OVERFLOW-Y=\"AUTO\" "));
m_dumpedStyle |=ES_AUTOVSCROLL;
CONTROLSTYLE( ES_NOHIDESEL, TEXT("NOHIDESEL"), m_NoHideSel, FALSE );
CONTROLSTYLE( ES_OEMCONVERT, TEXT("OEMCONVERT"), m_OemConvert, FALSE );
CONTROL( ES_READONLY, TEXT("READONLY"), m_ReadOnly, FALSE );
CONTROLSTYLE( ES_WANTRETURN, TEXT("WANTRETURN"), m_WantReturn, FALSE );
if(dwRemainingStyles & ES_NUMBER)
Add( TEXT("CONTENT=\"NUMBER\" "));
m_dumpedStyle |= ES_NUMBER;
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpID();
DumpText();
DumpLocation();
if( GetCicero() )
{
LPWSTR pszShortButtonText=FindNiceText( GetRawTitle() );
TCHAR szTip[1024];
wsprintf(szTip,TEXT("Try saying '%s'"), pszShortButtonText );
BOOL bAccuracy=FALSE;
BOOL bTip=TRUE;
wsprintf(szBuffer,TEXT(":CMD "), bAccuracy?TEXT("+"):TEXT(""),
pszShortButtonText,
szTip);
AddCicero(szBuffer);
delete pszShortButtonText;
}
Emit(TEXT("EDIT"));
}
//////////////////////////////////////////////////////////////////////////////////////////
//
// http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/LABEL.asp
// Enumeration
// SS_LEFT 0x0000L S // STYLE\@TEXT-ALIGN
// SS_CENTER 0x0001L S // STYLE\@TEXT-ALIGN
// SS_RIGHT 0x0002L S // STYLE\@TEXT-ALIGN
// SS_ICON 0x0003L // IMAGE
// SS_BLACKRECT 0x0004L C // RECT\WIN32:STATIC\@TYPE="BLACKRECT"
// SS_GRAYRECT 0x0005L C // RECT\WIN32:STATIC\@TYPE="GRAYRECT"
// SS_WHITERECT 0x0006L C // RECT\WIN32:STATIC\@TYPE="WHITERECT"
// SS_BLACKFRAME 0x0007L C // RECT\WIN32:STATIC\@TYPE="BLACKFRAME"
// SS_GRAYFRAME 0x0008L C // RECT\WIN32:STATIC\@TYPE="GRAYFRAME"
// SS_WHITEFRAME 0x0009L C // RECT\WIN32:STATIC\@TYPE="WHITEFRAME"
// SS_USERITEM 0x000AL // ??
// SS_SIMPLE 0x000BL C // WIN32:STATIC\SIMPLE
// SS_LEFTNOWORDWRAP 0x000CL C // WIN32:STATIC\@LEFTNOWORDWRAP
// SS_OWNERDRAW 0x000DL // WIN32:STATIC\OWNERDRAW
// SS_BITMAP 0x000EL // IMAGE
// SS_ENHMETAFILE 0x000FL // IMAGE
// SS_ETCHEDHORZ 0x0010L // RECT\WIN32:STATIC\@TYPE="ETCHEDHORZ"
// SS_ETCHEDVERT 0x0011L // RECT\WIN32:STATIC\@TYPE="ETCHEDVERT"
// SS_ETCHEDFRAME 0x0012L // RECT\WIN32:STATIC\@TYPE="ETCHEDFRAME"
// SS_TYPEMASK 0x0000001FL
// End enumeration.
// http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/IMG.asp
// FLAGS - can't find much overlap with HTML.
// SS_NOPREFIX 0x00000080L // WIN32:STATIC\@NOPREFIX=NO /* Don't do "&" character translation */
// SS_NOTIFY 0x00000100L // WIN32:STATIC\NOTIFY
// SS_CENTERIMAGE 0x00000200L // WIN32:STATIC\CENTERIMAGE
// SS_RIGHTJUST 0x00000400L // WIN32:STATIC\@RIGHTJUST
// SS_REALSIZEIMAGE 0x00000800L // WIN32:STATIC\@REALSIZEIMAGE
// SS_SUNKEN 0x00001000L // WIN32:STATIC\@SUNKEN
// Enumeration
// SS_ENDELLIPSIS 0x00004000L // ELIPSIS="END"
// SS_PATHELLIPSIS 0x00008000L // ELIPSIS="PATH"
// SS_WORDELLIPSIS 0x0000C000L // ELIPSIS="WORD"
// SS_ELLIPSISMASK 0x0000C000L
//
//
//////////////////////////////////////////////////////////////////////////////////////////
void CResControl::DumpDefStatic(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
switch ( dwRemainingStyles & SS_TYPEMASK )
{
case SS_LEFT:
default:
// AddStyle( TEXT("TEXT-ALIGN=\"LEFT\" ") );
break;
case SS_CENTER:
AddStyle( TEXT("TEXT-ALIGN=\"CENTER\" ") );
break;
case SS_RIGHT:
AddStyle( TEXT("TEXT-ALIGN=\"RIGHT\" ") );
break;
case SS_USERITEM:
AddStyle( TEXT("TEXT-ALIGN=\"CENTER\" ") );
break;
case SS_SIMPLE:
AddControl( TEXT("SIMPLE=\"YES\" "));
break;
case SS_LEFTNOWORDWRAP:
AddControl( TEXT("LEFTNOWORDWRAP=\"YES\" "));
break;
case SS_OWNERDRAW:
AddControl( TEXT("OWNERDRAW=\"YES\" "));
break;
}
m_dumpedStyle |= SS_TYPEMASK;
DumpDefStaticRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpText();
DumpIDDefMinusOne();
Emit(TEXT("LABEL"));
}
//
// Rectangle (the background for an image?)
//
void CResControl::DumpRect(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
switch ( dwRemainingStyles & SS_TYPEMASK )
{
default:
case SS_BLACKRECT:
AddControl( TEXT("TYPE=\"BLACKRECT\" "));
break;
case SS_GRAYRECT:
AddControl( TEXT("TYPE=\"GRAYRECT\" "));
break;
case SS_WHITERECT:
AddControl( TEXT("TYPE=\"WHITERECT\" "));
break;
case SS_BLACKFRAME:
AddControl( TEXT("TYPE=\"BLACKFRAME\" "));
break;
case SS_GRAYFRAME:
AddControl( TEXT("TYPE=\"GRAYFRAME\" "));
break;
case SS_WHITEFRAME:
AddControl( TEXT("TYPE=\"WHITEFRAME\" "));
break;
case SS_ETCHEDHORZ:
AddControl( TEXT("TYPE=\"ETCHEDHORZ\" "));
break;
case SS_ETCHEDVERT:
AddControl( TEXT("TYPE=\"ETCHEDVERT\" "));
break;
case SS_ETCHEDFRAME:
AddControl( TEXT("TYPE=\"ETCHEDFRAME\" "));
break;
}
m_dumpedStyle |= SS_TYPEMASK;
DumpDefStaticRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); Rects don't have TEXT.
DumpIDDefMinusOne();
Emit(TEXT("RECT"));
}
//
// Image
//
void CResControl::DumpImage(LPTSTR szBuffer, LPCTSTR pszTitle)
{
// Do we allow them to force the image type
// ICON, BITMAP, ENHMETAFILE ???
//
DWORD dwRemainingStyles = GetControlStyle();
switch ( dwRemainingStyles & SS_TYPEMASK )
{
default:
case SS_ICON:
Add( TEXT("CONTENT=\"ICON\" "));
break;
case SS_BITMAP:
Add( TEXT("CONTENT=\"BITMAP\" "));
break;
case SS_ENHMETAFILE:
Add( TEXT("CONTENT=\"VECTOR\" "));
break;
}
m_dumpedStyle |= SS_TYPEMASK;
// Label
DumpDefStaticRules();
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpIDDefMinusOne();
wsprintf(szBuffer,TEXT("IMAGEID=\"%d\" "), m_TitleID);
Add(szBuffer);
Emit(TEXT("IMAGE"));
}
//
// Static defines:
//
BOOL CResControl::DumpDefStaticRules( )
{
DWORD dwRemainingStyles=GetControlStyle();
dwRemainingStyles &= ~ m_dumpedStyle;
if( GetDumpWin32()== FALSE )
{
if( dwRemainingStyles & SS_SUNKEN )
m_StyleEx |= WS_EX_STATICEDGE;
}
CONTROLSTYLE( SS_NOPREFIX, TEXT("NOPREFIX"), m_NoPrefix, FALSE );
CONTROLSTYLE( SS_NOTIFY, TEXT("NOTIFY"), m_Notify, FALSE );
CONTROLSTYLE( SS_CENTERIMAGE, TEXT("CENTERIMAGE"), m_CenterImage, FALSE );
CONTROLSTYLE( SS_RIGHTJUST, TEXT("RIGHTJUST"), m_RightJust, FALSE );
CONTROLSTYLE( SS_REALSIZEIMAGE, TEXT("REALSIZEIMAGE"), m_RealSizeImage, FALSE );
CONTROLSTYLE( SS_SUNKEN, TEXT("SUNKEN"), m_Sunken, FALSE );
switch(dwRemainingStyles & SS_ELLIPSISMASK )
{
case SS_ENDELLIPSIS:
AddControl(TEXT("ELIPSIS=\"END\" "));
break;
case SS_PATHELLIPSIS:
AddControl(TEXT("ELIPSIS=\"PATH\" "));
break;
case SS_WORDELLIPSIS:
AddControl(TEXT("ELIPSIS=\"WORD\" "));
break;
default:
break;
}
m_dumpedStyle |= SS_ELLIPSISMASK;
DumpTabStop(FALSE);
return true;
}
//
// SCROLLBAR
//
//////////////////////////////////////////////////////////////////////////////////////////
//
// SBS_HORZ 0x0000L A @VERTICAL="NO"
// SBS_VERT 0x0001L A @VERTICAL="YES"
// SBS_TOPALIGN 0x0002L A @ALIGN="TOP"
// SBS_LEFTALIGN 0x0002L A @ALIGN="LEFT"
// SBS_BOTTOMALIGN 0x0004L A @ALIGN="BOTOM"
// SBS_RIGHTALIGN 0x0004L A @ALIGN="RIGHT"
// SBS_SIZEBOXTOPLEFTALIGN 0x0002L WIN32:SCROLLBAR\@SIZEBOX="YES" the @ALIGN="TOP" or @ALIGN="LEFT"
// SBS_SIZEBOXBOTTOMRIGHTALIGN 0x0004L WIN32:SCROLLBAR\@SIZEBOX="YES" the @ALIGN="BOTTOM" or @ALIGN="RIGHT"
// SBS_SIZEBOX 0x0008L WIN32:SCROLLBAR\@SIZEBOX="YES"
// SBS_SIZEGRIP 0x0010L WIN32:SCROLLBAR\@SIZEGRIP="YES"
//
void CResControl::DumpScrollBar(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
if( dwRemainingStyles & SBS_VERT )
{
Add( TEXT("ORIENTATION=\"VERTICAL\" ") );
if( dwRemainingStyles & SBS_LEFTALIGN )
Add( TEXT("ALIGN=\"LEFT\" ") );
if( dwRemainingStyles & SBS_RIGHTALIGN )
Add( TEXT("ALIGN=\"RIGHT\" ") );
}
else
{
// Add( TEXT("ORIENTATION=\"HORIZONTAL\" ") );
if( dwRemainingStyles & SBS_TOPALIGN )
Add( TEXT("ALIGN=\"TOP\" ") );
if( dwRemainingStyles & SBS_BOTTOMALIGN )
Add( TEXT("ALIGN=\"BOTTOM\" ") );
}
if( dwRemainingStyles & SBS_SIZEBOX )
AddControl( TEXT("SIZEBOX=\"YES\" ") );
if( dwRemainingStyles & SBS_SIZEGRIP )
AddControl( TEXT("SIZEGRIP=\"YES\" ") );
m_dumpedStyle |= SBS_VERT | SBS_TOPALIGN | SBS_BOTTOMALIGN | SBS_SIZEBOX | SBS_SIZEGRIP ;
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
Emit(TEXT("SCROLLBAR"));
}
////////////////////////////////////////////////////////////////////////////////////////
//
// Slider
//
// TBS_AUTOTICKS 0x0001 AUTOTICKS
// TBS_VERT 0x0002 VERTICAL
// TBS_HORZ 0x0000
// TBS_TOP 0x0004 TICKS="TOP LEFT BOTTOM RIGHT BOTH"
// TBS_BOTTOM 0x0000
// TBS_LEFT 0x0004
// TBS_RIGHT 0x0000
// TBS_BOTH 0x0008
// TBS_NOTICKS 0x0010 NOTICKS
// TBS_ENABLESELRANGE 0x0020 SELECTION
// TBS_FIXEDLENGTH 0x0040 FIXEDLENGTH
// TBS_NOTHUMB 0x0080 NOTHUMB
// TBS_TOOLTIPS 0x0100 TOOLTIPS
void CResControl::DumpSlider(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( TBS_AUTOTICKS, TEXT("AUTOTICKS"), m_AutoTicks, FALSE );
if( dwRemainingStyles & TBS_VERT )
{
Add(TEXT("ORIENTATION=\"VERTICAL\" "));
if( (dwRemainingStyles & (TBS_NOTICKS | TBS_BOTH )) == 0 )
{
if( dwRemainingStyles & TBS_LEFT )
Add(TEXT("TICKS=\"LEFT\" "));
else
Add(TEXT("TICKS=\"RIGHT\" "));
}
else
{
if( dwRemainingStyles & TBS_NOTICKS )
Add(TEXT("TICKS=\"NONE\" "));
else
Add(TEXT("TICKS=\"BOTH\" "));
}
}
else
{
// Add(TEXT("ORIENTATION=\"HORIZONTAL\" ")); - Default
if( (dwRemainingStyles & (TBS_NOTICKS | TBS_BOTH )) == 0 )
{
if( dwRemainingStyles & TBS_TOP )
Add(TEXT("TICKS=\"TOP\" "));
else
Add(TEXT("TICKS=\"BOTTOM\" "));
}
else
{
if( dwRemainingStyles & TBS_NOTICKS )
Add(TEXT("TICKS=\"NONE\" "));
else
Add(TEXT("TICKS=\"BOTH\" "));
}
}
CONTROL( TBS_ENABLESELRANGE,TEXT("SELECTION"), m_Selection, FALSE );
CONTROL( TBS_FIXEDLENGTH, TEXT("FIXEDLENFTH"), m_FixedLength, FALSE );
CONTROL( TBS_NOTHUMB, TEXT("NOTHUMB"), m_NoThumb, FALSE );
CONTROL( TBS_TOOLTIPS, TEXT("TOOLTIPS"), m_Tooltips, FALSE );
m_dumpedStyle |= 0x1ff;
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
if( GetCicero() )
AddCicero( TEXT(":CMD ") );
Emit(TEXT("SLIDER"));
}
////////////////////////////////////////////////////////////////////////////////////////
// UDS_WRAP 0x0001 @WRAP
// UDS_SETBUDDYINT 0x0002 @CONTENT="NUMBER"
// UDS_ALIGNRIGHT 0x0004 @ALIGN="RIGHT"
// UDS_ALIGNLEFT 0x0008 @ALIGH="LEFT"
// UDS_AUTOBUDDY 0x0010 @BUDDY="AUTO"
// UDS_ARROWKEYS 0x0020 @ARROWKEYS="YES" default
// UDS_HORZ 0x0040 @HORIZONTAL
// UDS_NOTHOUSANDS 0x0080 @NOTHOUSANDS
// UDS_HOTTRACK 0x0100 @HOTTRACK
void CResControl::DumpSpinner(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( UDS_WRAP, TEXT("WRAP"), m_Wrap, FALSE );
if( dwRemainingStyles & UDS_SETBUDDYINT )
Add(TEXT("CONTENT=\"NUMBER\" "));
if( dwRemainingStyles & UDS_ALIGNRIGHT )
Add(TEXT("ALIGN=\"RIGHT\" "));
if( dwRemainingStyles & UDS_ALIGNLEFT )
Add(TEXT("ALIGN=\"LEFT\" "));
if( dwRemainingStyles & UDS_AUTOBUDDY )
Add(TEXT("BUDDY=\"AUTO\" "));
CONTROL( UDS_ARROWKEYS, TEXT("ARROWKEYS"), m_ArrowKeys, TRUE );
// CONTROL( UDS_HORZ, TEXT("HORIZONATAL"), m_Horz, FALSE );
if( dwRemainingStyles & UDS_HORZ )
Add(TEXT("ORIENTATION=\"HORIZONTAL\" "));
CONTROL( UDS_NOTHOUSANDS, TEXT("NOTHOUSANDS"), m_NoThousands, FALSE );
CONTROL( UDS_HOTTRACK, TEXT("HOTTRACK"), m_HotTrack, FALSE );
m_dumpedStyle |= 0x1ff;
DumpTabStop(FALSE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
if( GetCicero() )
AddCicero( TEXT(":CMD ") );
Emit(TEXT("SPINNER"));
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
// Progress
//
//
// PBS_SMOOTH 0x01
// PBS_VERTICAL 0x04
//
void CResControl::DumpProgress(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( PBS_SMOOTH, TEXT("SMOOTH"), m_Smooth, FALSE );
// CONTROL( PBS_VERTICAL, TEXT("VERTICAL"), m_Vertical, FALSE );
if( dwRemainingStyles & PBS_VERTICAL )
Add(TEXT("ORIENTATION=\"VERTICAL\" "));
m_dumpedStyle |= PBS_VERTICAL;
DumpTabStop(FALSE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
Emit(TEXT("PROGRESS"));
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
// PAGER
//
//
// PGS_VERT 0x00000000
// PGS_HORZ 0x00000001
// PGS_AUTOSCROLL 0x00000002
// PGS_DRAGNDROP 0x00000004
//
void CResControl::DumpPager(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( PGS_AUTOSCROLL, TEXT("AUTOSCROLL"), m_AutoScroll, FALSE );
if( dwRemainingStyles & PGS_HORZ )
Add(TEXT("ORIENTATION=\"HORIZONTAL\" "));
m_dumpedStyle |= PGS_HORZ;
DumpTabStop(FALSE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
Emit(TEXT("PAGER"));
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
// HEADER
//
//
// HDS_HORZ 0x0000
// HDS_BUTTONS 0x0002
// HDS_HOTTRACK 0x0004
// HDS_HIDDEN 0x0008
// HDS_DRAGDROP 0x0040
// HDS_FULLDRAG 0x0080
//
void CResControl::DumpHeader(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( HDS_BUTTONS, TEXT("BUTTONS"), m_AutoScroll, FALSE );
CONTROL( HDS_HOTTRACK, TEXT("HOTTRACK"), m_AutoScroll, FALSE );
CONTROL( HDS_FULLDRAG, TEXT("HDS_FULLDRAG"), m_AutoScroll, FALSE );
DumpTabStop(FALSE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
Emit(TEXT("HEADER"));
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
// ListView
//
// LVS_ICON 0x0000
// LVS_REPORT 0x0001 *@DISPLAY="REPORT"
// LVS_SMALLICON 0x0002 *@DISPLAY="SMALLICON"
// LVS_LIST 0x0003 *@DISPLAY="LIST"
// LVS_TYPEMASK 0x0003
// LVS_SINGLESEL 0x0004 *@SELECTION="SINGLE"
// LVS_SHOWSELALWAYS 0x0008 *WIN32:TREEVIEW @SHOWSELALWAYS="YES"
// LVS_SORTASCENDING 0x0010 *@SORT="ASCENDING"
// LVS_SORTDESCENDING 0x0020 *@SORT="DESCENDING"
// LVS_SHAREIMAGELISTS 0x0040 *WIN32:TREEVIEW @SHAREIMAGELIST="YES"
// LVS_NOLABELWRAP 0x0080 *@NOLABELWRAP="YES"
// LVS_AUTOARRANGE 0x0100 *@AUTOARRANGE="YES"
// LVS_EDITLABELS 0x0200 *@EDITLABELS="YES"
// LVS_OWNERDATA 0x1000 *WIN32:TREEVIEW @OWNERDATA="YES"
// LVS_NOSCROLL 0x2000 *@NOSCROLL="YES"
// LVS_TYPESTYLEMASK 0xfc00
// LVS_ALIGNTOP 0x0000 *@ALIGN="TOP"
// LVS_ALIGNLEFT 0x0800 *@ALIGN="LEFT"
// LVS_ALIGNMASK 0x0c00
// LVS_OWNERDRAWFIXED 0x0400 *WIN32:TREEVIEW @OWNERDRAWFIXED="YES"
// LVS_NOCOLUMNHEADER 0x4000 *@NOCOLUMNHEADER="YES"
// LVS_NOSORTHEADER 0x8000 *@NOSORTHEADER="YES"
void CResControl::DumpListView(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
if( dwRemainingStyles & LVS_SINGLESEL)
Add(TEXT("SELECTION=\"SINGLE\" "));
m_dumpedStyle |= LVS_SINGLESEL;
switch( dwRemainingStyles & LVS_TYPEMASK )
{
case LVS_ICON:
default:
break;
case LVS_REPORT:
Add(TEXT("DISPLAY=\"REPORT\" "));
break;
case LVS_SMALLICON:
Add(TEXT("DISPLAY=\"SMALLICON\" "));
break;
case LVS_LIST:
Add(TEXT("DISPLAY=\"LIST\" "));
break;
}
m_dumpedStyle |= LVS_TYPEMASK;
if( dwRemainingStyles & LVS_SORTASCENDING )
Add(TEXT("SORT=\"ASCENDING\" "));
if( dwRemainingStyles & LVS_SORTDESCENDING )
Add(TEXT("SORT=\"DESCENDING\" "));
m_dumpedStyle |= LVS_SORTASCENDING | LVS_SORTDESCENDING;
switch( dwRemainingStyles & LVS_ALIGNMASK )
{
case LVS_ALIGNTOP:
Add(TEXT("ALIGN=\"TOP\" "));
break;
case LVS_ALIGNLEFT:
Add(TEXT("ALIGN=\"LEFT\" "));
break;
}
m_dumpedStyle |= LVS_ALIGNMASK;
CONTROL( LVS_NOLABELWRAP, TEXT("NOLABELWRAP"), m_NoLabelWrap, FALSE );
CONTROL( LVS_AUTOARRANGE, TEXT("AUTOARRANGE"), m_AutoArrange, FALSE );
CONTROL( LVS_EDITLABELS, TEXT("EDITLABELS"), m_EditLabels, FALSE );
CONTROL( LVS_NOSCROLL, TEXT("NOSCROLL"), m_NoScroll, FALSE );
CONTROL( LVS_NOCOLUMNHEADER, TEXT("NOCOLUMNHEADER"), m_NoColHeader, FALSE );
CONTROL( LVS_NOSORTHEADER, TEXT("NOSORTHEADER"), m_NoSortHeader, FALSE );
CONTROLSTYLE( LVS_OWNERDRAWFIXED,TEXT("OWNERDRAWFIXED"), m_OwnerDrawFixed, FALSE );
CONTROLSTYLE( LVS_OWNERDATA, TEXT("OWNERDATA"), m_OwnerData, FALSE );
CONTROLSTYLE( LVS_SHAREIMAGELISTS,TEXT("SHAREIMAGELISTS"), m_ShareImageList, FALSE );
CONTROLSTYLE( LVS_SHOWSELALWAYS, TEXT("SHOWSELALWAYS"), m_ShowSelAlways, FALSE );
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
Emit(TEXT("LISTVIEW"));
}
////////////////////////////////////////////////////////////////////////////////////
// TreeView
//
// TVS_HASBUTTONS 0x0001 @EXPANDBOXES="YES" (or @HASBUTTONS?)
// TVS_HASLINES 0x0002 @LINES="YES"
// TVS_LINESATROOT 0x0004 @LINES="ROOT" (turns on TVS_HASLINES)
// TVS_EDITLABELS 0x0008 @EDITLABELS="YES"
// TVS_DISABLEDRAGDROP 0x0010 @DISABLEDRAGDROP="YES"
// TVS_SHOWSELALWAYS 0x0020 WIN32:TREEVIEW @SHOWSELALWAYS="YES"
// TVS_RTLREADING 0x0040 WIN32:TREEVIEW @RTLREADING="YES"
// TVS_NOTOOLTIPS 0x0080 @NOTOOLTIPS="YES"
// TVS_CHECKBOXES 0x0100 @CHECBOXES="YES"
// TVS_TRACKSELECT 0x0200 WIN32:TREEVIEW @TRACKSELECT="YES"
// TVS_SINGLEEXPAND 0x0400 @AUTOEXPAND="YES"
// TVS_INFOTIP 0x0800 WIN32:TREEVIEW @INFOTIP="YES"
// TVS_FULLROWSELECT 0x1000 @ROWSELECT="YES"
// TVS_NOSCROLL 0x2000 @NOSCROLL="YES"
// TVS_NONEVENHEIGHT 0x4000 WIN32:TREEVIEW @NOEVENHEIGHT="YES"
void CResControl::DumpTreeView(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( TVS_HASBUTTONS, TEXT("EXPANDBOXES"), m_ExpandBoxes, FALSE );
if( dwRemainingStyles & TVS_LINESATROOT )
{
Add(TEXT("LINES=\"ROOT\" "));
}
else
{
if( dwRemainingStyles & TVS_HASLINES )
Add(TEXT("LINES=\"YES\" "));
}
m_dumpedStyle |= TVS_HASLINES | TVS_LINESATROOT;
CONTROL( TVS_EDITLABELS, TEXT("EDITLABELS"), m_EditLables, FALSE );
CONTROL( TVS_DISABLEDRAGDROP, TEXT("DISABLEDRAGDROP"), m_DisableDragDrop, FALSE );
CONTROL( TVS_NOTOOLTIPS, TEXT("NOTOOLTIPS"), m_NoTooltips, FALSE );
CONTROL( TVS_CHECKBOXES, TEXT("CHECKBOXES"), m_CheckBoxes, FALSE );
CONTROL( TVS_SINGLEEXPAND, TEXT("AUTOEXPAND"), m_AutoExpand, FALSE );
CONTROL( TVS_FULLROWSELECT, TEXT("ROWSELECT"), m_FullRowSelect, FALSE );
CONTROL( TVS_NOSCROLL, TEXT("NOSCROLL"), m_NoScroll, FALSE );
CONTROLSTYLE( TVS_SHOWSELALWAYS, TEXT("SHOWSELALWAYS"), m_ShowSelAlways, FALSE );
CONTROLSTYLE( TVS_RTLREADING, TEXT("RTLREADING"), m_RTLReading, FALSE );
CONTROLSTYLE( TVS_TRACKSELECT, TEXT("TRACKSELECT"), m_TrackSelect, FALSE );
CONTROLSTYLE( TVS_INFOTIP, TEXT("INFOTIP"), m_InfoTip, FALSE );
CONTROLSTYLE( TVS_NONEVENHEIGHT, TEXT("NONEVENHEIGHT"), m_NoEvenHeight, FALSE );
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
// DumpText(); - I don't think that they need text
DumpIDDefMinusOne();
Emit(TEXT("TREEVIEW"));
}
// http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/SELECT.asp
// LBS_NOTIFY 0x0001L C // WIN32:LISTBOX\@NOTIFY
// LBS_SORT 0x0002L A // SORT="YES"
// LBS_NOREDRAW 0x0004L C // WIN32:LISTBOX\@NOREDRAW
// LBS_MULTIPLESEL 0x0008L A // MULTIPLE="YES"
// LBS_OWNERDRAWFIXED 0x0010L C // WIN32:COMBOBOX\@OWNERDRAWFIXED
// LBS_OWNERDRAWVARIABLE 0x0020L C // WIN32:COMBOBOX\@OWNERDRAWVARIABLE
// LBS_HASSTRINGS 0x0040L C // WIN32:COMBOBOX\HASSTRINGS
// LBS_USETABSTOPS 0x0080L C // WIN32:COMBOBOX\@TABSTOPS
// LBS_NOINTEGRALHEIGHT 0x0100L C // WIN32:COMBOBOX\@NOINTEGRALHEIGHT
// LBS_MULTICOLUMN 0x0200L C // MULTICOLUMN="YES"
// LBS_WANTKEYBOARDINPUT 0x0400L C // WIN32:COMBOBOX\@WANTKEYBOARDINPUT
// LBS_EXTENDEDSEL 0x0800L A // SELECTION="EXTENDED"
// LBS_DISABLENOSCROLL 0x1000L C // WIN32:COMBOBOX\DISALBENOSCROLL
// LBS_NODATA 0x2000L C // WIN32:COMBOBOX\@NODATA
// LBS_NOSEL 0x4000L A // SELECTION="NO"
void CResControl::DumpListBox(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROLSTYLE( LBS_NOTIFY, TEXT("NOTIFY"), m_Notify, TRUE );
if( (dwRemainingStyles & LBS_SORT ) == FALSE )
{
Add(TEXT("SORT=\"NO\" ")); // default is ON.
}
m_dumpedStyle |= LBS_SORT;
CONTROLSTYLE( LBS_NOREDRAW, TEXT("NNOREDRAW"), m_NoRedraw, FALSE );
if( dwRemainingStyles & LBS_MULTIPLESEL )
{
Add(TEXT("MULTIPLE=\"YES\" "));
}
m_dumpedStyle |= LBS_MULTIPLESEL;
CONTROLSTYLE( LBS_OWNERDRAWFIXED, TEXT("OWNERDRAWFIXED"), m_OwnerDrawFixed, FALSE );
CONTROLSTYLE( LBS_OWNERDRAWVARIABLE, TEXT("OWNERDRAWVARIABLE"), m_OwnerDrawVariable, FALSE );
CONTROLSTYLE( LBS_HASSTRINGS, TEXT("HASSTRINGS"), m_HasStrings, FALSE );
CONTROLSTYLE( LBS_USETABSTOPS, TEXT("TABSTOPS"), m_UseTabstops, FALSE );
CONTROLSTYLE( LBS_NOINTEGRALHEIGHT, TEXT("NOINTEGRALHEIGHT"), m_NoIntegralHeight, TRUE );
CONTROLSTYLE( LBS_WANTKEYBOARDINPUT, TEXT("WANTKEYBOARDINPUT"), m_WantKeyboardInput, FALSE );
if( dwRemainingStyles & LBS_MULTICOLUMN )
{
Add(TEXT("MULTICOLUMN=\"YES\" "));
}
m_dumpedStyle |= LBS_MULTICOLUMN;
// TRICKY!
if( dwRemainingStyles & ( LBS_EXTENDEDSEL | LBS_NOSEL ) )
{
if( dwRemainingStyles & LBS_EXTENDEDSEL )
Add(TEXT("SELECTION=\"EXTENDED\" "));
else
Add(TEXT("SELECTION=\"NO\" "));
}
m_dumpedStyle |= ( LBS_EXTENDEDSEL | LBS_NOSEL );
CONTROLSTYLE( LBS_DISABLENOSCROLL, TEXT("DISABLENOSCROLL"), m_DisableNoScroll, FALSE );
CONTROLSTYLE( LBS_NODATA, TEXT("NODATA"), m_NoData, FALSE );
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpID();
DumpText();
DumpLocation();
if( GetCicero() )
AddCicero( TEXT(":CMD ") );
//
// See if there are any items in the listbox.
//
if(m_hwnd && m_Parent.GetEnhanced() )
{
int iCount=SendMessage( m_hwnd, LB_GETCOUNT, NULL, NULL);
if( iCount!=LB_ERR)
{
WORD wLen=0;
LPTSTR szText=NULL;
LPTSTR szItem=NULL;
int iCurSel = SendMessage(m_hwnd, LB_GETCURSEL , 0, 0);
for(int i=0;i<iCount;i++)
{
int iLen=SendMessage(m_hwnd, LB_GETTEXTLEN , i, 0);
if( iLen > wLen )
{
delete szText;
wLen=iLen+20;
szText=new TCHAR[wLen];
delete szItem;
szItem=new TCHAR[wLen+100]; // this is the XML wrapped up version.
}
SendMessage(m_hwnd, LB_GETTEXT , i, (LPARAM)szText );
int id=SendMessage(m_hwnd, LB_GETITEMDATA , i, NULL );
LPWSTR szFixedString=m_Parent.FixEntity( szText );
LPWSTR szNextText=szItem;
szNextText += wsprintf(szNextText, TEXT("<ITEM "));
if( id )
szNextText += wsprintf(szNextText, TEXT("ID=\"%u\" "), id);
if( i==iCurSel )
szNextText += wsprintf(szNextText, TEXT("SELECTED=\"YES\" ") );
szNextText += wsprintf(szNextText, TEXT("TEXT=\"%s\" />"), szFixedString);
m_pDumpCache->AllocAddChild(szItem);
delete szFixedString;
}
delete szText;
delete szItem;
}
}
Emit(TEXT("LISTBOX"));
// REVIEW in Enhanced mode we should add the <ITEM> stuff to show off.
}
//
// ComboBox
//
// CBS_SIMPLE 0x0001L A // SIZE!="1" READONLY (doesn't matter)
// CBS_DROPDOWN 0x0002L A // SIZE="1" READONLY="NO
// CBS_DROPDOWNLIST 0x0003L A // SIZE="1" READONLY="YES"
// CBS_OWNERDRAWFIXED 0x0010L C // WIN32:COMBOBOX\@OWNERDRAWFIXED
// CBS_OWNERDRAWVARIABLE 0x0020L C // WIN32:COMBOBOX\@OWNERDRAWVARIABLE
// CBS_AUTOHSCROLL 0x0040L S // STYLE\overflow-y="auto"
// CBS_OEMCONVERT 0x0080L C // WIN32:COMBOBOX\OEMCONVERT
// CBS_SORT 0x0100L A // SORT="YES"
// CBS_HASSTRINGS 0x0200L C // WIN32:COMBOBOX\HASSTRINGS
// CBS_NOINTEGRALHEIGHT 0x0400L C // WIN32:COMBOBOX\NOINTEGRALHEIGHT
// CBS_DISABLENOSCROLL 0x0800L C // WIN32:COMBOBOX\DISALBENOSCROLL
// CBS_UPPERCASE 0x2000L S // STYLE\@text-transform=uppercase
// CBS_LOWERCASE 0x4000L S // STYLE\@text-transform=lowercase
//
// http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/SELECT.asp
//
// CICERO:COMBO
// Readonly combo, means we can generate the list of options
//
void CResControl::DumpComboBox(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
//
// This is a bit strange, although it's an ENUM, we're mapping
// to two attributes, SIZE (from HTML) and READONLY (as in, non editable text).
// this isn't a rendering style, just you can't add any more items to the list, just
// pick one.
// DEFAULTS : SIZE="1" and READONLY="NO"
//
BOOL bReadOnly=FALSE;
switch ( dwRemainingStyles & 0xf )
{
case CBS_SIMPLE:
Add(TEXT("SIZE=\"-1\" "));
break;
default:
case CBS_DROPDOWN:
// Add(TEXT("READONLY=\"NO\" ));
break;
case CBS_DROPDOWNLIST:
Add(TEXT("READONLY=\"YES\" "));
bReadOnly=TRUE;
break;
}
m_dumpedStyle |= 0xf;
CONTROLSTYLE( CBS_OWNERDRAWFIXED, TEXT("OWNERDRAWFIXED"), m_OwnerDrawFixed, FALSE );
CONTROLSTYLE( CBS_OWNERDRAWVARIABLE, TEXT("OWNERDRAWVARIABLE"), m_OwnerDrawVariable, FALSE );
if( !( dwRemainingStyles & CBS_AUTOHSCROLL ) )
AddStyle( TEXT("OVERFLOW-X=\"VISIBLE\" ")); // can only type as big as the control
m_dumpedStyle |=CBS_AUTOHSCROLL;
CONTROLSTYLE( CBS_OEMCONVERT, TEXT("OEMCONVERT"), m_OemConvert, FALSE );
CONTROL( CBS_SORT, TEXT("SORT"), m_Sort, TRUE ); // default is to sort.
CONTROLSTYLE( CBS_HASSTRINGS, TEXT("HASSTRINGS"), m_HasStrings, FALSE );
CONTROLSTYLE( CBS_NOINTEGRALHEIGHT, TEXT("NOINTEGRALHEIGHT"), m_NoIntegralHeight, FALSE );
CONTROLSTYLE( CBS_DISABLENOSCROLL, TEXT("DISABLENOSCROLL"), m_DisableNoScroll, FALSE );
switch( dwRemainingStyles & (CBS_UPPERCASE | CBS_LOWERCASE ) )
{
case CBS_UPPERCASE:
AddStyle( TEXT("TEXT-TRANSFORM=\"UPPERCASE\" "));
break;
case CBS_LOWERCASE:
AddStyle( TEXT("TEXT-TRANSFORM=\"LOWERCASE\" "));
break;
default:
//
break;
}
m_dumpedStyle |= (CBS_UPPERCASE | CBS_LOWERCASE );
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpID();
DumpText();
//
// need to fix up the height of the combo.
// combo's height is always fixed, so we need to find the drop height.
//
RECT dropped;
if(m_hwnd)
{
SendMessage(m_hwnd, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&dropped);
SIZE size;
size.cx = dropped.right - dropped.left ;
size.cy = dropped.bottom - dropped.top;
size = m_Parent.m_Font.GetDlgUnitsFromPixels( size );
SetHeight(size.cy);
}
DumpLocation();
#if 0
if( GetCicero() )
{
if( bReadOnly==FALSE )
// AddCicero( TEXT(":CFG FILENAME=\"somecfg.xml\" ") ); // it's free form data entry
AddCicero( TEXT(":CMD ") ); // it's free form data entry
else
AddCicero( TEXT(":CMD ") ); // we can runtime command this.
}
#else
if( GetCicero() )
{
LPWSTR pszShortButtonText=FindNiceText( GetRawTitle() );
wsprintf(szBuffer,TEXT(":CMD "));
AddCicero(szBuffer);
wsprintf(szBuffer,TEXT("<CICERO:FAILURE TEXT=\"Unable to make that selection\" />") );
m_pCicero->AllocAddChild( szBuffer);
delete pszShortButtonText;
}
#endif
//
// See if there are any items in the combobox.
//
if(m_hwnd && m_Parent.GetEnhanced() )
{
int iCount=SendMessage( m_hwnd, CB_GETCOUNT, NULL, NULL);
if( iCount!=CB_ERR)
{
WORD wLen=0;
LPTSTR szText=NULL;
LPTSTR szItem=NULL;
int iCurSel = SendMessage(m_hwnd, CB_GETCURSEL , 0, 0);
for(int i=0;i<iCount;i++)
{
int iLen=SendMessage(m_hwnd, CB_GETLBTEXTLEN , i, 0);
if( iLen > wLen )
{
delete szText;
wLen=iLen+20;
szText=new TCHAR[wLen];
delete szItem;
szItem=new TCHAR[wLen+100]; // this is the XML wrapped up version.
}
SendMessage(m_hwnd, CB_GETLBTEXT , i, (LPARAM)szText );
int id=SendMessage(m_hwnd, CB_GETITEMDATA , i, NULL );
LPWSTR szFixedString=m_Parent.FixEntity( szText );
LPWSTR szNextText=szItem;
szNextText += wsprintf(szNextText, TEXT("<ITEM "));
if( id )
szNextText += wsprintf(szNextText, TEXT("ID=\"%u\" "), id);
if( i==iCurSel )
szNextText += wsprintf(szNextText, TEXT("SELECTED=\"YES\" ") );
szNextText += wsprintf(szNextText, TEXT("TEXT=\"%s\" />"), szFixedString);
m_pDumpCache->AllocAddChild(szItem);
delete szFixedString;
}
delete szText;
delete szItem;
}
}
Emit(TEXT("COMBOBOX"));
}
////////////////////////////////////////////////////////////////////////////////////////
//
// Control specific rules.
//
////////////////////////////////////////////////////////////////////////////////////////
// BS_PUSHBUTTON 0x00000000L
// BS_DEFPUSHBUTTON 0x00000001L
// BS_CHECKBOX 0x00000002L
// BS_AUTOCHECKBOX 0x00000003L
// BS_RADIOBUTTON 0x00000004L
// BS_3STATE 0x00000005L
// BS_AUTO3STATE 0x00000006L
// BS_GROUPBOX 0x00000007L
// BS_USERBUTTON 0x00000008L
// BS_AUTORADIOBUTTON 0x00000009L
// BS_OWNERDRAW 0x0000000BL
// BS_LEFTTEXT 0x00000020L
// BS_TEXT 0x00000000L
// BS_ICON 0x00000040L
// BS_BITMAP 0x00000080L
// BS_LEFT 0x00000100L
// BS_RIGHT 0x00000200L
// BS_CENTER 0x00000300L
// BS_TOP 0x00000400L
// BS_BOTTOM 0x00000800L
// BS_VCENTER 0x00000C00L
// BS_PUSHLIKE 0x00001000L
// BS_MULTILINE 0x00002000L
// BS_NOTIFY 0x00004000L
// BS_FLAT 0x00008000L
// BS_RIGHTBUTTON BS_LEFTTEXT
BOOL CResControl::DumpDefButtonRules()
{
DWORD dwRemainingStyles=GetControlStyle();
//
// we don't dump everything here - some style bits don't make sense for all buttons
// e.g. TRI_STATE for groupboxes.
//
dwRemainingStyles &= ~ m_dumpedStyle;
// The low 4 bits are an enum
dwRemainingStyles &= ~ 0xf;
//
// These are all the style bits that this method emits.
//
m_dumpedStyle |=
(BS_FLAT | BS_NOTIFY | BS_MULTILINE | BS_RIGHT | BS_LEFT | BS_BOTTOM | BS_TOP );
//
// REVIEW BS_ICON BS_BITMAP ??
//
CONTROLSTYLE( BS_LEFTTEXT, TEXT("LEFTTEXT"), m_LeftText, FALSE ); // only for check / radio
CONTROLSTYLE( BS_FLAT, TEXT("FLAT"), m_Flat, FALSE );
CONTROLSTYLE( BS_NOTIFY, TEXT("NOTIFY"), m_Notify, FALSE );
CONTROLSTYLE( BS_MULTILINE, TEXT("MULTILINE"), m_MultiLine,FALSE );
CONTROLSTYLE( BS_ICON, TEXT("ICON"), m_Icon, FALSE );
CONTROLSTYLE( BS_BITMAP, TEXT("BITMAP"), m_Bitmap, FALSE );
CONTROLSTYLE( BS_PUSHLIKE, TEXT("PUSHLIKE"), m_Pushlike, FALSE );
//
// BOTH RIGHT and LEFT is CENTER -CSS-
//
if(dwRemainingStyles & BS_CENTER )
{
if( (dwRemainingStyles & BS_CENTER) == BS_CENTER )
{
AddStyle(TEXT("TEXT-ALIGN=\"CENTER\" "));
}
else
{
if( dwRemainingStyles & BS_RIGHT )
AddStyle(TEXT("TEXT-ALIGN=\"RIGHT\" "));
else
AddStyle(TEXT("TEXT-ALIGN=\"LEFT\" "));
}
}
//
// BS_TOP & BS_BOTTOM == BS_CENTER
//
if(dwRemainingStyles & BS_VCENTER )
{
if( (dwRemainingStyles & BS_VCENTER) == BS_VCENTER )
{
AddStyle(TEXT("VERTICAL-ALIGN=\"MIDDLE\" "));
}
else
{
if( dwRemainingStyles & BS_TOP )
AddStyle(TEXT("VERTICAL-ALIGN=\"TOP\" "));
else
AddStyle(TEXT("VERTICAL-ALIGN=\"BOTTOM\" "));
}
}
DumpTabStop(TRUE);
return true;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//
// Tab
//
// TCS_SCROLLOPPOSITE 0x0001 @SHUFFLE="YES" // assumes multiline tab
// TCS_BOTTOM 0x0002 @ALIGN="BOTTOM"
// TCS_RIGHT 0x0002 @ALIGN="RIGHT"
// TCS_MULTISELECT 0x0004 @MULTISELECT="YES" // allow multi-select in button mode
// TCS_FLATBUTTONS 0x0008 WIN32:TAB\@FLATBUTTONS="YES"
// TCS_FORCEICONLEFT 0x0010 WIN32:TAB\@FORCEICONLEFT="YES"
// TCS_FORCELABELLEFT 0x0020 WIN32:TAB\@FORCELABELLEFT="YES"
// TCS_HOTTRACK 0x0040 @HOTTRACK
// TCS_VERTICAL 0x0080 @ORIENTATION="VERTICAL"
// TCS_TABS 0x0000 @STYLE="TABS"
// TCS_BUTTONS 0x0100 @STYLE="BUTTONS"
// TCS_SINGLELINE 0x0000 @MULTILINE="NO"
// TCS_MULTILINE 0x0200 @MULTILINE="YES"
// TCS_RIGHTJUSTIFY 0x0000 @JUSTIFY="RIGHT"
// TCS_FIXEDWIDTH 0x0400 @FIXEDWIDTH="YES"
// TCS_RAGGEDRIGHT 0x0800 @JUSTIFY="LEFT"
// TCS_FOCUSONBUTTONDOWN 0x1000 WIN32:TAB\@FOCUSONBUTTONDOWN="YES"
// TCS_OWNERDRAWFIXED 0x2000 WIN32:TAB\@OWNERDRAWFIXED="YES"
// TCS_TOOLTIPS 0x4000 // implied from HELP\TOOLTIP\TEXT="..."
// TCS_FOCUSNEVER 0x8000 WIN32:TAB\@FOCUSNEVER="YES"
// EX styles for use with TCM_SETEXTENDEDSTYLE
// TCS_EX_FLATSEPARATORS 0x00000001 WIN32:TAB\FLATSEPARATORS="YES"
// TCS_EX_REGISTERDROP 0x00000002 WIN32:TAB\REGISTERDROP="YES"
//
void CResControl::DumpTab(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
CONTROL( TCS_SCROLLOPPOSITE, TEXT("SHUFFLE"), 0, FALSE );
if( dwRemainingStyles & TCS_BOTTOM )
Add(TEXT("ALIGN=\"BOTTOM\" "));
CONTROL( TCS_MULTISELECT, TEXT("MULTISELECT"), 0, FALSE );
CONTROLSTYLE( TCS_FLATBUTTONS, TEXT("FLATBUTTONS"), m_FlatButtons, FALSE );
CONTROLSTYLE( TCS_FORCEICONLEFT, TEXT("FORCEICONLEFT"), m_ForceIconLeft, FALSE );
CONTROLSTYLE( TCS_FORCELABELLEFT, TEXT("FORCELABELLEFT"), m_ForceLabelLeft, FALSE );
CONTROL( TCS_HOTTRACK, TEXT("HOTTRACK"), 0, FALSE );
if( dwRemainingStyles & TCS_VERTICAL )
Add(TEXT("ORIENTATION=\"VERTICAL\" "));
if( dwRemainingStyles & TCS_BUTTONS )
Add(TEXT("STYLE=\"BUTTONS\" "));
CONTROL( TCS_MULTILINE, TEXT("MULTILINE"), 0, FALSE );
if( dwRemainingStyles & TCS_RAGGEDRIGHT )
Add(TEXT("JUSTIFY=\"LEFT\" "));
CONTROL( TCS_FIXEDWIDTH, TEXT("FIXEDWIDTH"), m_FixedWidth, FALSE );
CONTROLSTYLE( TCS_FOCUSONBUTTONDOWN, TEXT("FOCUSONBUTTONDOWN"), m_FocusButtonDown, FALSE );
CONTROLSTYLE( TCS_OWNERDRAWFIXED, TEXT("OWNERDRAWFIXED"), m_OwnerDrawFixed, FALSE );
CONTROLSTYLE( TCS_FOCUSNEVER, TEXT("FOCUSNEVER"), m_FocusNever, FALSE );
// This is a hack
if( dwRemainingStyles & TCS_TOOLTIPS )
m_pDumpCache->AddChild(TEXT(" <HELP><TOOLTIP/></HELP> "), FALSE);
m_dumpedStyle |= (TCS_BOTTOM | TCS_VERTICAL | TCS_BUTTONS |
TCS_RAGGEDRIGHT | TCS_FIXEDWIDTH | TCS_TOOLTIPS);
DumpTabStop(TRUE);
DumpWindowStyle();
DumpStyleEX();
DumpID();
DumpText();
DumpLocation();
if( GetCicero() )
AddCicero( TEXT(":CMD ") );
// we dumb the tab headers regardless of cicero.
if(m_hwnd && m_Parent.GetEnhanced() )
{
#if 0
int tabCount = TabCtrl_GetItemCount( m_hwnd );
TCHAR tabText[MAX_PATH];
TCHAR tabHeaderText[MAX_PATH];
tabText[0]=0;
for( int i=0;i<tabCount;i++)
{
TCITEMHEADER header={0};
header.pszText=tabHeaderText;
header.cchTextMax=129;
header.mask |= TCIF_TEXT;
TCITEM item={0};
item.pszText = tabText;
item.cchTextMax = 127;
item.mask = TCIF_TEXT; // | TCIF_PARAM;
item.lParam = NULL; // (LPARAM)&header;
// TabCtrl_GetItem( m_hwnd, i, &item);
SendMessage( m_hwnd, TCM_GETITEMW, i, (LPARAM)&item);
TRACE(TEXT("The text for the tab is '%s'\n"),item.pszText);
}
#endif
#if 0
IAccessible * pA;
HRESULT hr;
CoInitialize(NULL);
if( SUCCEEDED(hr=AccessibleObjectFromWindow( m_hwnd,
OBJID_WINDOW, // works for office, information about the window itself, how many children it has.
// OBJID_MENU , // the menu for the window, doesn't work for office.
IID_IAccessible, (LPVOID*)&pA ) ))
{
CResFile::FindMenuItem(pA, ROLE_SYSTEM_PAGETAB );
pA->Release();
}
CoUninitialize();
#endif
}
Emit(TEXT("TAB"));
// REVIEW in Enhanced mode we should add the <ITEM> stuff to show off.
}
//
// Animation
//
// ACS_CENTER 0x0001
// ACS_TRANSPARENT 0x0002
// ACS_AUTOPLAY 0x0004
// ACS_TIMER 0x0008 // don't use threads... use timers
//
void CResControl::DumpAnimation(LPTSTR szBuffer, LPCTSTR pszTitle)
{
DWORD dwRemainingStyles = GetControlStyle();
Add( TEXT("CONTENT=\"ANIMATION\" "));
if( dwRemainingStyles & ACS_CENTER )
Add( TEXT("ALIGN=\"CENTER\" ") );
CONTROL( ACS_TRANSPARENT, TEXT("TRANSPARENT"), 0, FALSE );
CONTROL( ACS_AUTOPLAY, TEXT("AUTOPLAY"), 0, FALSE );
CONTROLSTYLE( ACS_TIMER, TEXT("TIMER"), m_Timer, FALSE );
m_dumpedStyle |= ACS_CENTER;
DumpTabStop(FALSE);
DumpWindowStyle();
DumpStyleEX();
DumpLocation();
DumpIDDefMinusOne();
Add( TEXT("FILE=\"filename goes here\" ") );
Emit(TEXT("IMAGE"));
}