2014-05-04 103 views
1

我想在我的應用程序的任務欄中實現DeskBand,我已經檢查了documentation但它非常稀疏。它沒有解釋如何實現IDeskBand2接口。無法完成實現IDeskBand2接口

我發現網上很少有關於這方面的信息,我發現的東西不起作用。我發現在CodeProject上看起來很有希望的一段代碼只不過是編譯時錯誤的源泉,直到今天,我偶然發現了this網站。

到目前爲止,我所得到的是:

class COMInterop 
{ 
    [ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    [Guid("79D16DE4-ABEE-4021-8D9D-9169B261D657")] 

    public interface IDeskBand2 
    { 
     void GetWindow(out System.IntPtr phwnd); 
     void ContextSensitiveHelp([In] bool fEnterMode); 
     void ShowDW([In] bool fShow); 
     void CloseDW([In] UInt32 dwReserved); 
     void ResizeBorderDW(IntPtr prcBorder, [In, MarshalAs(UnmanagedType.IUnknown)] Object punkToolbarSite, bool fReserved); 

     void GetBandInfo(UInt32 dwBandID, UInt32 dwViewMode, ref DESKBANDINFO pdbi); 
     bool CanRenderComposited(); 
     bool GetCompositionState(); 
     void SetCompositionState(bool fCompositionEnabled); 
    } 
} 

被稱爲COMInterop.cs一個類文件中。

我現在的問題是在第24行。它說The type or namespace 'DESKBANDINFO無法找到。 (是否缺少using指令或程序集引用?)

如何實現這一點 - 你有一個DeskBand任何文檔(見下圖)用於Windows 7+?

enter image description here

+0

也許這[P/Invoke信息](http://pinvoke.net/default.aspx/Structures/DESKBANDINFO.html)可以幫到你嗎? – pasty

+0

感謝@pasty,但現在它說無法找到DBIM。我正在嘗試在線搜索以查看原因。 –

+0

您可以在P/Invoke網站搜索您需要的結構... – pasty

回答

4

DESKBAND信息是一個結構文檔here。您可以在pinvoke.net上找到C#翻譯。

[StructLayout(LayoutKind.Sequential)] 
public struct POINT 
{ 
    public int X; 
    public int Y; 

    public POINT(int x, int y) 
    { 
     this.X = x; 
     this.Y = y; 
    } 

    public POINT(System.Drawing.Point pt) : this(pt.X, pt.Y) { } 

    public static implicit operator System.Drawing.Point(POINT p) 
    { 
     return new System.Drawing.Point(p.X, p.Y); 
    } 

    public static implicit operator POINT(System.Drawing.Point p) 
    { 
     return new POINT(p.X, p.Y); 
    } 
} 

[StructLayout (LayoutKind.Sequential, CharSet=CharSet.Unicode)] 
struct DESKBANDINFO { 
    public uint dwMask; 
    public Point ptMinSize; 
    public Point ptMaxSize; 
    public Point ptIntegral; 
    public Point ptActual; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] 
    public String wszTitle; 
    public uint dwModeFlags; 
    public Int32 crBkgnd; 
} 

桌面帶API documentation明確指出它是一個棄用的API。它說:

重要你應該在地方臺帶,這是不支持作爲Windows 7中的

換言之使用縮略圖工具欄在新的發展,你應該幾乎肯定不會用deskband API解決你的問題。

也就是說,如果您想了解如何使用deskband API,請在C++中查找示例代碼。不要將搜索限制在C#中。期望在C++中找到好的例子,但不在C#中。

+0

我正在使用Windows 8.1並且在任務欄上,Microsoft已在任務欄上實施了名爲觸摸鍵盤的DeskBand - 您可以點擊它並打開觸摸鍵盤。如果它被棄用,那麼我假設他們不打算在短期內擺脫它。另外,我不喜歡縮略圖工具欄,它們與我正在嘗試做的完全相反。 –

+0

我只是告訴你官方的線路是什麼。顯然,你可以隨心所欲。 ;-) –

+0

感謝您的回答@David,這只是一個我一直試圖找出很長時間的個人項目。我真的需要完成它。即使它未來可能不工作:)所有這些錯誤都消失了!我仍然不確定要調用哪些方法來實際讓DeskBand出現在任務欄上,以及在何處調用這些方法。 –