質問
私はGUIデザイナーなしでGUIをやろうとしたことはありませんでした、そして今、私は本でPalm OSアプリケーションを開発する方法を学んでいます Palm OSプログラミング:開発者ガイド. 。そして、その上に、いくつかのGUI項目の宣言であるこのコードがあります。
#define HelloWorldForm 1000
#define HelloWorldButtonButton 1003
#define HelloWorldMenuBar 1000
#define GoodnightMoonAlert 1101
#define FirstBeep 1010
#define SecondBeepmore 1000
私はいくつかのことを知りたいです:
- これをタイプの順序で行う必要がありますか?
- なぜこの数字を宣言する必要があるのですか?
- 彼らは私を助けようとしているのですか?
- 彼らは彼らがそうであるタイプのアイテムに接続されているものを持っていますか?
解決
リソースID。あなたはそうではありません 必要 このようなマクロを定義するには、そうでない場合は、コード内のUIウィジェットを参照しようとするときに、生の整数値を使用する必要があります。たとえば、UIコントロールへのポインターを取得する典型的な方法は、次のことです。
FormType* formP = FrmGetActiveForm();
UInt16 index = FrmGetObjectIndex(formP, objectID);
ControlType* controlP = FrmGetObjectPtr(formP, index);
状態(チェックボックスなど)の読み取り、テキストラベルの変更、動的に表示または非表示などを行うために、UIウィジェットへのポインターを取得する必要があります。
リソースIDとあなたが戻ってくるポインターで何をするかの間にタイプの安全性はありません FrmGetObjectPtr
;どのIDがどのタイプのコントロールに対応するかを追跡することはあなたの責任です(一般的な慣行は記述名を使用することです)。
他のヒント
これらはおそらく、GUI要素に関連付けられている「人間の読み取り可能なショートカット」(Cマクロの形で)です。当該要素は、おそらくホストシステムの整数を介してのみ参照されます。ここで作業する詳細はあまり提供されませんでした。
このような手法の利点は、通常、メンテナンスの容易に関連しています(とりわけ)。
彼らはいくつかの利点を提供します。
- コードの文書化。むしろ電話をかけたいですか
LoadForm(1000);
またLoadForm(HelloWorldForm);
ソースコードで? - それらは実際にリソースを定義するファイルによって使用される場合があります。リソースを変更する必要がある場合(おそらく、両方とも1000個を使用した2つのプロジェクトを異なるフォームに統合している場合)、単一の場所で値を変更するだけです。
所属していません StackOverflow