Объединить с именем символической константы

Я пытаюсь сделать макрос, который расширяет символическую константу до оператора case следующим образом:

// #define WM_PAINT 0x000F
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        BIND_MSG(WM_PAINT)
        // -> case WM_PAINT: Wnd_Main_WM_PAINT (hWnd, wParam, lParam); break;
    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}

Я пробовал много вещей. Лучший рабочий макрос, который я получил, был:

#define BIND_MSG(msg) case (msg): Wnd_Main_##msg (hWnd, wParam, lParam); break;

Но этот макрос расширяется не до Wnd_Main_WM_PAINT, а до Wnd_Main_0x000F. Когда я пробую Wnd_Main_ ## #msg вместо Wnd_Main_##msg, я получаю не Wnd_Main_WM_PAINT, а Wnd_Main_. Есть ли возможность объединить Wnd_Main_ с именем символической константы WM_PAINT?

Visual Studio расширяет макрос до ‹code›Wnd_Main_0x000F‹/code›

(Извините, скриншот на немецком языке. Visual Studio говорит, что идентификатор Wnd_Main_0x000F не определен.)


person Cubi73    schedule 09.02.2014    source источник
comment
Я получаю Wnd_Main_WM_PAINT.   -  person chris    schedule 09.02.2014
comment
Ваш WM_PAINT определен как #define WM_PAINT 0x000F?   -  person Cubi73    schedule 09.02.2014
comment
Более важный вопрос Почему вы разрабатываете код, который сложно поддерживать?   -  person Ed Heal    schedule 09.02.2014
comment
Да, это прямо по ссылке. Я использовал столько вашего опубликованного кода, сколько мог.   -  person chris    schedule 09.02.2014
comment
Да, ссылка работает, но Visual Studio продолжает расширять ее до Wnd_Proc_0x000F.   -  person Cubi73    schedule 09.02.2014
comment
Насколько я знаю, это стандартное поведение, чтобы правильно его расширить, и нестандартное поведение, чтобы поступить иначе. Точный код в ссылке расширяется до этого?   -  person chris    schedule 09.02.2014
comment
похоже, что WM_PAINT принудительно выполняется через промежуточное расширение, что-то, что используется для текстовых макросов как это. Лучший вопрос: если вы делаете это, почему бы просто не использовать взломщики сообщений в windowsx.h   -  person WhozCraig    schedule 09.02.2014
comment
@chris: Coliru расширяет его до Wnd_Main_WM_PAINT, Visual Studio до Wnd_Main_0x000F   -  person Cubi73    schedule 09.02.2014