[英]How to get the newly selected page index upon a notebook changed page event with wxHaskell?
下面是一個Haskell程序,它將啟動wxHaskell筆記本。
它起作用,除了我無法處理頁面更改事件以獲取新選擇頁面的索引。 相反,我得到了上一個(請參見下面的代碼中的“問題”)。
在C wxNotebook類參考文檔 (請參閱有關getSelection的部分)以及wxBookCtrlEvent類參考文檔的“詳細說明”部分中, 都有關於此行為的警告,但我根本不了解如何使用它。
誰能給我展示一些筆記本的工作代碼,當用戶選擇新頁面時(單擊其標題),該筆記本將獲得新頁面索引?
第二個問題:我不明白-???旁邊的參數0是什么。
先感謝您!
module Main where
import Graphics.UI.WX
import Graphics.UI.WXCore
main :: IO ()
main =
start $
do
f <- frame []
nbk <- notebook f []
pages <- sequence [ do
p <- panel nbk []
return $ tab ("Page "++show i) (container p $ label ("Page " ++ show i))
| i <- [0..3]]
set f [layout := fill $ tabs nbk pages,clientSize := sz 300 100]
let h event = case event of
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED ->
do
i <- notebookGetSelection nbk -- PROBLEM: gives the OLD index
infoDialog f "Event otification" $ "Notebook selected page: " ++ show i
propagateEvent
windowOnEvent nbk
[wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED]
0 -- ???
h
這個看起來很奇怪的代碼對我有用。 我在日語(?)博客上找到了它。 不幸的是我沒有鏈接了。
import Graphics.UI.WX
import Graphics.UI.WXCore
import Foreign.Marshal.Alloc
import Foreign.Storable
import Foreign.Ptr
import Foreign.C.Types
import System.IO.Unsafe
main :: IO ()
main = start gui
gui :: IO ()
gui = do
f <- frame []
nb <- notebook f []
p1 <- panel nb []
b1 <- button p1 [text := "*"]
p2 <- panel nb []
b2 <- button p2 [text := "!"]
set nb [on click := (\pt -> onMouse nb pt >>= print)]
set f [ layout := tabs nb [ tab "p1" $ container p1 $ widget b1
, tab "p2" $ container p2 $ widget b2]]
onMouse :: Notebook() -> Point -> IO Int
onMouse nb p = propagateEvent >> notebookHitTest nb p flag
{-# NOINLINE flag #-}
flag :: Ptr CInt
flag = unsafePerformIO flag'
where flag' = do
work <- malloc::IO (Ptr CInt)
poke work (fromIntegral wxBK_HITTEST_ONPAGE)
return work
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.