Is calling a function that does the same thing as the message you're sending faster than calling `SendMessage()`?

For example in the code below in `case WM_RBUTTONUP:`, which is faster, calling `EnableTwoWindows(firstWnd, secondWnd);`or sending `SendMessage(hwnd, CUSTOM_MESSAGE_ENABLE_TWO_WINDOWS, 0, 0);`? And what are the advantages and disadvantages of calling a function vs sending a message?

```
void EnableTwoWindows(HWND hwnd1, HWND hwnd2)
{
    EnableWindow(hwnd1, TRUE);
    EnableWindow(hwnd2, TRUE);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static HWND firstWnd, secondWnd;

    switch(msg)
    {
    case CUSTOM_MESSAGE_ENABLE_TWO_WINDOWS:
        EnableWindow(firstWnd, TRUE);
        EnableWindow(secondWnd, TRUE);
        break;

    case WM_RBUTTONUP:
        //EnableTwoWindows(firstWnd, secondWnd); //Is calling this function faster? or
        //SendMessage(hwnd, CUSTOM_MESSAGE_ENABLE_TWO_WINDOWS, 0, 0); //Is sending message faster?
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }

    return 0;
}

```