のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

Windows CE プログラムとかとか

ようやく精神的疲労が消えてきました。やれやれ。。

こんにちは。

ここ最近は先日購入したCOWON V5上で動くプログラムを書こうといろいろやってます。

ちなみに、部屋の整理もしなきゃいけないのにそっちは全然進んでいない。

Win32 API のサブセットと、MFCのサブセットが使えるってことで割とwktkしてたんですが

そのサブセット具合が割と残念な出来栄え。。。

やろうとしたこと

  • マルチドキュメントブラウザを作る
    1. フレームワークMFCを使う
    2. 対応ファイルはプラグインで追加可能にする
      • CDocument/CViewを動的ロード可能にするっていう意味で。
    3. 開いているファイル毎に、メニューは動的に切り替えたい。
    4. 個別ツールなんかもプラグインでメニュー追加できたらいいかも。
    5. ソースはWin32と共通化して、ある程度Win32環境でデバッグできるように

WindowsCEでは、MDIが使えないので、Doc/View切り替えをSDIでやらないといけないっていうところが多少めんどちぃ。

んでも、動的メニューだのプラグインだのの仕組みは、今の職場で開発した仕組みが多分応用できるからラクショーだじぇ!

って思ってたのですが、WinCEAPIがそれなりに残念な感じの出来上がりで、かなり苦労することになったとか。

  1. GetProcAddressの第二パラメータの意味合い
    • Win32mbcで指定
    • WinCE→wcharで指定
    • この関数だけ引数はmbcっていうWin32実装の方がおよろしくない気はする。たしかに。
  2. CMenu.GetMenuState()が役に立たない(常時0を返す?)
    • GetSubMenu() で SubMenuのHANDLEが取ってこられたら、MF_POPUP属性
    • SubMenu無し、かつメニュー文字が空ならセパレータ属性
    • ひどい話だ
  3. メニューの動的変更が、WinCE APIの使用上無理
    • Win32 MFCでいうところの、CWnd::SetMenu() に渡す関数の引数が HMENU ではなく、ResourceID
    • しかも、1度メニュー作ったら変更できないとか
    • WTLでやってるような、ツールバーをメニューっぽく見せる技をつかうことにする。
    • 作業量大幅増。
  4. SetWindowsHookExが実質使えない
    • 3.であげたことを(操作性的に)見栄えよくするのに多分必須となってくるAPIなのですが、WindowsCEだと実質使えない。
    • メニューがプルダウンしている時に←→キーを押したときの制御とかができないでう。
    • どうにもならないので諦める。
  5. ツールバーメニュー
    • ツールバーボタンを TBS_DROPDOWN にしたときの右端の▼マークが消せない。そもそも、▼マーク表示フラグ立ててないのになんで出てくるんだ(汗
    • しょうが無いので、ツールバーボタンの属性は TBS_BUTTON にして、OnNotify(code == NM_LDOWN)を補足してメニューを出すことにする。
    • NM_LDOWNが来ない、、、、てゆーかNM_CLICKすら来ない。。。。。。
    • ボタン押された瞬間に、なぜか TBN_BEGINDRAGが飛んできてるし。。。。
    • なので、それを捕まえてTrackPopupMenuすることにした。
    • てゆか、ツールバーボタンをD&Dで移動可能にするフラグなんて立ててないんですが(汗

そんなわけで、かなり萎えましたがなんとかフレームワークの基礎部分完了。

f:id:mikenekoDX:20100613022525j:image

f:id:mikenekoDX:20100613032924j:image