Salve,

vorrei implementare un message cracker personale per poter creare dei metodi collegati ad ogni menuitem del menu:

codice:
#define STRICT
#include <windows.h>
#include <windowsx.h>

#define IDM_BLOCK 800

// Declare Custom HANDLE MSG //
#define HANDLE_IDM_BLOCK(hwnd, wParam, lParam, fn) \
    ((fn)(hwnd), 0L)

#define FORWARD_IDM_BLOCK(hwnd, fn) \
    (void)(fn)((hwnd), IDM_BLOCK, 0L, 0L)
///////////////////////////////

// Default
void Cls_OnDestroy(HWND hwnd);
void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct);

// Custom
void Cls_OnMenuBlock(HWND hwnd);

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	__try
	{
		switch (message)
		{
			HANDLE_MSG (hWnd, WM_CREATE, Cls_OnCreate);
			HANDLE_MSG (hWnd, WM_COMMAND, Cls_OnCommand);
			HANDLE_MSG (hWnd, WM_DESTROY, Cls_OnDestroy);
		}
	}

	__except(EXCEPTION_EXECUTE_HANDLER) {}

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

void Cls_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
{
	__try
	{
		switch (id)
		{
			HANDLE_MSG (hWnd, IDM_BLOCK, Cls_OnMenuBlock);
		}
	}

	__except(EXCEPTION_EXECUTE_HANDLER) {}
}

void Cls_OnMenuBlock(HWND hwnd)
{

}
in pratica nella callback window WM_COMMAND mi porta a Cls_OnCommand() ma da la non posso gestire il menuitem IDM_BLOCK infanti non mi porta alla funzione Cls_OnMenuBlock() (portandosi dietro HWND) anche se credo di avre dichiarato bene la macro HANDLE_IDM_BLOCK (l'ho copiata da WM_DESTROY dal file windowsx.h la macro si porta appresso solo la HWND)

L'errore quando eseguo il codice è:

error C2562: 'Cls_OnCommand' : 'void' function returning a value

ma a questo punto non capisco dove sbaglio!

grazie