先日、MFCにてアクセラレータキーが場合によって効かなくなるという症状を書いたのですが、一応自己解決いたしましたので、報告します。
(解決案をくださったAOIさん、Thanx!)

そもそもの原因は「TranslateAccelerator」というAPIの仕様とMFCの相性が悪いことにあります。 TranslateAcceleratorはキー入力をメニューコマンドへ変換するAPIですが、メニュー状態が無効だったら変換(送信)しないという仕様になっています。そのため、 MFCのコマンド更新ハンドラで pCmdUI->Enable(TRUE); となっていても、メニュー状態が無効ならば、ショートカットキーは使えません(深い場所のメニューコマンドは)。

ちなみに浅いコマンドが効くようになったことについては、少し憶測ですが書いてみますね。 TranslateAcceleratorの仕様として、キー→メニューコマンド直前(?)に WM_INITMENUなどのメッセージを送信してきます。そのメッセージをMFCフレームワークが掴み、メニューコマンドを「コマンド更新ハンドラ」を使って更新し、最新の状態になるため、ショートカットが効いたのだと思われます。
(ルート直下のメニューコマンドしか更新しません)

さて、深い位置のメニューコマンドを効かせるために、まず思いつくのが、「メニュー状態を更新する」という方法です。しかしいつ更新してよいのかわかりません。毎回キー入力(またはTranslateAcceleratorが送信してくるWM_INITMENUなど)でメニューコマンド全ての状態を更新することは負荷となりパフォーマンスの低下に繋がることは目に見えています。

で、私が使用した解決方法は、以前ちょろっと書きましたが、アクセラレータ処理を「TranslateAccelerator」を使わず自前で実装するという事です。もともとEDGE2はショートカットキーのカスタマイズに対応しており、キーの設定をリソースではなく、通常のデータ(謎)として持っているため、WM_KEYDOWNやらWM_SYSKEYDOWNメッセージを捕まえて、メニューコマンドへ変換し、SendMessage(WM_COMMAND・・・);しています。幸い、MFCはコマンドを実行する直前でコマンドUI更新ハンドラを呼び出して、コマンドを実行可能か調べているため、例えば「実行出来ないはずのメニューコマンドを実行する」というような事も起こりません(コマンド更新ハンドラでEnable(FALSE)となっているとwarningはTRACEされますが^^;)。

現在公開しているEDGE2β版では既にこの方法で実装しています。今のところ問題も出ていませんので、おそらく大丈夫かと思われます。

というわけでだいぶ時間が掛かりましたが、EDGE2 Ver.0.90 beta000の公開を始めました~。シェアウェアで、しかも価格が有名ソフトと同じぐらいですので、ユーザー登録数はあんまり無いかとは思いますが、長くほそぼそとやっていこうと思います。

次はアニメーション機能・・・の前にハイカラーパレットとかの対応からかな^-^;

ダウンロードなどはこちらから

というわけでドット絵の本が発売されます。
ドット絵プロフェッショナルテクニック―ドット打ちからアニメーションまで (Game developer books)

恐れ多くもEDGEをドット絵ツールとして紹介して頂いており(他にはD-Pixed)、それだけでなく見本まで1冊頂いてしまいました^^

まだちょこっとしか読んでいませんが、ドット絵の描き方が丁寧に説明されており、ドット絵素人の私が欲しいと思うような素敵な本になっています。

興味のある方は読んでみてください。

ようやくツールとして使える程度になってきました。
まだまだ完成には程遠いですが、徐々に公開していきたいと思います。

一応EDGE2オフィシャルサイト建設予定地というのがあったのですが、開発に手一杯で全く更新していなかったため、今回必要最低限のページにまとめて(?)おきました。

最近、このサイトのデザインにも飽き飽きしてきましたが、変えてる暇もセンスも無いのでやめておきます_| ̄|○
 
 
 
 
そうそう、昨日は久々にぶるじょあ同人野郎こと○草くんと会ったんですよ。
(新年会らしきものに誘われて)

最近は周りにマニヤックな友人がいないので、なんだか彼のオーラが新鮮に感じました。飲んだり食ったりした後、6人でカラオケに行ったのですが、普通の友達とカラオケ行くときには絶対に歌わない「Feeling Heart」を解禁して歌ったら皆懐かしんでくれましたよ。○草くんはアニソンとかアニソンとか、あ、あとアニソンとか歌っていましたが、あんなエネルギッシュなカラオケはある意味初めてでした(笑)また誘ってください 〒○草くん

1 6 7 8 9 10 11

記事検索

アーカイブ