// 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(""), 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 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(""), szFixedString); m_pDumpCache->AllocAddChild(szItem); delete szFixedString; } delete szText; delete szItem; } } Emit(TEXT("LISTBOX")); // REVIEW in Enhanced mode we should add the 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("") ); 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 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(""), 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(" "), 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;iRelease(); } CoUninitialize(); #endif } Emit(TEXT("TAB")); // REVIEW in Enhanced mode we should add the 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")); }