using System;
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;
}
}
}