2020年12月11日金曜日

[備忘録]ListViewCtrlでLVIS_SELECTEDなアイテムの色を変える方法

ListViewCtrlのアイテムの色を変える方法自体は、カスタムドロー(NM_CUSTOMDRAW)でできることは知っていて実際に使っていました。しかし、LVIS_SELECTEDで選択されたアイテムの色を変える方法、そして、そのListViewCtrlがフォーカスを外れても、同じ選択状態の色で表示する方法がどうしても分からなかったのですが、ようやくその方法が分かりました。それは、、、


カスタムドローのハンドラ内で、CDDS_ITEMPREPAINTイベントが来た時、

  lpCustomDraw->clrTextBk = RGB(x,y,z);

  lpCustomDraw->nmcd.uItemState = CDIS_DEFAULT;

とuItemStateの値を変更しておく、というものです。

この値を変更せずにそのままにしておくと、以降のカスタムドローイベントでデフォルト処理が走ってしまい、LVIS_SELECTEDなアイテム(ハイライトされたアイテム)はデフォルトのハイライト色で描画されてしまっていました。特に、フォーカスを失った時は選択表示でなくなってしまうか、LVS_SHOWSELALWAYSスタイルを付けていても薄いグレー表示になるので見にくかったですが、この方法で完全に選択された表示を維持できるようになりました。


2020年9月8日火曜日

[備忘録]64bit版Cygwin上で、32bitアプリを実行する

昔Cygwin上で使っていたsh-elf向けGCCを動かす必要が出てきたので、再度Cygwinをインストールして動かしてみたところ、エラーで動かない。

sh-elf-gcc.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory


原因:64bit版Cygwinで32bit版実行ファイルを動かそうとしても、必要な32bit版共有ライブラリが見つからない。


対処:Develカテゴリのcygwin32パッケージをインストールすると動くようになるらしいが、今回のケースでは動かなかった。sh-elf-gccがcygintl-2.dllを要求しているが、どうやってもこのファイルをインストールすることができなかった。


回避策:たまたま見つけたcygintl-3.dllをcygintl-2.dllにリネームして使う。推測だが、これらの共有ライブラリは目的とする機能は同じでバージョンのみ違うと思われるので、使える可能性大。もちろん、このdllも32bit版である必要がある。

Cygwinには依存ライブラリを調べられるcygcheckがあるが、64bit版cygcheckは32bitバイナリの依存ライブラリを調べられない。代わりに、Dependency Walkerで調べるとcygintl-2.dllのほか、cygiconv-2.dllとcygwin1.dllを要求していることが判明。これらの32bit版ライブラリは比較的すぐに見つかった。

これらの共有DLLを適当なディレクトリにまとめて置いておく。そして、sh-elf-gccを実行するときには、

PATH=(32bit用DLLを置いたディレクトリ):$PATH sh-elf-gcc

とすることで、sh-elf-gccを使うときだけそのディレクトリにパスを通す。

これで、64bit用Cygwinでも、32bit用sh-elf-gccが動くようになった。


2020年1月3日金曜日

パサートヴァリアント2019年年間燃費

2019年の1年間で合計45252km走り、年間の平均燃費は19.74kmでした。

DSGの不安も完全に払拭されたので、アクセルは結構踏んでます。加速が必要なときはSモードを使う方が、ダウンサイジングターボ+DCTの組み合わせには合っていると感じます。と言っても、先行車が居ることがほとんどなので、Dモードでゆっくり加速になることが多いです。
高速道路では走行車線で85km/hの巡航速度を保って大型車と同じくらいのスピードで走ることが多いので、燃費を稼ぐのは容易ですね。巡航速度をできるだけ長く保つことと、巡航速度まで如何に効率的に加速するかが重要と思われます。個人的にはふんわり加速すれば燃費に良いとは思えないです。アクセルをグイグイ踏んでも平均燃費への影響は小さいようです。「高速道路or郊外道路中心の乗り方で」という条件付きですが。