halcon導出類---HDevWindowStack詳解


  在HDevelop中編寫好的程序在導出時,Halcon會幫我們轉換成我們需要的語言,比如C++。例:HDevelop中有如下語句需要導出:

  dev_close_window()

  Halcon導出成C++語言就成了如下語句:

  if (HDevWindowStack::IsOpen())
    close_window(HDevWindowStack::Pop());

  了解MFC的應該不難理解,這兩句在底層做了什么!下面讓我來講解一下,呵呵

  首先來看看HDevWindowStack這個類,其實這個類很簡單,來看下頭文件:

class LIntExport HDevWindowStack
{
public:  

  static void Push(const HTuple &win_handle);
  static HTuple Pop();       // no window open -> return empty tuple
  static HTuple GetActive(); // no window open -> return -1
  static void SetActive(const HTuple &win_handle); // no window open -> done
  static bool IsOpen();
  static void CloseAll();
};

  只有6個靜態方法,下面一一講解此6個方法:

  

static void Push(const HTuple &win_handle);   眾所周知,要想對某一窗口操作,必須知道窗口的句柄(可能這里說的太絕對,duilib除外),那么halcon采用了前者的思想,它底層就維護了這樣一個窗口句柄,當然圖形顯示的句柄可能不止一個,所以這里的參數使用HTuple,這個結構就像一個水桶結構一樣,可以裝其他不同類型的數據結構。HTuple是HALCON跨平台的基礎。如果沒有HTuple,halcon什么也做不到!言歸正傳,此方法就是將此句柄下發給halcon,halcon將此句柄保存起來,以后便可對此句柄所指的窗口進行任何操作,包括銷毀這個窗口!

 static HTuple Pop();  這個方法就是銷毀這個句柄和句柄所指的窗口了,沒什么好說的,如何銷毀的,這里我只能猜一下:halcon底層維護了一個句柄隊列,每Push一個句柄,在隊列中添加一個句柄,相反每Pop一次,銷毀這個句柄所指向的窗口,正如文中開始的兩句話,首先判斷窗口是否打開,如果打開了,就調用此Pop方法,銷毀窗口,在后文中將重新打開窗口!

 static HTuple GetActive(); 此方法就是從halcon的句柄隊列中獲取一個處於激活狀態的窗口句柄,用於繪圖操作,比如顯示圖像:read_image(),再調disp_obj(),當然參數是這里獲取的窗口句柄

static void SetActive(const HTuple &win_handle);  功如其名,就是將某一個句柄所指的窗口處於激活狀態,這個我在halcon中暫時沒有用到。

static bool IsOpen();  判斷某一窗口是否打開,文章開頭有使用,如果打開了,則關閉
static void CloseAll(); 關閉所有窗口,遍歷底層的句柄隊列,一一關閉並銷毀


added by xiejl
 


  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM