実は、ちまちまと記録を残しながらの開発に耐え切れなくなりそう。表現は悪いかもしれないが、小さなアプリケーションの開発というのは思春期の恋愛のようなものだ。視野を狭くして思いにまかせ、短期間に突っ走ってしまった方がいいのである。仮に後から後悔するようなことになったとしても(別に妙な思い出があるわけでもないが)。
一方、Japonica のような巨大なアプリケーションは長期に渡る現実的な計画とその遂行が必要になるから、倦怠期込みの結婚生活のようなものである。こんなことを書くと「陰郎は両方苦手です」と言いたい気分になるが、結婚の経験はまだないのでそれはまぁ置いておこう。何が言いたかったかというと、Scrooge のような小さなアプリケーションでは、とにかく作るだけ作ってから少しずつ連載した方が良かったかもしれないということだ。開発自体を一気に進めると後追いで検討記事を書く気がしなくなるのでゆっくりやってきたのだが、逆に開発自体のやる気が薄れてしまいつつある。難しいものだ。
本題に入ることにしよう。一応、ポップアップトリガーとポップアップリストのための KeyList クラスのインタフェイスは決まった。次はテーブルのためのインタフェイスである。
しかし、ここでちょっと POL の話題に触れておかなければならない。Japonica の時もそうだったが、陰郎はテーブルを使用するときは大抵 POL::CGrid クラスを使用する。これはスクロールをサポートするテーブルに必要な処理の大部分をカプセル化してくれるので、非常に使い勝手が良いのだ。POL::CGrid を使用するには、その派生クラスを作成する。ざっくりだが、現状では以下のような PriceTable というのを作っている。
class PriceTable : public POL::CGrid {
public:
void SetTargetList( KeyList* pKeyList );
KeyList* GetTargetList( );
protected:
virtual void DrawItem( Int16 row, Int16 column,
const RectangleType& pBounds );
private:
KeyList* m_pKeyList;
};
CGrid クラスからオーバーライドする DrawItem メソッドには、描画対象の行番号と列番号、そして描画領域の矩形が渡される。だから、row が 0 の場合には KeyList の DrawListItem メソッドがそのまま使える。以下のように。
void PriceTable::DrawItem( Int16 row, Int16 column,
const RectangleType& rcBounds ) {
switch( column ) {
case 0:
m_pKeyList->DrawListItem( RelativeToAbsolute( row ),
&rcBounds );
break;
case 1:
//
//
//
default:
break;
}
}
続きは明日以降。