オリジナルメッセージ

[戻る]
リク 2006/12/05(火) 03:17:15
//モードレスダイアログ
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です。

Kerry 2006/12/05(火) 03:24:14
WM_USER + n は、ダイアログのメッセージIDと競合します。
WM_APP + n を使いましょう。

PATIO 2006/12/05(火) 10:48:12
Kerryさんが書かれているように
WM_USERの一部は追加された新しいコントロールやらメッセージに使われていて
Win3.1時代のようにユーザーが全てを勝手に使える状態ではなくなっています。
今後、さらに追加で食い潰される可能性まで考えるとWM_USER + nではなくて
WM_APP + nを使った方が良いと思います。

最新の資料にはWM_APPを使いなさいという話が出ていたと思います。
出所をきちんと覚えていないのでここには書けませんけれど。

瀬戸っぷ [E-Mail] 2006/12/08(金) 00:04:47
とりあえず、解決のようです。
http://forums.belution.com/ja/vc/000/384/54s.shtml

WM_CTLCOLORDLGが正しく動いているか疑問ですが。

古いスレッドには追加発言できません。