リストコントロールは、リソースに定義することにより静的に作成することができますが、 プログラム動作中に動的に内容を替えることもできます。
'\0'で区切られた文字列データを
SysFormPointerArrayToStrings関数によりリスト用のメモリハンドルを作成します。
そのメモリハンドルをロックして、LstSetListChoices関数によりリストに設定することが出来ます。
注意すべき点は、リストの描画が行われるときには、リスト用のメモリハンドルは
ロックされていなくてはいけません。
また、リスト項目の文字列データは、リストが表示されている間は、
破棄してはいけません。
サンプル画面
ヘッダファイル
#define MainForm 1000 #define MainList 1001 |
リソースファイル
FORM ID MainForm AT (0 0 160 160) NOFRAME BEGIN TITLE "Dynamic List" LIST "" ID MainList AT (1 16 158 AUTO) FONT 0 VISIBLEITEMS 13 END |
イベントハンドラー
Char listItem[] = "One\0Two\0Three\0Four"; /* リスト項目の文字列データ */ UInt16 num = 4; /* リスト項目数 */ MemHandle hArray = NULL; /* リスト用のメモリハンドル */ Boolean MainFormHandleEvent( EventPtr pEvent) /* I:イベント */ { Boolean handled = false; FormPtr pForm; CharPtr* ppItemsText; switch (pEvent->eType) { case frmOpenEvent: /* フォームオープンイベント */ pForm = FrmGetActiveForm(); hArray = SysFormPointerArrayToStrings(listItem, num); ppItemsText = (CharPtr *)MemHandleLock(hArray); LstSetListChoices((ListPtr)FrmGetObjectPtr(pForm, FrmGetObjectIndex(pForm, MainList)), ppItemsText, num); FrmDrawForm(pForm); handled = true; break; case frmCloseEvent: /* フォームクローズイベント */ if (0 != hArray) { MemHandleUnlock(hArray); MemHandleFree(hArray); } break; default: break; } return handled; } |
'05/6/9 新規作成
Copyright (c) 2005 kasa0 All rights reserved.