|
▼ 2005/05/02 - MFCアクセラレータ不具合修正
相互リンクを更新しました。
- 星心、夢心地。(日記)
(ごめんなさい、5/2の時点でリンク先間違っていました_| ̄|○)
相互リンクはご依頼があれば(&問題無ければ)貼らせて頂いておりますが、「依頼したのに貼ってない」という方がいらっしゃいましたら、再度メールをお願いいたします(忘れていたらごめんなさい)。
さて、先日、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β版では既にこの方法で実装しています。今のところ問題も出ていませんので、おそらく大丈夫かと思われます。
▼ 2005/05/04 - EDGE2 Ver.0.90 beta002 アップ
更新内容は次の通りです。
- 試用時にテキスト広告が表示されるようにしました。
(実験的に組み込んでいますが、場合によっては削除する可能性もあります)
- 範囲を選択しないまま「回転」を実行するとエラーが発生するという不具合を修正しました。
- 線形補間の回転処理にて、画像端部分におかしな色が混ざる不具合を修正しました。
- オプションバーを非表示にすると、ペンツールバーが使えなくなるという不具合を修正しました。
MFCのCRectクラスは初期化を忘れてもデバッグビルドではそれなりに動作するのですが、
リリースビルドだとうまく動かないため、開発時に検出しづらいです_| ̄|○
CStringクラスは初期化しなくとも(?)データが無い状態となりますが、
それと同じような感覚でCRectなんかを使うと痛い目にあいますので開発者の方はご注意を。
(普通こんなミスしないか)
▼ 2005/05/08 - リンク更新
相互リンクを追加しました。
最近友人から「 iPod サザエさんバージョン」というのを教えてもらったのですが、
曲も映像もカッコ良いです。 iPodって広告(宣伝?)にはシルエットのようなデザインを採用しているようでして、サザエさんもそんな感じになったわけなのですが、マスオさんがギターじゃこじゃこやってる姿に見とれました(笑)
GWや土日を使って見たDVDなど。
(私の独断と偏見による5段階評価付き)
そういえば マリオカートのアーケード版が出るそうで、期待です。
近所のゲーセンにも入ることを祈るばかりです(笑)
▼ 2005/05/10 - EDGE2 Ver.0.90 beta003 アップ
更新内容は次の通りです。
- 新規作成ダイアログの背景設定に「0 番」という項目を追加しました。
これを指定すると、0番の色が背景色となります。
- 環境設定 - 編集で、「貼り付け」先の座標をカスタマイズ出来るようにしました。
今までは画像をCtrl+Vで貼り付けた場合、マウスカーソルの近くへ貼り付けを行っていましたが、画面の左上固定や、選択範囲左上などを指定出来るようにしました。
デフォルトは選択範囲の左上です。
- 環境設定 - デザインでオプションバーの高さをツールバーと合わせる事が出来るようになりました。
その代わり、横長になり、画面の横サイズが1280以上必要です。
- グリッド&編集単位一発変更で登録したデータを、ツールバー上の「グリッド」ボタンの▼で出てくるポップアップメニュー内からも選べるようにしました。
また、未登録のデータは表示しないようにしました。
- レイヤやページ、パレットを複数持っている場合はステータスバー右端に表示するようにしました(データが有るのか無いのか解り辛いため)。
- レイヤウィンドウのレイヤ名部分にフォーカスがある場合、キーボードから直接入力が出来るのですが、IMEがオンになった状態で入力を開始するとWin98で文字化けするという不具合を修正しました。
- ステータスバー上の画像情報が、画像切り替え時に更新されていなかった不具合を修正しました。
- ポジションウィンドウで枠外&端の方をクリックすると、枠が実際よりも小さいサイズで表示されるという不具合を修正しました。
そろそろGBA/DS向け支援機能(1チップ16色モード)の試作を始めようかと思います。
まずはチップサイズ指定や、チップごとにパレットを選択する機構を先に作ってしまいたいと思います。
こちらの方にログがありますので、もし他にもお使いになられる方がいましたら、見てみてください。
また、マウスの「ホイール」の回転などをアプリケーション側で判断する方法を探しています
(もしご存知の方がいらっしゃいましたら、連絡をお願いいたします_| ̄|○)。
というのも、Windowsには一応WM_MOUSEWHEELというメッセージが飛んでくるので
ホイールの回転を捕まえることは出来るのですが、そのウィンドウにスクロールバーが装着されていると、
マウスウェア(マウスドライバ?)によって勝手にスクロールイベントに変えられてしまう気がするのです。
これをなんとかホイール回転イベントとして掴みたいのです_| ̄|○
スクロールバーを自前実装すればイベントは取れるようですが・・・流石にこの方法はスッキリしませんよね^^;
▼ 2005/05/18 - 新人歓迎会での出来事
私と総務部長(よっぱらい)との会話。
(たまたま席を移動したときに隣の隣から話し掛けられる)
総「いいだー、これ(余った肉)食べな〜」
私「いえいえ、もうおなかいっぱいです。」
私「それを食べたら明日仕事出来なくなりますよ^^;」
総「いいよー。仕事なんかしなくて」
総「どうせ大した仕事してないんだし」
技術者として全然評価されてないみたいで、正直凹みました_| ̄|○
道理で給料安いわけだ。
▼ 2005/05/23 - EDGE2 Ver.0.90 beta004 アップ
チップモードの試作版をアップしましたー。
使い方はこちらに 暫定説明書を用意しました。
なにかと影響範囲が広くて時間が掛かりましたがようやくアップ出来ました_| ̄|○
Ver.0.90 beta004の更新内容は次の通りです。
- チップモードの試作をしました。
- 多角形選択ツールで、選択途中でペンを切り替えても、選択途中の状態がキャンセルされない不具合を修正しました。
- ポジションウィンドウなどでスペース+左ドラッグでスクロールが出来るようになりました。
- グラデーション塗りつぶしやテキスト描画の際、トーン2色描画設定にしてあると描画が実行されないという不具合を修正しました。
- 未保存のままウィンドウズを終了(ログオフ)させようとすると、EDGE1のような1つ1つの保存確認ダイアログが表示される不具合を修正しました。
たぶん不具合がぽつぽつ発生すると思います^^;
このチップ機能に関しまして何かご意見などありましたら、 こちらの掲示板へお願いいたします。
チップ機能の改善・不具合修正と平行して、アニメーション機能の外部設計資料を作成したいと思います。
一度ここで設計資料を公開し、ご意見を頂きつつおおよその方向性を固めてから試作に入りたいと思います。
(例によって試作後に細かな部分を詰めていけたらと思います)
あと、EDGE2初期パレットについてですが、今のところEDGE1と同じものですので、何か良いパレットがありましたら使わせてください(^^ゞ
▼ 2005/05/25 - アニメーション機能の資料作成中
日付が変わって現在26日ですが、とうとうメトロイドプライム2の発売ですね!
今までHALO2やスタフォやら我慢してきましたが、今回は誘惑に負けてしまうかもしれません_| ̄|○
そうそう、23日の日記にも書いたとおり、アニメーション機能の画面設計などを始めています。
とりあえず今日作った資料を 一旦アップしておきますので(まだデータ部分だけですが)
気になる方は覗いてみてください。
|