ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

ダイアログのコントロール上でも右クリックでメニューを出したい

ダイアログ上で右クリックした際にメニューを表示するには、OnRButtonUpあたりをオーバーライドしてやればいい。しかし、OnRButtonUpはダイアログ上のプログレスバー等の上で右クリックした場合には呼び出されない。これは、ボタンの上で左クリックした場合等を考えると当然の挙動である。

これを解決する方法は2つある。

  1. 各コントロールのクラス(CButton等)を継承したクラスを自作しOnRButtonUpを実装する
  2. 各コントロールのOnRButtonUpを呼び出す処理に割り込む

今回のように、どのコントロールの上で右クリックしてもメニューを出す場合は2.が圧倒的に楽である。では、OnRButtonUpを呼び出す処理に割り込むにはどうすればいいか?MFCではWindowProc()をオーバーライドすればよい。Spy++でメッセージの流れを見たところ、WM_SETCURSORをトリガーに各コントロールのOnRButtonUpを呼び出しているようなので、これに割り込むことにする。

f:id:donadonasan:20180829195728p:plain

以下、サンプルコード。

gist4ebf951cb429e8a6fc482f2dc5f980ea

L4カー モータカーをちまちま更新

モータカーを引き続き更新。

謎の箱更新

写真照合したら寸法狂っていたので修正。また、箱と本体の接続方法を修正。ついでに、ケーブルが出てくるところを正確な形状にした。

f:id:donadonasan:20180828002429p:plain

摺電部

f:id:donadonasan:20180828003811p:plain

L4カー 摺電部

L4カーの摺電部の構造はこうなってるっぽい。すなわち、摺電部はスプリングによりレールに押し付けられていて、接触角の変化は回転軸が吸収する。やってることはシンプルなんだけど、部品点数が多い。これは多分、本体をレール上に置くときのことを考えてのこと。スプリングで摺電部を押し付けるという構造なので、レールが無いときは摺電部がレール位置よりも内側に来る。これでは、車体をレール上に置けない。そこで、おそらく下図のようにパーツを外してから本体を置けるようにしていると思われる。・・・それでも、なぜアームの支点がこんな構造なのかは謎なんだけど。

f:id:donadonasan:20180828004659p:plain

モータカー 集電部 完成

結局モータカーの集電部完成させてしまった。電線むき出しだし、本体に絶縁無しで直接つないでいるように見えるから、正しくはアースなんだろうけど。

これ、バネで集電部を押し付ける構造なんだが、なんでこんなに部品多いんだろう・・・。もしかして、モータカーを設置する際には3連ナットの左右2個および集電部を外して、レールと干渉しないようにするためなのか?

f:id:donadonasan:20180827003552p:plain

モータカー 集電部

f:id:donadonasan:20180827004042p:plain

モータカー 集電部 別角度








Visual Studio2017でWindowsXp用プログラムをビルドする

事情によりWindowsXp用プログラムをビルドすることになったんだけど、WINVER等の定数をいじっても、出来上がったソフトが動かなかった。確か、有効な実行ファイルではありませんとか言われる。なんでかなーと思いながらオプションながめてたら、こんなの発見。Visual Studio 2017ではプラットフォームツールセットをXp用に変えないとだめみたい。

f:id:donadonasan:20180825232446p:plain

Visual Studio2017でXp用ソフトをビルドするときのオプション。VS2017のXp用ツールセットもありますがここには未表示



L4カーの導入先

忘れないうちにメモ。

L4カー、少なくとも塩浜操車場(日立評論1975年6月号)と新南陽ヤード(日立製作所 水戸工場展示)にて稼働していたことがわかっていたけど、東海大学鉄道研究会の写真から北上操車場でも可動していたことがわかった。レール構造やプッシャカーの構造からすると塩浜操作場の同型。

tokaitetsuken.web.fc2.com