none
IDeskBand2 RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte mein DeskBand (in der TaskBar) transparent machen. Dafür ist IDeskBand2 vorgesehen. Ich nutze Windows 7 Professional 64-bit.

    Meine COM-Scnittstelle und die Implemetierung:

     

      <ComImport()> _
      <GuidAttribute("79D16DE4-ABEE-4021-8D9D-9169B261D657")> _
      <InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)> _
      Public Interface IDeskBand2
        Sub GetBandInfo(ByVal dwBandID As UInt32, ByVal dwViewMode As DBIF, ByRef pdbi As DESKBANDINFO)
    
        Sub CanRenderComposited(ByRef pfCanRenderComposited As Boolean)
        Sub GetCompositionState(ByRef pfCompositionEnabled As Boolean)
        Sub SetCompositionState(<MarshalAs(UnmanagedType.Bool)> ByVal fCompositionEnabled As Boolean)
      End Interface<br/>
    <br/>
        Public Sub CanRenderComposited(ByRef pfCanRenderComposited As Boolean) Implements IDeskBand2.CanRenderComposited<br/>
          pfCanRenderComposited = True<br/>
        End Sub<br/>
    <br/>
        Public Sub GetCompositionState(ByRef pfCompositionEnabled As Boolean) Implements IDeskBand2.GetCompositionState<br/>
          pfCompositionEnabled = compositionEnabled<br/>
        End Sub<br/>
    <br/>
        Public Sub SetCompositionState(ByVal fCompositionEnabled As Boolean) Implements IDeskBand2.SetCompositionState<br/>
          compositionEnabled = fCompositionEnabled<br/>
        End Sub<br/>
        Private compositionEnabled As Boolean = True<br/>
    
    

     

    Leider sind der von mir implementierte Button als auch der Hintergrund (habe diesen zu Testzwecken absichtlich etwas größer gemacht als den Button) nach der Implementierung immer noch nicht transparent.

    CanRenderComposited wird von der TaskBar bei der Aktivierung nicht aufgerufen, die beiden anderen Methoden schon. Liegt es daran?

    Kennt sich jemand mit dem Interface IDeskBand2 aus?

    Danke und viele Grüße, Stefan

    PS: In der msdn-Dokumentation habe ich schon nachgelesen und die Code-Beispiele in C# habe ich mir auch schon angeschaut.

     

    Samstag, 4. September 2010 15:22

Antworten

  • Hallo Stefan,

    ich möchte mein DeskBand (in der TaskBar) transparent machen. Dafür ist IDeskBand2 vorgesehen.

    nein, mit IDeskBand2 sagst Du der Taskleiste nur "Hallo, ich kann auch transparent." Wenn Du das nicht machst, wird die Transparenz für die Taskleiste deaktiviert. Wie Du Dein Deskband transparent bekommst, ist dabei Dir selber überlassen. Ich gehe davon aus, dass Du hierzu P/Invoke auf die Methoden des Desktop Window Managers ausführen musst und den Hintergrund Deines Deskband bzw. der darauf angeordneten Steuerelemente selber zeichnen musst. Google bzw. Bing sind bei der Suche aber auch nicht wirklich hilfreich.

    Windows Vista Aero Pt. 1 - Adding Glass to a Windows Forms Application
    http://blogs.msdn.com/b/tims/archive/2006/04/18/578637.aspx

    Adding or Retrofitting Aero Glass into Legacy Windows Applications (C++)
    http://www.codeproject.com/KB/vista/AeroGlassLegacyWindowsApp.aspx


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    • Als Antwort markiert maustiger30 Sonntag, 5. September 2010 11:49
    Sonntag, 5. September 2010 10:48
    Moderator

