//モードレスダイアログ
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
//モードレスダイアログのメモリデバイスコンテキスト
static HDC hDMemorydc;
//バックバッファ
static HDC hdcDBackBuffer;
//モードレスに描画するビットマップ
static HBITMAP hDBackBufferBitmap;
TCHAR filename;
switch(uMsg)
{
case WM_CTLCOLORDLG:
//ダイアログの背景を白くする
return (long)GetStockObject(WHITE_BRUSH);
//バックバッファを作成するときのメッセージ
case WM_CREATE:
hdc = GetDC(g_hDialog);
//バックバッファ作成
setBackBufferDialog
(hWnd,hdc,&hDMemorydc,&hdcDBackBuffer,&hDBackBufferBitmap);
ReleaseDC(g_hDialog , hdc);
return TRUE;
case WM_BUFFERIMAGE:
//バックバッファに画像をコピーする
DrawBufferImage
(&hDMemorydc,&hdcDBackBuffer,&hDBackBufferBitmap,(TCHAR*)wParam);
MessageBox(hWnd,(TCHAR*)wParam,TEXT(押したボタン),MB_OK);
return TRUE;
}
return FALSE;
}
WM_BUFFERIMAGEはオリジナルメッセージなんですが
ダイアログボックスをクリックしたらこの部分が実行されてしまいます
そんな処理はしてないんですがこれはどうしてなのでしょうか?
VC2005でSDKです。
WM_USER + n は、ダイアログのメッセージIDと競合します。
WM_APP + n を使いましょう。
Kerryさんが書かれているように
WM_USERの一部は追加された新しいコントロールやらメッセージに使われていて
Win3.1時代のようにユーザーが全てを勝手に使える状態ではなくなっています。
今後、さらに追加で食い潰される可能性まで考えるとWM_USER + nではなくて
WM_APP + nを使った方が良いと思います。
最新の資料にはWM_APPを使いなさいという話が出ていたと思います。
出所をきちんと覚えていないのでここには書けませんけれど。