INT_PTR CSettingsDialog::dialogProc(HWND handle, UINT message, WPARAM wParam, LPARAM lParam)
{
    if (message == WM_INITDIALOG) {
        CSettingsDialog* dialog = reinterpret_cast<CSettingsDialog*>(lParam);
        SetWindowLongPtr(handle, GWLP_USERDATA, (LONG)dialog);
        dialog->OnInit(handle);
        return TRUE;
    }
    CSettingsDialog* dialog = reinterpret_cast<CSettingsDialog*>(GetWindowLongPtr(handle, GWLP_USERDATA));
    switch (message) {
        case WM_COMMAND:
        {
            return dialog->OnCommand(wParam);
        }
        case WM_HSCROLL:
        {
            dialog->OnScroll(wParam, lParam);
            return FALSE;
        }
    }
    return FALSE;
}