/*
 * 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_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 LOADONCALL DISCARDABLE idt_check.bmp

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

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

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

/* @makedep: idb_view_large.bmp */
IDB_VIEW_LARGE BITMAP LOADONCALL MOVEABLE DISCARDABLE idb_view_large.bmp

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

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

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

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

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

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

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

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

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

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