標籤:style blog color 使用 檔案 資料
在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