1. 程式人生 > >《連載 | 物聯網框架ServerSuperIO教程》- 13.自定義檢視顯示介面開發,滿足不同的顯示需求

《連載 | 物聯網框架ServerSuperIO教程》- 13.自定義檢視顯示介面開發,滿足不同的顯示需求

目       錄

13.自定義檢視顯示介面開發,滿足不同的顯示需求... 2

13.1        概述... 2

13.2        檢視顯示介面... 2

13.3        裝置驅動開發及注意事項... 4

13.4        執行效果... 5

13.自定義檢視顯示介面開發,滿足不同的顯示需求

13.1     概述

    如果ServerSuperIO部署在服務端,那麼完全沒有必要在SSIO檢視介面上進行檢視顯示開發,可以用WEB端來做。如果ServerSuperIO部署在PC機端或者嵌入式主機,並且帶現場顯示螢幕,那麼就需要有實時顯示的介面,以及滿足現場使用者的不同需求。針對這種情況,ServerSuperIO內部提供了檢視顯示介面,裝置驅動提取完成資料後,可以把資料實時傳輸給檢視介面,可以立即顯示,也可以先快取資料,定時進行顯示;  可以幾個裝置驅動的資料顯示在一個檢視,也可以全部裝置驅動的資料顯示在一個檢視。示意如下圖:

 

13.2     檢視顯示介面

    檢視抽象類GraphicsShow繼承自IGraphicsShow介面,進行二次開發可以繼承GraphicsShow抽象類。在ServerSuperIO上開發好檢視介面後,完全可以在二次開發套件下掛載和執行(二次開發套件下載)。在進行二次開時,有幾點特別需要注意:

  1. ShowGraphics(IWin32Window windows)介面,windows引數是當前顯示檢視的父窗體,如果父窗體設定了IsMdiContainer=true,那麼可以設定當前顯示檢視showForm.MdiParent = (Form)windows。
  2. UpdateDevice(string devid, object obj)實時資料更新介面,如果二次開發的檢視的例項增加到當前服務例項中,那麼裝置驅動會通過OnDeviceObjectChanged資料改變事件通知檢視的UpdateDevice介面進行資料更新。OnDeviceObjectChanged何時觸發,完全由二次開發者自己把控。
  3. OnGraphicsShowClosed檢視關閉事件介面,當前檢視進行關閉時,一定要觸發這個事件,ServerSuperIO會自動釋放資源,並把當前檢視例項從服務例項中銷燬,以便下次能夠正常顯示。
  4. MouseRightContextMenu上下文選單顯示介面,如果右鍵單擊當前檢視顯示的某個裝置檢視時,可以呼叫這個上下文選單介面,會呼叫裝置驅動IRunDevice介面的ShowContextMenu函式,可以在這個函式中展示上下文選單。這個功能特別有用,因為針對不同型別的裝置驅動功能不一樣,可以通過上下文選單自定義該型別裝置的功能特性。

   GraphicsShow介面程式碼定義如下:

public interface IGraphicsShow : IPlugin
    {
        /// <summary>
        ///     檢視Key,要求唯一
        /// </summary>
        string ShowKey { get;}

        /// <summary>
        ///     檢視名稱
        /// </summary>
        string ShowName { get; }

        /// <summary>
        /// 顯示窗體
        /// </summary>
        /// <param name="windows"></param>
        void ShowGraphics(IWin32Window windows);

        /// <summary>
        ///
        /// </summary>
        void CloseGraphics();

        /// <summary>
        ///     更新裝置
        /// </summary>
        /// <param name="devCode">裝置code</param>
        /// <param name="obj">裝置物件</param>
        void UpdateDevice(string devCode, object obj);

        /// <summary>
        ///     移除裝置
        /// </summary>
        /// <param name="devCode">裝置code</param>
        void RemoveDevice(string devCode);

        /// <summary>
        ///     關閉窗體事件時發生
        /// </summary>
        event GraphicsShowClosedHandler GraphicsShowClosed;

        /// <summary>
        ///     單擊右鍵,呼叫上下文選單
        /// </summary>
        event MouseRightContextMenuHandler MouseRightContextMenu;

        /// <summary>

        /// 是否被釋放
        /// </summary>
        bool IsDisposed { get; }
    }

13.3     裝置驅動開發及注意事項

  1. 給檢視例項傳遞資料資訊,通過OnDeviceObjectChanged事件。程式碼如下:
List<string> list = new List<string>();
list.Add(_devicePara.DeviceCode);
list.Add(_devicePara.DeviceName);
list.Add(_deviceDyn.Dyn.Flow.ToString());
list.Add(_deviceDyn.Dyn.Signal.ToString());
OnDeviceObjectChanged(list.ToArray());

     2.顯示上下文選單,檢視介面的MouseRightContextMenu會呼叫裝置驅動的ShowContextMenu介面函式。程式碼如下:

 public override void ShowContextMenu()
        {
            this._contextMenuComponent.ContextMenuStrip.Show(Cursor.Position);
        }

13.4     執行效果

 

物聯網&整合技術(.NET) QQ群54256083