2006年8月11日金曜日

実行しているDLLのパスを取得

Windowsには実行しているプログラムのパスを取得する GetModuleFileName というAPIがありますが、第一引数のHMODULEをNULLにしてDLLから実行すると、そのDLLを呼び出しているexeファイルのパスが取得されます。
DLL自体のパスを取得したい場合、DllMainで渡されるhModuleを第一引数として呼び出してやると取得できます。

2006年8月8日火曜日

SIP表示・非表示でのダイアログサイズ変更

またまたWindows Mobile 5.0の開発メモ。
今度は、SIP(Software Input Panel)の表示・非表示切替に合わせて、ダイアログのサイズを変更する方法です。
SDKのサンプルを見ながら実装してみたら、案外簡単にできました。
ちなみに、サンプルの位置はデフォルトのインストール位置であれば
"C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32\Handlesip"
にあります。

実際、MFCのダイアログに実装する場合はWM_SETTINGCHANGEイベントハンドラを作成し、


if ( SPI_SETSIPINFO == uFlags )
{
    SHACTIVATEINFO sai;
    memset( &sai, 0, sizeof( SHACTIVATEINFO ) );
    SHHandleWMSettingChange( m_hWnd, -1, 0, &sai );

    // ここでダイアログの再描画処理
}


というコードを入れてあげればOKそうです。
SHHandleWMSettingChangeのwParamに-1、lParamに0を渡すのが大事っぽい。
サンプル見ないと、絶対わからないよなぁ…(´・ω・`)

×ボタン?OKボタン?

Windows Mobile 5.0でアプリケーションの右上のボタンを変更する方法。
OKボタンだとOnOK、×ボタンだとOnCancelで捕まえられます。

BOOL SHDoneButton( HWND hwndRequester, DWORD dwState );

dwStateの値は以下の値が取れます。
・SHDB_SHOW
・SHDB_HIDE
・SHDB_SHOWCANCEL