/*
 * Top level resource file for Common Controls
 *
 * Copyright 1999 Bertho Stultiens
 * Copyright 1999 Eric Kohl
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "comctl32.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    IDS_CLOSE    "Close"
}

STRINGTABLE
{
    IDM_TODAY    "Today:"
    IDM_GOTODAY  "Go to today"
}

STRINGTABLE
{
    IDS_SEPARATOR "Separator"
}

STRINGTABLE
{
    HKY_NONE "#msgctxt#hotkey#None"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine Common Controls"
#define WINE_FILENAME_STR "comctl32.dll"
#define WINE_FILEVERSION COMCTL32_VERSION, COMCTL32_VERSION_MINOR, 4704, 1100
#define WINE_FILEVERSION_STR "5.81"
#define WINE_PRODUCTVERSION WINE_FILEVERSION
#define WINE_PRODUCTVERSION_STR WINE_FILEVERSION_STR

#include "wine/wine_common_ver.rc"

/* @makedep: idt_check.bmp */
IDT_CHECK BITMAP idt_check.bmp

/* @makedep: idb_std_small.bmp */
IDB_STD_SMALL BITMAP idb_std_small.bmp

/* @makedep: idb_std_large.bmp */
IDB_STD_LARGE BITMAP idb_std_large.bmp

/* @makedep: idb_view_small.bmp */
IDB_VIEW_SMALL BITMAP idb_view_small.bmp

/* @makedep: idb_view_large.bmp */
IDB_VIEW_LARGE BITMAP idb_view_large.bmp

/* @makedep: idb_hist_small.bmp */
IDB_HIST_SMALL BITMAP idb_hist_small.bmp

/* @makedep: idb_hist_large.bmp */
IDB_HIST_LARGE BITMAP idb_hist_large.bmp

/* @makedep: idc_copy.cur */
IDC_COPY CURSOR idc_copy.cur

/* @makedep: idc_divider.cur */
IDC_DIVIDER CURSOR idc_divider.cur

/* @makedep: idc_divideropen.cur */
IDC_DIVIDEROPEN CURSOR idc_divideropen.cur

/* @makedep: idc_movebutton.cur */
IDC_MOVEBUTTON CURSOR idc_movebutton.cur

/* @makedep: idi_dragarrow.ico */
IDI_DRAGARROW ICON idi_dragarrow.ico

/* @makedep: idi_tt_info_sm.ico */
IDI_TT_INFO_SM ICON idi_tt_info_sm.ico

/* @makedep: idi_tt_warn_sm.ico */
IDI_TT_WARN_SM ICON idi_tt_warn_sm.ico

/* @makedep: idi_tt_error_sm.ico */
IDI_TT_ERROR_SM ICON idi_tt_error_sm.ico