Alle Antworten

  • Hallo Stefan,

    ich möchte mein DeskBand (in der TaskBar) transparent machen. Dafür ist IDeskBand2 vorgesehen.

    nein, mit IDeskBand2 sagst Du der Taskleiste nur "Hallo, ich kann auch transparent." Wenn Du das nicht machst, wird die Transparenz für die Taskleiste deaktiviert. Wie Du Dein Deskband transparent bekommst, ist dabei Dir selber überlassen. Ich gehe davon aus, dass Du hierzu P/Invoke auf die Methoden des Desktop Window Managers ausführen musst und den Hintergrund Deines Deskband bzw. der darauf angeordneten Steuerelemente selber zeichnen musst. Google bzw. Bing sind bei der Suche aber auch nicht wirklich hilfreich.

    Windows Vista Aero Pt. 1 - Adding Glass to a Windows Forms Application
    http://blogs.msdn.com/b/tims/archive/2006/04/18/578637.aspx

    Adding or Retrofitting Aero Glass into Legacy Windows Applications (C++)
    http://www.codeproject.com/KB/vista/AeroGlassLegacyWindowsApp.aspx


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    • Als Antwort markiert maustiger30 Sonntag, 5. September 2010 11:49
    Sonntag, 5. September 2010 10:48
    Moderator
  • Hallo Thorsten,

    Danke für Deine hilfreiche Antwort. Meine Frage ist damit beantwortet.

    Ich habe selber noch rumprobiert. Die Reihenfolge des Interfaces muss geändert werden s.u.

    Im Übrigen muss pf C anRenderComposited = True sein, sonst erhält man bei Aktivierung der Symbolleiste die Meldung, dass diese mit dieser Version von Windows (Windows 7) nicht kompatibel ist. Die Meldung erhält man auch, wenn IDeskBand2 nicht implementiert wurde.

    Außerdem können m.E. DeskBands nicht durch Thumbnail Toolbars ersetzt werden, wie von Microsoft gefordert (Note   We recommend that you use thumbnail toolbars in new development in place of desk bands.).

    Einen schönen Sonntag wünscht Dir Stefan.

      ''' <summary>
      ''' Die Schnittstelle ermöglicht es das BandObject transparent darzustellen.
      ''' Die Vererbungsreihenfolge ist: IOleWindow, IDockingWindow, IDeskBand, IDeskBand2.
      ''' </summary>
      ''' <remarks>Es müssen genau 4 Methoden in einer fixierten Reihenfolge vorgegeben weden.</remarks>
      <ComImport()> _
      <GuidAttribute("79D16DE4-ABEE-4021-8D9D-9169B261D657")> _
      <InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)> _
      Public Interface IDeskBand2
        ''' <summary>
        ''' IDeskBand Methode. Dadurch kann der IE bzw. Explorer Name, Größe und Darstellungsform des BandObjects abrufen.
        ''' </summary>
        ''' <param name="dwBandID">Vom Container zugewiesene ID.</param>
        ''' <param name="dwViewMode">Bestimmt den Anzeigemodus.</param>
        ''' <param name="pdbi">Bestimmt das Aussehen und die Funktionsweise.</param>
        Sub GetBandInfo(ByVal dwBandID As UInt32, ByVal dwViewMode As DBIF, ByRef pdbi As DESKBANDINFO)
        ''' <summary>
        ''' IDeskBand2 Methode. Gibt den Status der Transparenz zurück.
        ''' </summary>
        ''' <param name="pfCompositionEnabled"><c>True</c>, falls transparent, sonst <c>False</c>.</param>
        Sub GetCompositionState(ByRef pfCompositionEnabled As Boolean)
        ''' <summary>
        ''' IDeskBand2 Methode. Gibt an, ob das BandObject transparent angezeigt werden kann.
        ''' </summary>
        ''' <param name="pfCanRenderComposited">Falls<c>True</c>, ist Transparenz möglich, sonst<c>False</c>.</param>
        Sub CanRenderComposited(ByRef pfCanRenderComposited As Boolean)
        ''' <summary>
        ''' IDeskBand2 Methode. Legt Transparenz fest.
        ''' </summary>
        ''' <param name="fCompositionEnabled"><c>True</c>ermöglicht es, Transparenz festzulegen, sonst<c>False</c>.</param>
        Sub SetCompositionState(<MarshalAs(UnmanagedType.Bool)> ByVal fCompositionEnabled As Boolean)
      End Interface

    Sonntag, 5. September 2010 11:48