簡體   English   中英

FLTK:當窗口聚焦於MacOS時發生的事件

[英]FLTK: Event when a window gets focus on MacOS

使用FLTK,我正在編寫一個使用多個窗口的桌面應用程序。 該應用程序管理一個打開的窗口列表,並在菜單中顯示這些行:

for( int i = 0; i < windows.size(); ++i ) {
    menu->add(("&Windows/"+windows[i].name).c_str(), 0, MyMenuCallback);
}

現在,我想在最上方的窗口名稱前面設置一個對勾標記:

flags = FL_MENU_TOGGLE|FL_MENU_VALUE;
menu->add(("&Windows/"+windows[i].name).c_str(), 0, MyMenuCallback, 0, flags);

我一直堅持安裝一個事件處理程序,只要最上面的窗口發生變化,該事件處理程序就會被調用。 我希望Fl::add_handler( &genericEventHandler ); 只要焦點改變就會被調用,但事實並非如此。 所以,我的問題是:當窗口焦點改變時,如何獲得通知?

您應該繼承Fl_Window類,以重寫其handle方法來監視FL_FOCUS和FL_UNFOCUS事件。 這是一個示例:

class MyWindow : public Fl_Window {
public:
    MyWindow(int X,int Y,int W,int H, const char* title) : Fl_Window (X, Y, W, H, title) {}

    int handle(int e) {
        switch(e) {
            case FL_FOCUS:
                std::cout << "Window " << label() << " is focused" << std::endl;
                break;
            case FL_UNFOCUS:
                std::cout << "Window " << label() << " has lost focus" << std::endl;
                break;
        }
        return(Fl_Window::handle(e));
    }
};

int main() {
    MyWindow win1(100, 100, 200,200, "Window 1");
    win1.show();

    MyWindow win2(350, 100, 200,200, "Window 2");
    win2.show();

    return Fl::run();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM