/*
 * 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 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
