/* Unit test suite for resources.
 *
 * Copyright 2004 Ferenc Wagner
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "windef.h"
#include "winuser.h"

1 ACCELERATORS
{
  "^N", 1000 /* Ctrl+'N' */
  "N", 1001 /* Shift+'n' */
  "n", 1002 /* 'n' */
}

2 ACCELERATORS
{
  78, 1000, VIRTKEY, CONTROL /* Ctrl+'N' */
  78, 1001, ASCII /* 'N' */
  110, 1002, ASCII /* 'n' */
  78, 1003, VIRTKEY, ALT /* Alt+'N' */
  78, 1004, VIRTKEY, CONTROL, SHIFT /* Ctrl+Shift+'N' */
  78, 1005, VIRTKEY, CONTROL, ALT, SHIFT /* Ctrl+Alt+Shift+'N' */
}

STRINGTABLE
{
  0 "String resource"
}

TEST_DIALOG DIALOG DISCARDABLE 0, 0, 60, 30
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Test dialog"
FONT 8, "MS Shell Dlg"
{
  DEFPUSHBUTTON "OK",     IDOK,4,4,50,14, WS_TABSTOP | WS_GROUP
}

RADIO_TEST_DIALOG DIALOGEX 0, 0, 160, 80
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Radio Button Test Dialog"
FONT 8, "MS Shell Dlg"
{
  GROUPBOX "Static",      100,6,5,92,70
  CONTROL  "Radio1",      200,"Button",BS_AUTORADIOBUTTON |
                          WS_GROUP | WS_TABSTOP,17,27,39,10
  CONTROL  "Radio2",      201,"Button",BS_AUTORADIOBUTTON,17,40,39,10
  PUSHBUTTON "Cancel",    IDCANCEL,109,20,50,14, WS_TABSTOP | WS_GROUP
}

CLASS_TEST_DIALOG DIALOG DISCARDABLE  0, 0, 91, 28
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "CreateDialogParams Test"
CLASS "TestDialog"
FONT 8, "MS Shell Dlg"
{
}

FOCUS_TEST_DIALOG DIALOG DISCARDABLE 0, 0, 60, 30
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CONTROL
CAPTION "Test dialog"
FONT 8, "MS Shell Dlg"
{
  EDITTEXT                200,4,4,50,14
}
