2014-06-20 41 views
0

我有wxWidget應用程序,我創建了一個滾動窗口檢測水平滾動可見或不可見

wxScrolledWindow *pScrollingBucket = new wxScrolledWindow(this, wxID_ANY); 
wxPanel* pPanel1 = new wxPanel(pScrollingBucket , wxID_ANY); 
wxPanel* pPanel2 = new wxPanel(pScrollingBucket , wxID_ANY); 

wxBoxSizer* pSizerHorz = new wxBoxSizer(wxHORIZONTAL); 
pSizerHorz->Add(pPanel1 , 1, wxGROW|wxALL, 0); 
pSizerHorz->Add(pPanel2 , 1, wxGROW|wxALL, 0); 
pScrollingBucket->SetSizer(pSizerHorz); 
pScrollingBucket->FitInside(); 
pScrollingBucket->SetScrollRate(3, 0); 

每一件事情按預期工作。在全屏幕上沒有滾動,當我正在調整大小,Scroll正在調整,並獲得主窗口的OnSize()事件處理程序。在Onsize()我想檢測滾動條是否可見。 任何與簡單的Win32 API的幫助也被接受。

不建議HasScrollbar(),它只告訴該窗口有wxHSCROLL創建標誌或不。

+0

是否可以從'wxScrolledWindow'派生並覆蓋'wxWindow :: SetScrollbar()'?您可以檢測滾動條何時開啓和關閉。 – TobiMcNamobi

回答

0

嘗試這種平淡的Win32代碼:

function IsScrollBarVisible(AWindow: HWND; AVert: Boolean): Boolean; 
var 
    Code: Integer; 
    Info: TScrollInfo; 
begin 
    if AVert then Code := SB_VERT 
      else Code := SB_HORZ; 
    Code := SB_VERT; 
    Info.cbSize := SizeOf(Info); 
    Info.fMask := SIF_RANGE or SIF_PAGE; 
    GetScrollInfo(AWindow, Code, Info); 
    Result := (Info.nMin <> Info.nMax) and (Info.nPage <= Info.nMax); 
end; 
0

您可以使用wxScrolled::IsScrollbarShown(wxHORIZONTAL)對於這一點,但你確定你真的需要它?根據是否顯示滾動條,不得不採取不同的操作是非常不尋常的,您還應該考慮到某些平臺並不總是顯示滾動條,而只是在鼠標懸停在窗口邊緣附近時將其展開。