Windows Mobile SDK とデスクトップ SDK を比較して、Windows Mobile がサポートしていない機能とその代替策をまとめてみました。
※Windows Mobile 6 Professional SDKを対象としています。
※少しずつ記述しています。
[MSDN] http://msdn.microsoft.com/en-us/default.aspx
プロセス間通信に使う CreatePipe API など、パイプはサポートしていない。共有メモリ、イベント、セマフォを組み合わせて自作する。
OpenSemaphore、OpenFileMapping はサポートしていない。
作成済みの名前つきセマフォ、ファイルマッピングオブジェクトを取得する場合、
CreateSemaphore、CreateFileMapping を使用する。
※OpenEvent はサポートしている。
非同期でリードライトを行う API はサポートしていない。OVERLAPPED もサポートしていない。ファイルの読み書きをメインスレッドとは別のスレッドで行えば非同期で処理される(と思った、、メモ損失のため未検証とする)。
デスクトップ SDK の shlwapi.h、shlwapi.lib に含まれる、パス処理を行う PathIsRelative、PathRemoveFileSpec などはサポートしていない。自作するしかない。 shlwapi.h は Windows Mobile 向けに提供されてはいるが、中身は全く異なる。
サポートしていない。 フォルダ選択ダイアログは自作するしかない。
スレッドの開始は CreateThread を用いる。
WinMain の引数のインスタンスハンドルを変数で保持しておく。
TrackPopupMenuを使う。
サポートしていない。 (デスクトップの場合、WM_NCCREATE の次に WM_CREATE が送られてくる。従って、WM_CREATE でウィンドウフレームに処理を施せばよいか?)
サポートしていない。縦横の画面向きの変更であれば WM_SIZE でハンドルできる。WM_WINDOWPOSCHANGED はサポートする。(ユーザがサイズを変更できるウィンドウで、サイズの変更をキャンセルしたい場合は、WM_WINDOWPOSCHANGED でハンドルして、無限再帰しないような処理を作って SetWindowPos で戻す方法しかないか?)
サポートしていない。最大・最小表示はない。通常のウィンドウサイズは GetWindowRect で取得できる。
::SetForegroundWindow(hWnd)
::SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE); ::ShowWindow(hWnd, SW_SHOW);
一度ウィンドウを非表示にしてアクティブ状態を解放、同時に Z オーダを最背面に移す。
そしてウィンドウの表示を戻す。
SWP_HIDEWINDOW を付加(非表示)しない場合、フレームウィンドウは最背面へ移動するが、上下のバーにアプリの表示状態が残る。
[OK] ボタンの押下をシミュレートする方法が、Windows Mobile の Shell API で実現できればよいのだが、見当たらない。もっと綺麗な方法が欲しいところ。
スクロールバーのウィンドウハンドルがあれば、ShowWindow、EnableWindow を呼び出す。
ウィンドウの水平・垂直スクロールバーの場合、
Windows Mobileの場合、フレームウィンドウのメニューは SHCreateMenuBar で設定する。このメニューはツールバーなので注意。
Direct 3D Mobile を使う。
[MSDN/CE 5.0] http://msdn.microsoft.com/en-us/library/aa452478.aspx
[MSDN/WM6] http://msdn.microsoft.com/en-us/library/aa921056.aspx
実装はされているが推奨していない。代わりに Waveform Audio API の使用を推奨している。
[MSDN] http://msdn2.microsoft.com/en-us/library/aa446919.aspx
サポートしていない。
サポートしていない。
代わりに SHLoadDIBitmap を使う。ただし、SHLoadDIBitmap はビットマップしか読めない。Windows Mobile 6 以上の環境であれば、Imaging API を使用すれば Jpeg、PNG、Gif を読み込める。
[MSDN/Imaging] http://msdn.microsoft.com/en-us/library/ms932606.aspx