動態popTrigger的兩種方式
阿新 • • 發佈:2019-01-06
我來總結一下,動態popTrigger有兩種方式:
一種是使用popList來和list進行關聯,關聯方式是popTrigger<=>popList<=>List,這樣生成的popTrigger,不能使用LstSetDrawFunction設定回撥函式來動態新增,必須使用LstSetListChoices,因為回撥函式只是負責畫,而並沒有設定list的結構變數,所以關聯之後的popTrigger會因為試圖讀取沒有設定的結構變數而引起訪問衝突。這種方法優點是因為自動關聯,list和popTrigger的標籤之間天然相關,沒有必要進行額外的程式設計,缺點是動態新增和刪除比較麻煩,因為LstSetListChoices裡面需要一個char**.
另外一種是響應popList的ctlSelectEvent事件,用ListPopupList()將List彈出來。這樣的話你就可以採用LstSetDrawFunction設定回撥函式來動態新增或者使用LstSetListChoices,優點是可以使用回撥函式,新增靈活,可以實現LstSetListChoices無法實現的效果,但缺點是因為實際上opTrigger和list完全沒有關聯,所以要增加一些程式設計的工作。
其中使用回撥函式函式時要特別注意,因為回撥函式實際上是隻畫了圖,所以list的結構變數實際上是不存在的,若想使用LstGetSelectionText等函式來取值,只會引起access violate.
總結,palm的記憶體管理還是比較脆弱的,一旦記憶體洩露甚至會使整個系統出現問題。一來要防止記憶體洩露,一來要防止空指標的操作!
一種是使用popList來和list進行關聯,關聯方式是popTrigger<=>popList<=>List,這樣生成的popTrigger,不能使用LstSetDrawFunction設定回撥函式來動態新增,必須使用LstSetListChoices,因為回撥函式只是負責畫,而並沒有設定list的結構變數,所以關聯之後的popTrigger會因為試圖讀取沒有設定的結構變數而引起訪問衝突。這種方法優點是因為自動關聯,list和popTrigger的標籤之間天然相關,沒有必要進行額外的程式設計,缺點是動態新增和刪除比較麻煩,因為LstSetListChoices裡面需要一個char**.
另外一種是響應popList的ctlSelectEvent事件,用ListPopupList()將List彈出來。這樣的話你就可以採用LstSetDrawFunction設定回撥函式來動態新增或者使用LstSetListChoices,優點是可以使用回撥函式,新增靈活,可以實現LstSetListChoices無法實現的效果,但缺點是因為實際上opTrigger和list完全沒有關聯,所以要增加一些程式設計的工作。
其中使用回撥函式函式時要特別注意,因為回撥函式實際上是隻畫了圖,所以list的結構變數實際上是不存在的,若想使用LstGetSelectionText等函式來取值,只會引起access violate.
總結,palm的記憶體管理還是比較脆弱的,一旦記憶體洩露甚至會使整個系統出現問題。一來要防止記憶體洩露,一來要防止空指標的操作!