カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2018年08月21日(火)

ミルノ PC フォトフレーム、左ボタン長押しでコンテキストメニューを表示したとき、マウスホイールで拡縮しない不具合修正

写真閲覧ソフトのミルノ PC フォトフレーム
新しいバージョン 2.1.4 を公開しました。

写真をミルノに!

で覚えてね。キラーン。

新しい機能については、先日のブログ記事 をご覧ください。

この記事では、左ボタン長押しでコンテキストメニューを表示したとき、
マウスホイールで拡縮しない不具合の修正について説明します。

まず、設定画面の「マウス」タブ、「多段表示」グループ内
「画像上」列の「左ボタン長押し」に「コンテキストメニュー」
を選択して、OK ボタンで閉じます。

すると、メイン画面で多段表示のときに、画像を長押しすると
コンテキストメニューが表示されますが、その状態で、
マウスホイールを回しても拡縮できない不具合がありました。

最新のバージョンでは修正済みなので、
気になる方は、試してみてください。

日本語の最新版はこちらのページから、ダウンロードできます
You can download the latest version of Miruno PC Photoframe here.

x64 の最新版はこちらのページから、ダウンロードできます
Download the latest version of Miruno PC Photoframe x64 here.

・・・

月額会員専用のx64 版 もあります。
月額会員には、こちらのページから参加できます

・・・

ここからは、プログラマー向けに
何故、この不具合が起こったかを解説します。

ミルノ PC フォトフレームは、ディフォルトでは
毎秒 60 フレームで画面を更新し、動きを与えます。

毎秒 60 フレームの速さで、処理を行うには、
マルチメディアタイマーが必要です。

マルチメディアタイマーを使うと、登録した
コールバック関数が、定期的に呼びだされます。

確認してませんが、おそらく、コールバック関数は、
別のスレッドで実行されているため、何らかの方法で
メインスレッドに通知し、実際の処理は、メインスレッドで行います。

通知する方法はいろいろありますが、古いバージョンでは、
SendMessage を使用していました。

SendMessage は、ウィンドウの属するスレッド (メインスレッド) に
スイッチして WindowProc を処理し、終了までブロックします。

なので、WindowProc で長い処理を行うと、
コールバック関数がブロックされるため、
長い処理が終了するまで、タイマーイベントが発生しなくなり、
長い処理終了後に、まとめて、イベントを処理することになります。

これが問題となっている不具合を引き起こします。

具体的には、長押しは、時間で発生するので
タイマー処理の中で認識し、処理します。

ところが、メニューは、独自のメッセージループを
使用するためメニューが閉じるまで、処理を返しません。

結果、SendMessage がブロックされ
タイマー処理が一切行われなくなります。

拡大縮小は、タイマーメッセージで
実行するため、実行されなくなります。

貯まったタイマーメッセージはメニューが
閉じた後でまとめて実行されますが、遅すぎます。

以上が原因の説明です。

修正するには、SendMessage を PostMessage に変更すれば OK です。

PostMessage は、SendMessage と違って、
WindowProc の終了を待たないので、ブロックしません。

それ以外にもメッセージキューを使うので、
実行のタイミングが微妙に変わったりしますが、
今回は、特に問題無いと思います。

同様の問題が、長押しで、製品登録画面などの
ダイアログを表示するコマンドを割り当てたときにも起こります。

ただ、この場合は、ダイアログ表示中にタイマーメッセージを
処理する必要があまりないので、ほとんど問題にはなりません。

が、ダイアログが閉じた後に大量のタイマーメッセージが一度に
処理されるため、少し操作できない状態に陥るかもしれません。

ま、長押しに別の処理を割り当てたときの挙動が
何か変だなーと感じていた方は、新しいバージョンでお試しください。

ミルノ PC フォトフレーム
ミルノ PC フォトフレームのダウンロード
ミルノ PC フォトフレームの更新履歴
ご意見・ご要望連絡窓口


コメント
コメントする