8.27 【要は気紛れということか】 昨日書いた、ポップアップメニューについての続き。コントロールマネージャをよく読んでみたら、コントロールが作成された時に適宜メニューリストにメニューを登録してくれるそうだ(内部でInsertMenu()を呼んでいるということかな)。このことから類推すると、コントロールが破棄される前にDeleteMenu()を呼んでくれるのだろうから、結局やるべきことはReleaseResource()だけでいいということになるのかな? しかし、GetMenu()を使う方法は、実際にはあまり奨励されない方法なのかも知れない。IMには、「コントロールを使って用意したポップアップメニューのハンドルを得るのにGetMenuHandle()を使うべきではない」と書かれていて、その代わりにコントロールのcontrlDataメンバからメニューのハンドルやIDを入手するようにということだ。メニューIDがリソースで定義されているものと異なる場合があるということなのかな。 PopupPrivateData構造体は、Controls.hで
と定義されていて、このデータへのハンドルがコントロールのcontrlDataメンバに入っている。これを使えばメニューハンドルへアクセスができるというわけだ。 さっそくやってみると、あっさりと成功(そりゃそうか)。が、メニューが追加されたぶんコントロールの最大値を変更してやらないといけないようで(SetControlMaximum())、これを忘れるとSetControlValue()で選択されているアイテムを変更しようとしてもうまくいかない(GetMenu()を使う方法では、コントロールが作成される前にメニューが拡張されているからその必要はない)。ま、そんなところ。 で、Phutのニューバージョンだけど、なぜかパレットを開いて閉じると300バイトくらいのハンドル(どのくらい登録されているかで長さが異なる)が残ってしまうバグがあるようで現在その原因を調べているところ。これが解決したら……と思っているのだけどさっぱり原因不明。うーむ。 ピリオドの件。昨日キーボードを壊したくなるほどいらいらしたピリオドが、今日になったらなんの問題もなく反応してくれている。前にもこんなことがあったような気がするが、要は気紛れなのか? 暑い日とか晴れた日はだめとかそういうんじゃないよなぁ……。 |