diff --git a/PInvoke/Shell32/ShObjIdl.IDeskBand.cs b/PInvoke/Shell32/ShObjIdl.IDeskBand.cs new file mode 100644 index 00000000..eb491da2 --- /dev/null +++ b/PInvoke/Shell32/ShObjIdl.IDeskBand.cs @@ -0,0 +1,905 @@ +using System; +using System.Drawing; +using System.Runtime.InteropServices; + +namespace Vanara.PInvoke +{ + public static partial class Shell32 + { + /// The view mode of the band object. This is one of the following values. + [PInvokeData("shobjidl_core.h", MSDNShortId = "NN:shobjidl_core.IDeskBand")] + [Flags] + public enum DBIF : uint + { + /// Band object is displayed in a horizontal band. + DBIF_VIEWMODE_NORMAL = 0x0000, + + /// Band object is displayed in a vertical band. + DBIF_VIEWMODE_VERTICAL = 0x0001, + + /// Band object is displayed in a floating band. + DBIF_VIEWMODE_FLOATING = 0x0002, + + /// Band object is displayed in a transparent band. + DBIF_VIEWMODE_TRANSPARENT = 0x0004 + } + + /// + /// The set of flags that determine which members of this structure are being requested by the caller. One or more of the following values: + /// + [PInvokeData("shobjidl_core.h", MSDNShortId = "NS:shobjidl_core.DESKBANDINFO")] + [Flags] + public enum DBIM : uint + { + /// ptMinSize is requested. + DBIM_MINSIZE = 0x0001, + + /// ptMaxSize is requested. + DBIM_MAXSIZE = 0x0002, + + /// ptIntegral is requested. + DBIM_INTEGRAL = 0x0004, + + /// ptActual is requested. + DBIM_ACTUAL = 0x0008, + + /// wszTitle is requested. + DBIM_TITLE = 0x0010, + + /// dwModeFlags is requested. + DBIM_MODEFLAGS = 0x0020, + + /// crBkgnd is requested. + DBIM_BKCOLOR = 0x0040 + } + + /// + /// A value that receives a set of flags that specify the mode of operation for the band object. One or more of the following values: + /// + [PInvokeData("shobjidl_core.h", MSDNShortId = "NS:shobjidl_core.DESKBANDINFO")] + [Flags] + public enum DBIMF : uint + { + /// The band uses default properties. The other mode flags modify this flag. + DBIMF_NORMAL = 0x0000, + + /// + /// Windows XP and later: The band object is of a fixed sized and position. With this flag, a sizing grip is not displayed on the + /// band object. + /// + DBIMF_FIXED = 0x0001, + + /// + /// DBIMF_FIXEDBMP Windows XP and later: The band object uses a fixed bitmap (.bmp) file as its background. Note that backgrounds + /// are not supported in all cases, so the bitmap may not be seen even when this flag is set. + /// + DBIMF_FIXEDBMP = 0x0004, + + /// + /// The height of the band object can be changed. The ptIntegral member defines the step value by which the band object can be resized. + /// + DBIMF_VARIABLEHEIGHT = 0x0008, + + /// Windows XP and later: The band object cannot be removed from the band container. + DBIMF_UNDELETEABLE = 0x0010, + + /// The band object is displayed with a sunken appearance. + DBIMF_DEBOSSED = 0x0020, + + /// The band is displayed with the background color specified in crBkgnd. + DBIMF_BKCOLOR = 0x0040, + + /// + /// Windows XP and later: If the full band object cannot be displayed (that is, the band object is smaller than ptActual, a chevron + /// is shown to indicate that there are more options available. These options are displayed when the chevron is clicked. + /// + DBIMF_USECHEVRON = 0x0080, + + /// Windows XP and later: The band object is displayed in a new row in the band container. + DBIMF_BREAK = 0x0100, + + /// Windows XP and later: The band object is the first object in the band container. + DBIMF_ADDTOFRONT = 0x0200, + + /// Windows XP and later: The band object is displayed in the top row of the band container. + DBIMF_TOPALIGN = 0x0400, + + /// Windows Vista and later: No sizing grip is ever displayed to allow the user to move or resize the band object. + DBIMF_NOGRIPPER = 0x0800, + + /// + /// Windows Vista and later: A sizing grip that allows the user to move or resize the band object is always shown, even if that band + /// object is the only one in the container. + /// + DBIMF_ALWAYSGRIPPER = 0x1000, + + /// Windows Vista and later: The band object should not display margins. + DBIMF_NOMARGINS = 0x2000 + } + + /// + /// Used to obtain information about a band object. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of Windows 7. + /// + /// + /// + /// This interface also provides the methods of the IOleWindow and IDockingWindow interfaces, from which it inherits. + /// When to Implement + /// Implement IDeskBand if you are implementing a band object. + /// When to Use + /// + /// You do not call this interface directly. IDeskBand is used by the Shell or the browser to obtain display information for a + /// band object. + /// + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ideskband + [PInvokeData("shobjidl_core.h", MSDNShortId = "NN:shobjidl_core.IDeskBand")] + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("EB0FE172-1A3A-11D0-89B3-00A0C90A90AC")] + public interface IDeskBand : IDockingWindow + { + /// + /// Retrieves a handle to one of the windows participating in in-place activation (frame, document, parent, or in-place object window). + /// + /// A pointer to a variable that receives the window handle. + /// + /// This method returns S_OK on success. Other possible return values include the following. + /// + /// + /// Return code + /// Description + /// + /// + /// E_FAIL + /// The object is windowless. + /// + /// + /// E_OUTOFMEMORY + /// There is insufficient memory available for this operation. + /// + /// + /// E_UNEXPECTED + /// An unexpected error has occurred. + /// + /// + /// + /// + /// + /// Five types of windows comprise the windows hierarchy. When a object is active in place, it has access to some or all of these windows. + /// + /// + /// + /// Window + /// Description + /// + /// + /// Frame + /// The outermost main window where the container application's main menu resides. + /// + /// + /// Document + /// The window that displays the compound document containing the embedded object to the user. + /// + /// + /// Pane + /// + /// The subwindow of the document window that contains the object's view. Applicable only for applications with split-pane windows. + /// + /// + /// + /// Parent + /// + /// The container window that contains that object's view. The object application installs its window as a child of this window. + /// + /// + /// + /// In-place + /// + /// The window containing the active in-place object. The object application creates this window and installs it as a child of its + /// hatch window, which is a child of the container's parent window. + /// + /// + /// + /// + /// Each type of window has a different role in the in-place activation architecture. However, it is not necessary to employ a + /// separate physical window for each type. Many container applications use the same window for their frame, document, pane, and + /// parent windows. + /// + /// + [PreserveSig] + new HRESULT GetWindow(out HWND phwnd); + + /// Determines whether context-sensitive help mode should be entered during an in-place activation session. + /// if help mode should be entered; if it should be exited. + /// + /// + /// This method returns S_OK if the help mode was entered or exited successfully, depending on the value passed in . Other possible return values include the following.
+ ///
+ /// + /// + /// Return code + /// Description + /// + /// + /// E_INVALIDARG + /// The specified value is not valid. + /// + /// + /// E_OUTOFMEMORY + /// There is insufficient memory available for this operation. + /// + /// + /// E_UNEXPECTED + /// An unexpected error has occurred. + /// + /// + ///
+ /// + /// Applications can invoke context-sensitive help when the user: + /// + /// presses SHIFT+F1, then clicks a topic + /// presses F1 when a menu item is selected + /// + /// + /// When SHIFT+F1 is pressed, either the frame or active object can receive the keystrokes. If the container's frame receives the + /// keystrokes, it calls its containing document's IOleWindow::ContextSensitiveHelp method with set to + /// . This propagates the help state to all of its in-place objects so they can correctly handle the mouse + /// click or WM_COMMAND. + /// + /// + /// If an active object receives the SHIFT+F1 keystrokes, it calls the container's IOleWindow::ContextSensitiveHelp method with + /// set to , which then recursively calls each of its in-place sites until there + /// are no more to be notified. The container then calls its document's or frame's IOleWindow::ContextSensitiveHelp method with + /// set to . + /// + /// When in context-sensitive help mode, an object that receives the mouse click can either: + /// + /// Ignore the click if it does not support context-sensitive help. + /// + /// Tell all the other objects to exit context-sensitive help mode with ContextSensitiveHelp set to FALSE and then provide help for + /// that context. + /// + /// + /// + /// An object in context-sensitive help mode that receives a WM_COMMAND should tell all the other in-place objects to exit + /// context-sensitive help mode and then provide help for the command. + /// + /// + /// If a container application is to support context-sensitive help on menu items, it must either provide its own message filter so + /// that it can intercept the F1 key or ask the OLE library to add a message filter by calling OleSetMenuDescriptor, passing valid, + /// non-NULL values for the lpFrame and lpActiveObj parameters. + /// + /// + [PreserveSig] + new HRESULT ContextSensitiveHelp([MarshalAs(UnmanagedType.Bool)] bool fEnterMode); + + /// Instructs the docking window object to show or hide itself. + /// + /// Type: BOOL + /// + /// TRUE if the docking window object should show its window. FALSE if the docking window object should hide its + /// window and return its border space by calling SetBorderSpaceDW with zero values. + /// + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-showdw HRESULT ShowDW( BOOL + // fShow ); + [PreserveSig] + new HRESULT ShowDW([MarshalAs(UnmanagedType.Bool)] bool fShow); + + /// + /// Notifies the docking window object that it is about to be removed from the frame. The docking window object should save any + /// persistent information at this time. + /// + /// + /// Type: DWORD + /// Reserved. This parameter should always be zero. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-closedw HRESULT CloseDW( DWORD + // dwReserved ); + [PreserveSig] + new HRESULT CloseDW(uint dwReserved); + + /// + /// Notifies the docking window object that the frame's border space has changed. In response to this method, the IDockingWindow + /// implementation must call SetBorderSpaceDW, even if no border space is required or a change is not necessary. + /// + /// + /// Type: LPCRECT + /// Pointer to a RECT structure that contains the frame's available border space. + /// + /// + /// Type: IUnknown* + /// + /// Pointer to the site's IUnknown interface. The docking window object should call the QueryInterface method for this interface, + /// requesting IID_IDockingWindowSite. The docking window object then uses that interface to negotiate its border space. It is the + /// docking window object's responsibility to release this interface when it is no longer needed. + /// + /// + /// + /// Type: BOOL + /// Reserved. This parameter should always be zero. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + /// + /// + /// The prcBorder parameter contains the frame's entire available border space. The docking window object should negotiate its + /// border space and then use this information to position itself. + /// + /// + /// For example, if the docking window object requires 25 pixels at the top of the border space, it should negotiate for this + /// through the following steps: + /// + /// + /// + /// Allocate a BORDERWIDTHS structure and set its top member to 25. + /// + /// + /// Call RequestBorderSpaceDW to request the space. + /// + /// + /// If the request is approved by RequestBorderSpaceDW, call SetBorderSpaceDW to allocate the space. + /// + /// + /// + /// The docking window object can then position its window at prcBorder->left and prcBorder->top. The width of the docking + /// window object's window is determined by subtracting prcBorder->left from prcBorder->right. Its height is contained in the + /// top member of the BORDERWIDTHS structure. + /// + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-resizeborderdw HRESULT + // ResizeBorderDW( LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved ); + [PreserveSig] + new HRESULT ResizeBorderDW([In, Optional] PRECT prcBorder, [In, Optional, MarshalAs(UnmanagedType.IUnknown)] object punkToolbarSite, [MarshalAs(UnmanagedType.Bool)] bool fReserved = false); + + /// + /// Gets state information for a band object. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of + /// Windows 7. + /// + /// + /// + /// Type: DWORD + /// The identifier of the band, assigned by the container. The band object can retain this value if it is required. + /// + /// + /// Type: DWORD + /// The view mode of the band object. One of the following values: + /// DBIF_VIEWMODE_NORMAL + /// The band object is being displayed in a horizontal band. + /// DBIF_VIEWMODE_VERTICAL + /// The band object is being displayed in a vertical band. + /// DBIF_VIEWMODE_FLOATING + /// The band object is being displayed in a floating band. + /// DBIF_VIEWMODE_TRANSPARENT + /// The band object is being displayed in a transparent band. + /// + /// + /// Type: DESKBANDINFO* + /// + /// Pointer to a DESKBANDINFO structure that receives the band information for the object. The dwMask member of this + /// structure indicates the specific information that is being requested. + /// + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ideskband-getbandinfo HRESULT GetBandInfo( + // DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi ); + [PreserveSig] + HRESULT GetBandInfo(uint dwBandID, DBIF dwViewMode, ref DESKBANDINFO pdbi); + } + + /// + /// Exposes methods to enable and query translucency effects in a deskband object. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of Windows 7. + /// + /// + /// + /// This interface also provides the methods of the IOleWindow, IDockingWindow, and IDeskBand interfaces, from which it inherits. + /// + /// If implemented in all active deskbands, this interface allows the taskbar to be displayed using translucent effects. If an active + /// deskband does not implement IDeskBand2, then translucency is disabled for the entire taskbar. + /// + /// A deskband can implement IDeskBand2 as a communication conduit between itself and the taskbar as follows: + /// + /// + /// + /// Taskbar calls IDeskBand2::CanRenderComposited to learn if a deskband supports translucency. If one or more do not, the entire + /// taskbar is rendered opaque. + /// + /// + /// + /// + /// Taskbar calls IDeskBand2::SetCompositionState as appropriate in response to a user turning translucent effects on or off. The + /// taskbar should attempt to render itself translucent or opaque in response to this call. + /// + /// + /// + /// IDeskBand2::GetCompositionState is the counterpart of IDeskBand2::SetCompositionState. + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nn-shobjidl-ideskband2 + [PInvokeData("shobjidl.h", MSDNShortId = "NN:shobjidl.IDeskBand2")] + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("79D16DE4-ABEE-4021-8D9D-9169B261D657")] + public interface IDeskBand2 : IDeskBand + { + /// + /// Retrieves a handle to one of the windows participating in in-place activation (frame, document, parent, or in-place object window). + /// + /// A pointer to a variable that receives the window handle. + /// + /// This method returns S_OK on success. Other possible return values include the following. + /// + /// + /// Return code + /// Description + /// + /// + /// E_FAIL + /// The object is windowless. + /// + /// + /// E_OUTOFMEMORY + /// There is insufficient memory available for this operation. + /// + /// + /// E_UNEXPECTED + /// An unexpected error has occurred. + /// + /// + /// + /// + /// + /// Five types of windows comprise the windows hierarchy. When a object is active in place, it has access to some or all of these windows. + /// + /// + /// + /// Window + /// Description + /// + /// + /// Frame + /// The outermost main window where the container application's main menu resides. + /// + /// + /// Document + /// The window that displays the compound document containing the embedded object to the user. + /// + /// + /// Pane + /// + /// The subwindow of the document window that contains the object's view. Applicable only for applications with split-pane windows. + /// + /// + /// + /// Parent + /// + /// The container window that contains that object's view. The object application installs its window as a child of this window. + /// + /// + /// + /// In-place + /// + /// The window containing the active in-place object. The object application creates this window and installs it as a child of its + /// hatch window, which is a child of the container's parent window. + /// + /// + /// + /// + /// Each type of window has a different role in the in-place activation architecture. However, it is not necessary to employ a + /// separate physical window for each type. Many container applications use the same window for their frame, document, pane, and + /// parent windows. + /// + /// + [PreserveSig] + new HRESULT GetWindow(out HWND phwnd); + + /// Determines whether context-sensitive help mode should be entered during an in-place activation session. + /// if help mode should be entered; if it should be exited. + /// + /// + /// This method returns S_OK if the help mode was entered or exited successfully, depending on the value passed in . Other possible return values include the following.
+ ///
+ /// + /// + /// Return code + /// Description + /// + /// + /// E_INVALIDARG + /// The specified value is not valid. + /// + /// + /// E_OUTOFMEMORY + /// There is insufficient memory available for this operation. + /// + /// + /// E_UNEXPECTED + /// An unexpected error has occurred. + /// + /// + ///
+ /// + /// Applications can invoke context-sensitive help when the user: + /// + /// presses SHIFT+F1, then clicks a topic + /// presses F1 when a menu item is selected + /// + /// + /// When SHIFT+F1 is pressed, either the frame or active object can receive the keystrokes. If the container's frame receives the + /// keystrokes, it calls its containing document's IOleWindow::ContextSensitiveHelp method with set to + /// . This propagates the help state to all of its in-place objects so they can correctly handle the mouse + /// click or WM_COMMAND. + /// + /// + /// If an active object receives the SHIFT+F1 keystrokes, it calls the container's IOleWindow::ContextSensitiveHelp method with + /// set to , which then recursively calls each of its in-place sites until there + /// are no more to be notified. The container then calls its document's or frame's IOleWindow::ContextSensitiveHelp method with + /// set to . + /// + /// When in context-sensitive help mode, an object that receives the mouse click can either: + /// + /// Ignore the click if it does not support context-sensitive help. + /// + /// Tell all the other objects to exit context-sensitive help mode with ContextSensitiveHelp set to FALSE and then provide help for + /// that context. + /// + /// + /// + /// An object in context-sensitive help mode that receives a WM_COMMAND should tell all the other in-place objects to exit + /// context-sensitive help mode and then provide help for the command. + /// + /// + /// If a container application is to support context-sensitive help on menu items, it must either provide its own message filter so + /// that it can intercept the F1 key or ask the OLE library to add a message filter by calling OleSetMenuDescriptor, passing valid, + /// non-NULL values for the lpFrame and lpActiveObj parameters. + /// + /// + [PreserveSig] + new HRESULT ContextSensitiveHelp([MarshalAs(UnmanagedType.Bool)] bool fEnterMode); + + /// Instructs the docking window object to show or hide itself. + /// + /// Type: BOOL + /// + /// TRUE if the docking window object should show its window. FALSE if the docking window object should hide its + /// window and return its border space by calling SetBorderSpaceDW with zero values. + /// + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-showdw HRESULT ShowDW( BOOL + // fShow ); + [PreserveSig] + new HRESULT ShowDW([MarshalAs(UnmanagedType.Bool)] bool fShow); + + /// + /// Notifies the docking window object that it is about to be removed from the frame. The docking window object should save any + /// persistent information at this time. + /// + /// + /// Type: DWORD + /// Reserved. This parameter should always be zero. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-closedw HRESULT CloseDW( DWORD + // dwReserved ); + [PreserveSig] + new HRESULT CloseDW(uint dwReserved); + + /// + /// Notifies the docking window object that the frame's border space has changed. In response to this method, the IDockingWindow + /// implementation must call SetBorderSpaceDW, even if no border space is required or a change is not necessary. + /// + /// + /// Type: LPCRECT + /// Pointer to a RECT structure that contains the frame's available border space. + /// + /// + /// Type: IUnknown* + /// + /// Pointer to the site's IUnknown interface. The docking window object should call the QueryInterface method for this interface, + /// requesting IID_IDockingWindowSite. The docking window object then uses that interface to negotiate its border space. It is the + /// docking window object's responsibility to release this interface when it is no longer needed. + /// + /// + /// + /// Type: BOOL + /// Reserved. This parameter should always be zero. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + /// + /// + /// The prcBorder parameter contains the frame's entire available border space. The docking window object should negotiate its + /// border space and then use this information to position itself. + /// + /// + /// For example, if the docking window object requires 25 pixels at the top of the border space, it should negotiate for this + /// through the following steps: + /// + /// + /// + /// Allocate a BORDERWIDTHS structure and set its top member to 25. + /// + /// + /// Call RequestBorderSpaceDW to request the space. + /// + /// + /// If the request is approved by RequestBorderSpaceDW, call SetBorderSpaceDW to allocate the space. + /// + /// + /// + /// The docking window object can then position its window at prcBorder->left and prcBorder->top. The width of the docking + /// window object's window is determined by subtracting prcBorder->left from prcBorder->right. Its height is contained in the + /// top member of the BORDERWIDTHS structure. + /// + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-resizeborderdw HRESULT + // ResizeBorderDW( LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved ); + [PreserveSig] + new HRESULT ResizeBorderDW([In, Optional] PRECT prcBorder, [In, Optional, MarshalAs(UnmanagedType.IUnknown)] object punkToolbarSite, [MarshalAs(UnmanagedType.Bool)] bool fReserved = false); + + /// + /// Gets state information for a band object. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of + /// Windows 7. + /// + /// + /// + /// Type: DWORD + /// The identifier of the band, assigned by the container. The band object can retain this value if it is required. + /// + /// + /// Type: DWORD + /// The view mode of the band object. One of the following values: + /// DBIF_VIEWMODE_NORMAL + /// The band object is being displayed in a horizontal band. + /// DBIF_VIEWMODE_VERTICAL + /// The band object is being displayed in a vertical band. + /// DBIF_VIEWMODE_FLOATING + /// The band object is being displayed in a floating band. + /// DBIF_VIEWMODE_TRANSPARENT + /// The band object is being displayed in a transparent band. + /// + /// + /// Type: DESKBANDINFO* + /// + /// Pointer to a DESKBANDINFO structure that receives the band information for the object. The dwMask member of this + /// structure indicates the specific information that is being requested. + /// + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ideskband-getbandinfo HRESULT GetBandInfo( + // DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi ); + [PreserveSig] + new HRESULT GetBandInfo(uint dwBandID, DBIF dwViewMode, ref DESKBANDINFO pdbi); + + /// + /// Indicates the deskband's ability to be displayed as translucent. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of + /// Windows 7. + /// + /// + /// + /// Type: BOOL* + /// When this method returns, contains a BOOL indicating ability. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nf-shobjidl-ideskband2-canrendercomposited HRESULT + // CanRenderComposited( BOOL *pfCanRenderComposited ); + [PreserveSig] + HRESULT CanRenderComposited([MarshalAs(UnmanagedType.Bool)] out bool pfCanRenderComposited); + + /// + /// Sets the composition state. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of + /// Windows 7. + /// + /// + /// + /// Type: BOOL + /// TRUE to enable the composition state; otherwise, FALSE. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nf-shobjidl-ideskband2-setcompositionstate HRESULT + // SetCompositionState( BOOL fCompositionEnabled ); + [PreserveSig] + HRESULT SetCompositionState([MarshalAs(UnmanagedType.Bool)] bool fCompositionEnabled); + + /// + /// Gets the composition state. + /// + /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of + /// Windows 7. + /// + /// + /// + /// Type: BOOL* + /// When this method returns, contains a BOOL that indicates state. + /// + /// + /// Type: HRESULT + /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + /// + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nf-shobjidl-ideskband2-getcompositionstate HRESULT + // GetCompositionState( BOOL *pfCompositionEnabled ); + [PreserveSig] + HRESULT GetCompositionState([MarshalAs(UnmanagedType.Bool)] out bool pfCompositionEnabled); + } + + /// Receives information about a band object. This structure is used with the deprecated IDeskBand::GetBandInfo method. + // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/ns-shobjidl_core-deskbandinfo typedef struct DESKBANDINFO { DWORD + // dwMask; POINTL ptMinSize; POINTL ptMaxSize; POINTL ptIntegral; POINTL ptActual; WCHAR wszTitle[256]; DWORD dwModeFlags; COLORREF + // crBkgnd; } DESKBANDINFO; + [PInvokeData("shobjidl_core.h", MSDNShortId = "NS:shobjidl_core.DESKBANDINFO")] + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct DESKBANDINFO + { + /// + /// Type: DWORD + /// + /// The set of flags that determine which members of this structure are being requested by the caller. One or more of the following values: + /// + /// DBIM_MINSIZE + /// ptMinSize is requested. + /// DBIM_MAXSIZE + /// ptMaxSize is requested. + /// DBIM_INTEGRAL + /// ptIntegral is requested. + /// DBIM_ACTUAL + /// ptActual is requested. + /// DBIM_TITLE + /// wszTitle is requested. + /// DBIM_MODEFLAGS + /// dwModeFlags is requested. + /// DBIM_BKCOLOR + /// crBkgnd is requested. + /// + public DBIM dwMask; + + /// + /// Type: POINTL + /// + /// A POINTL structure that receives the minimum size of the band object. The minimum width is given in the POINTL + /// structure's x member and the minimum height is given in the y member. + /// + /// + public Size ptMinSize; + + /// + /// Type: POINTL + /// + /// A POINTL structure that receives the maximum size of the band object. The maximum height is given in the POINTL + /// structure's y member and the x member is ignored. If the band object has no limit for its maximum height, (LONG)-1 + /// should be used. + /// + /// + public Size ptMaxSize; + + /// + /// Type: POINTL + /// + /// A POINTL structure that receives the sizing step value (increment) in which the band object is resized. The vertical step value + /// is given in the POINTL structure's y member and the x member is ignored. + /// + /// The dwModeFlags member must contain the DBIMF_VARIABLEHEIGHT flag; otherwise, ptIntegral is ignored. + /// + public Size ptIntegral; + + /// + /// Type: POINTL + /// + /// A POINTL structure that receives the ideal size of the band object. The ideal width is given in the POINTL structure's + /// x member and the ideal height is given in the y member. The band container attempts to use these values, but the + /// band is not guaranteed to be this size. + /// + /// + public Size ptActual; + + /// + /// Type: WCHAR[256] + /// A WCHAR buffer that receives the title of the band. + /// + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + public string wszTitle; + + /// + /// Type: DWORD + /// + /// A value that receives a set of flags that specify the mode of operation for the band object. One or more of the following values: + /// + /// DBIMF_NORMAL + /// The band uses default properties. The other mode flags modify this flag. + /// DBIMF_FIXED + /// + /// Windows XP and later: The band object is of a fixed sized and position. With this flag, a sizing grip is not displayed on + /// the band object. + /// + /// DBIMF_FIXEDBMP + /// + /// Windows XP and later: The band object uses a fixed bitmap (.bmp) file as its background. Note that backgrounds are not + /// supported in all cases, so the bitmap may not be seen even when this flag is set. + /// + /// DBIMF_VARIABLEHEIGHT + /// + /// The height of the band object can be changed. The ptIntegral member defines the step value by which the band object can + /// be resized. + /// + /// DBIMF_UNDELETEABLE + /// Windows XP and later: The band object cannot be removed from the band container. + /// DBIMF_DEBOSSED + /// The band object is displayed with a sunken appearance. + /// DBIMF_BKCOLOR + /// The band is displayed with the background color specified in crBkgnd. + /// DBIMF_USECHEVRON + /// + /// Windows XP and later: If the full band object cannot be displayed (that is, the band object is smaller than + /// ptActual, a chevron is shown to indicate that there are more options available. These options are displayed when the + /// chevron is clicked. + /// + /// DBIMF_BREAK + /// Windows XP and later: The band object is displayed in a new row in the band container. + /// DBIMF_ADDTOFRONT + /// Windows XP and later: The band object is the first object in the band container. + /// DBIMF_TOPALIGN + /// Windows XP and later: The band object is displayed in the top row of the band container. + /// DBIMF_NOGRIPPER + /// Windows Vista and later: No sizing grip is ever displayed to allow the user to move or resize the band object. + /// DBIMF_ALWAYSGRIPPER + /// + /// Windows Vista and later: A sizing grip that allows the user to move or resize the band object is always shown, even if + /// that band object is the only one in the container. + /// + /// DBIMF_NOMARGINS + /// Windows Vista and later: The band object should not display margins. + /// + public DBIMF dwModeFlags; + + /// + /// Type: COLORREF + /// + /// A COLORREF structure that receives the background color of the band. The dwModeFlags member must contain the + /// DBIMF_BKCOLOR flag; otherwise, crBkgnd is ignored. + /// + /// + public COLORREF crBkgnd; + } + } +} \ No newline at end of file