Я пытаюсь сделать макрос, который расширяет символическую константу до 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 говорит, что идентификатор Wnd_Main_0x000F
не определено.)
Задача ещё не решена.
Других решений пока нет …