2017-09-15 5 views
0

documentation for Fl_Tree in FLTK 1.3.4은 말할 때 :Fl_Tree 콜백 FL_WHEN_RELEASE

콜백()가 호출 될 때()

  • FL_WHEN_RELEASE의 값에 따라 - 마우스 왼쪽 버튼가에 해제 될 때 콜백이 호출 항목
  • FL_WHEN_CHANGED이 - 마우스를 왼쪽 때 호출되는 콜백 변경 선택 상태

하지만 마우스를 놓으면 둘 다 차이점을 볼 수없는 콜백을받을 수 없습니다. 어떤 아이디어?

#include <FL/Fl.H> 
#include <FL/Fl_Double_Window.H> 
#include <FL/Fl_Tree.H> 

static void cb_(Fl_Tree*, void*) 
{ 
    printf ("callback\n"); 
} 

int main() 
{ 
    Fl_Double_Window* w = new Fl_Double_Window(325, 325); 
    Fl_Tree* o = new Fl_Tree(25, 25, 255, 245); 
    o->callback((Fl_Callback*)cb_); 
    o->when(FL_WHEN_RELEASE); 
    o->add("foo/bar"); 
    o->add("foo/baz"); 
    o->end(); 
    w->show(); 
    return Fl::run(); 
} 

이 스 니펫은 FL_WHEN_RELEASE가 설정되어 있어도 모든 변경 사항에 대해 "콜백"을 출력합니다.

답변

1

배포본을 다운로드 한 경우 test/input.cxx 및 test/tree.cxx를 살펴보십시오. 두 경우 모두 선택할 때 다른 테스트가 있습니다.

WHEN_CHANGED는 편집 상자, 브라우저 및 표에서만 의미가 있습니다. 입력 한대로 데이터를 확인할 수 있습니다. WHEN_RELEASE는 발생하지 않습니다. 다른 모든 위젯의 경우에는 거의 차이가 없습니다.

마다 해고 릴리스에 대한 위해 편집

, 3 가지 옵션

  1. 소스 FL_Tree.cxx을 수정

    이있다. FL_Tree :: select를 찾으십시오. alreadySelected를 false로 변경하십시오. 같은 루틴에서 소스를 보면
  2. , 라이브러리가 10301로 설정 FLTK_ABI_VERSION로 구축되면 더 아래, 그것은이 재 선택을 호출,

    #if FLTK_ABI_VERSION >= 10301 
    

    을 말한다하지만, 전체도 있습니다 모든 위젯에 영향을주기 때문에이 #define이 설정되면 다른 작업이로드됩니다.

  3. FL_TREE :: select의 #if FLTK_ABI_VERISON 및 해당 #endif를 주석 처리합니다.

+0

필자도 테스트/트리 예제를 사용해 보았어야합니다. 여기서 문서가 틀렸다는 말입니까? ** FL_WHEN_RELEASE - 항목에서 마우스 왼쪽 버튼을 놓을 때 호출되는 콜백 ** – Andy

+0

둘 다 정확합니다. 단지 컨텍스트 일뿐입니다. 트리보기에서 항목을 부분적으로 선택할 수 없으므로 변경 및 릴리스는 모두 동일한 동작을 갖습니다. 편집 상자에서 부분적으로 항목을 선택하여 다른 동작을 사용할 수 있습니다. – cup

+0

그러나 Fl_Tree에서 이미 선택된 항목을 클릭하면 실제로 차이가납니다. 다른 항목이 이전에 선택된 경우 FL_WHEN_CHANGED에 대한 콜백이 필요합니다 (선택이 변경 되었기 때문에). 하지만 이미 선택한 항목을 다시 클릭하면 FL_WHEN_RELEASE에 대한 콜백이 필요합니다. – Andy