INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2015-02-12 00:00 / 次へ→ / 最新へ⇒

■Windows 8の微妙な動きの変化

2015年 2月12日(木) 0:00:00 [さくらのブログから転記]



RSSRSS配信中
https://www.inasoft.org/



Windows 7とWindows 8って、Windowsのコアな部分の動きはほとんど変わっていないのかなぁと思っていたんだが、どうもそうでもないっぽいんですね。

ウィンドウを作成したときと、それにともなって画面が描画されるときの動きが、Windows 7とWindows 8で同じプログラムを動かしたときに、動きが微妙に違う。グラフィック周りの改善というか最適化は、けっこう食い込んできている感じがします。

ちなみにどういった現象が起きているかというと、Windows 7では、CreateWindow() した後、状況によっては WM_PAINTが2回呼び出されるらしいんだが、Windows 8では、WM_PAINTが1回しか呼び出されないというもの。

んで、メッセージループの直前に InvalidateRect(hWnd, NULL, TRUE); を1つ入れると、Windows 7でもWindows 8でも、WM_PAINTが2回呼び出されるようになるという感じです。

Windows 8では、画面再描画の回数を極力減らすことによって、動作を早くしようとする、OS開発者の努力が垣間見られる感じ。ただ、暗黙の内にWM_PAINTが2回呼び出されることでギリギリバグを回避しているようなプログラムだと、この動きがアダになってうまく動かなくなるみたいです。

とはいえ、.NET Frameworkを使っていたり、フォームアプリケーションを作っていて、初期描画に問題が起きたことはないので、たぶん、プログラミングスタイルと相性の問題があるんだろうな。こういうのは。

本来、プログラムが正しく作られていれば、どのようにWM_PAINTが呼び出されていようが正しく動くはずなわけですが、上記の通り、過去のWindowsでそういった動きをしているので、開発者としては気づかずに過去のWindowsの動きに依存したプログラムを書いてしまっていて、Windows 8の登場まで気づかなかったということになります。

それにしても、2015年にもなって、こんなにバリバリGDIのAPIを使ったプログラムに頭を悩ませることになるとは思わなかったです。最近は、OSレイヤーに近いようなことで頭を悩ませることはほとんどないような開発環境が整ってきているから。まぁ、OSレイヤーに近いところで頭を使うのは、良い感じで頭の体操になるから、たまにはやっておかないとバカになってしまうかもしれないですね。

普段は、OSレイヤーから遠いところに頭を使うことを多くしておいた方が、クリエイティブなことに時間が割けるから。普段はそれでいいんですけどね。




Windows 7とWindows 8の違いといえば、USBのマウスやキーボードを、動作中に差し込んだ場合に、使用可能になるまでの反応の早さが大きく違いますね。

Windows 8では、それこそ差し込んだ直後から使えるのに、Windows 7では、差し込んでから認識するのに時間がかかるらしく、ちょっとイライラする。



目次 | ←前へ / 2015-02-12 00:00 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3212303 (+0214)[+0218]

Copyright© 2010-2024 INASOFT