C++源码:
// The class HDevWindowStack can be used to emulate the behavior of HDevelop
// graphics windows for HALCON graphics windows. It is primarily intended for
// usage in C++ programs exported from HDevelop programs containing HDevelop
// window operators (e.g. dev_set_window, dev_open_window, dev_close_window...)
class LIntExport HDevWindowStack
{public: // Push handle for new window (dev_open_window)static void Push(const HTuple &win_handle);// Pop handle for closed window (dev_close_window)static HTuple Pop();// Get handle for active windowstatic HTuple GetActive();// Set active window (dev_set_window)static void SetActive(const HTuple &win_handle);// Test if any open window is availablestatic bool IsOpen();// Close all open windowsstatic void CloseAll();};
类HDevWindowStack可以用来模拟HALCON图形窗口的HDevelop图形窗口的行为。它主要用于从包含HDevelop窗口操作符的HDevelop程序中导出的c++程序(例如dev_set_window, dev_open_window, dev_close_window…)
此类包含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(); 关闭所有窗口,遍历底层的句柄队列,一一关闭并销毁