Implement background material controls in Windows editor.

Also removed auto-sort from the material combo boxes (so sky is on top in both) and put true background materials (i.e. sky and tunnel) on top.
lights3
Sven Eberhardt 2015-08-09 13:36:08 -04:00
parent 8e5aed4bea
commit 638ed81608
3 changed files with 118 additions and 96 deletions

View File

@ -331,6 +331,7 @@ public:
hbmExact(0)
{
pPreviewWindow = NULL;
toolsDlg->ModeBack = true;
}
void LoadBitmaps(HINSTANCE instance)
@ -345,8 +346,6 @@ public:
if (!hbmRect2) hbmRect2=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_RECT2));
if (!hbmFill2) hbmFill2=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_FILL2));
if (!hbmPicker2) hbmPicker2=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_PICKER2));
if (!hbmIFT) hbmIFT=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_IFT));
if (!hbmNoIFT) hbmNoIFT=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_NOIFT));
if (!hbmDynamic) hbmDynamic=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_DYNAMIC));
if (!hbmStatic) hbmStatic=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_STATIC));
if (!hbmExact) hbmExact=(HBITMAP)LoadBitmapW(instance,MAKEINTRESOURCEW(IDB_EXACT));
@ -461,43 +460,33 @@ INT_PTR CALLBACK ToolsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
Console.ToolsDlg.SetTool(C4TLS_Picker, false);
return true;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case IDC_BUTTONIFT:
Console.ToolsDlg.SetIFT(true);
return true;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case IDC_BUTTONNOIFT:
Console.ToolsDlg.SetIFT(false);
return true;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case IDC_COMBOMATERIAL:
case IDC_COMBOFGMATERIAL: case IDC_COMBOBGMATERIAL:
case IDC_COMBOFGTEXTURE: case IDC_COMBOBGTEXTURE:
switch (HIWORD(wParam))
{
case CBN_SELCHANGE:
{
// New material or texture selected. Get selection string
wchar_t str[100];
int32_t cursel = SendDlgItemMessage(hDlg,IDC_COMBOMATERIAL,CB_GETCURSEL,0,0);
SendDlgItemMessage(hDlg,IDC_COMBOMATERIAL,CB_GETLBTEXT,cursel,(LPARAM)str);
Console.ToolsDlg.SetMaterial(StdStrBuf(str).getData());
break;
}
}
return true;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case IDC_COMBOTEXTURE:
switch (HIWORD(wParam))
{
case CBN_SELCHANGE:
{
wchar_t str[100];
int32_t cursel = SendDlgItemMessage(hDlg,IDC_COMBOTEXTURE,CB_GETCURSEL,0,0);
SendDlgItemMessage(hDlg,IDC_COMBOTEXTURE,CB_GETLBTEXT,cursel,(LPARAM)str);
Console.ToolsDlg.SetTexture(StdStrBuf(str).getData());
break;
}
WORD idCombo = LOWORD(wParam);
int32_t cursel = SendDlgItemMessage(hDlg, idCombo, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(hDlg, idCombo, CB_GETLBTEXT, cursel, (LPARAM)str);
// Convert to ascii
StdStrBuf str_buf(str);
const char *astr = str_buf.getData();
// Update appropriate setting in drawing tool
switch (idCombo)
{
case IDC_COMBOFGMATERIAL: Console.ToolsDlg.SetMaterial(astr); break;
case IDC_COMBOFGTEXTURE: Console.ToolsDlg.SetTexture(astr); break;
case IDC_COMBOBGMATERIAL: Console.ToolsDlg.SetBackMaterial(astr); break;
case IDC_COMBOBGTEXTURE: Console.ToolsDlg.SetBackTexture(astr); break;
}
}
return true;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
}
return false;
//----------------------------------------------------------------------------------------
}
@ -947,6 +936,8 @@ bool C4ConsoleGUI::ToolsDlgOpen(C4ToolsDlg *dlg)
SetWindowTextW(dlg->state->hDialog,LoadResStrW("IDS_DLG_TOOLS"));
SetDlgItemTextW(dlg->state->hDialog,IDC_STATICMATERIAL,LoadResStrW("IDS_CTL_MATERIAL"));
SetDlgItemTextW(dlg->state->hDialog,IDC_STATICTEXTURE,LoadResStrW("IDS_CTL_TEXTURE"));
SetDlgItemTextW(dlg->state->hDialog, IDC_STATICFOREGROUND, LoadResStrW("IDS_CTL_FOREGROUND"));
SetDlgItemTextW(dlg->state->hDialog, IDC_STATICBACKGROUND, LoadResStrW("IDS_CTL_BACKGROUND"));
// Load bitmaps if necessary
dlg->state->LoadBitmaps(Application.GetInstance());
// create target ctx for OpenGL rendering
@ -963,10 +954,32 @@ bool C4ConsoleGUI::ToolsDlgOpen(C4ToolsDlg *dlg)
void C4ConsoleGUI::ToolsDlgInitMaterialCtrls(class C4ToolsDlg *dlg)
{
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_ADDSTRING,0,GetWideLPARAM(C4TLS_MatSky));
for (int32_t cnt=0; cnt< ::MaterialMap.Num; cnt++)
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_ADDSTRING,0,GetWideLPARAM(::MaterialMap.Map[cnt].Name));
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(dlg->Material));
// All foreground materials
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOFGMATERIAL,CB_ADDSTRING,0,GetWideLPARAM(C4TLS_MatSky));
for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++)
{
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOFGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(::MaterialMap.Map[cnt].Name));
}
// Background materials: True background materials first; then the "funny" stuff
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(C4TLS_MatSky));
for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++)
{
if (::MaterialMap.Map[cnt].Density == C4M_Background)
{
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(::MaterialMap.Map[cnt].Name));
}
}
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, (LPARAM)L"----------");
for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++)
{
if (::MaterialMap.Map[cnt].Density != C4M_Background)
{
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_ADDSTRING, 0, GetWideLPARAM(::MaterialMap.Map[cnt].Name));
}
}
// Select current materials
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOFGMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(dlg->Material));
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_SELECTSTRING, 0, GetWideLPARAM(dlg->BackMaterial));
}
void C4ToolsDlg::UpdateToolCtrls()
@ -987,61 +1000,71 @@ void C4ToolsDlg::UpdateToolCtrls()
void C4ConsoleGUI::ToolsDlgSelectTexture(C4ToolsDlg *dlg, const char *texture)
{
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(texture));
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOFGTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(texture));
}
void C4ConsoleGUI::ToolsDlgSelectMaterial(C4ToolsDlg *dlg, const char *material)
{
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(material));
SendDlgItemMessage(dlg->state->hDialog,IDC_COMBOFGMATERIAL,CB_SELECTSTRING,0,GetWideLPARAM(material));
}
void C4ConsoleGUI::ToolsDlgSelectBackTexture(C4ToolsDlg *dlg, const char *texture)
{
// TODO
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGTEXTURE, CB_SELECTSTRING, 0, GetWideLPARAM(texture));
}
void C4ConsoleGUI::ToolsDlgSelectBackMaterial(C4ToolsDlg *dlg, const char *material)
{
// TODO
SendDlgItemMessage(dlg->state->hDialog, IDC_COMBOBGMATERIAL, CB_SELECTSTRING, 0, GetWideLPARAM(material));
}
void C4ToolsDlg::UpdateTextures()
{
// Refill dlg
SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_RESETCONTENT,0,(LPARAM)0);
// bottom-most: any invalid textures
bool fAnyEntry = false; int32_t cnt; const char *szTexture;
if (::Landscape.Mode!=C4LSC_Exact)
for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++)
{
if (!::TextureMap.GetIndex(Material, szTexture, false))
// Refill foreground and background combo boxes in dlg
WORD boxes[2] = { IDC_COMBOFGTEXTURE, IDC_COMBOBGTEXTURE };
const char *materials[2] = { Material, BackMaterial };
const char *textures[2] = { Texture, BackTexture };
for (int i = 0; i < 2; ++i)
{
WORD box = boxes[i];
const char *material = materials[i];
const char *texture = textures[i];
// clear previous
SendDlgItemMessage(state->hDialog, box, CB_RESETCONTENT, 0, (LPARAM)0);
// bottom-most: any invalid textures
bool fAnyEntry = false; int32_t cnt; const char *szTexture;
if (::Landscape.Mode != C4LSC_Exact)
for (cnt = 0; (szTexture = ::TextureMap.GetTexture(cnt)); cnt++)
{
// hide normal maps from texture selection
// theoretically, they could be used for drawing but they clutter the list and they don't look good
if (!WildcardMatch("*_NRM", szTexture))
if (!::TextureMap.GetIndex(material, szTexture, false))
{
fAnyEntry = true;
SendDlgItemMessage(state->hDialog, IDC_COMBOTEXTURE, CB_INSERTSTRING, 0, GetWideLPARAM(szTexture));
// hide normal maps from texture selection
// theoretically, they could be used for drawing but they clutter the list and they don't look good
if (!WildcardMatch("*_NRM", szTexture))
{
fAnyEntry = true;
SendDlgItemMessage(state->hDialog, box, CB_INSERTSTRING, 0, GetWideLPARAM(szTexture));
}
}
}
}
// separator
if (fAnyEntry)
{
SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_INSERTSTRING,0,(LPARAM)L"-------");
}
// atop: valid textures
for (cnt=0; (szTexture=::TextureMap.GetTexture(cnt)); cnt++)
{
// Current material-texture valid? Always valid for exact mode
if (::TextureMap.GetIndex(Material,szTexture,false) || ::Landscape.Mode==C4LSC_Exact)
// separator
if (fAnyEntry)
{
SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_INSERTSTRING,0,GetWideLPARAM(szTexture));
SendDlgItemMessage(state->hDialog, box, CB_INSERTSTRING, 0, (LPARAM)L"-------");
}
// atop: valid textures
for (cnt = 0; (szTexture = ::TextureMap.GetTexture(cnt)); cnt++)
{
// Current material-texture valid? Always valid for exact mode
if (::TextureMap.GetIndex(material, szTexture, false) || ::Landscape.Mode == C4LSC_Exact)
{
SendDlgItemMessage(state->hDialog, box, CB_INSERTSTRING, 0, GetWideLPARAM(szTexture));
}
}
// reselect current
SendDlgItemMessage(state->hDialog, box, CB_SELECTSTRING, 0, GetWideLPARAM(texture));
}
// reselect current
SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_SELECTSTRING,0,GetWideLPARAM(Texture));
}
void C4ToolsDlg::NeedPreviewUpdate()
@ -1114,27 +1137,22 @@ void C4ToolsDlg::InitGradeCtrl()
bool C4ToolsDlg::PopMaterial()
{
if (!state->hDialog) return false;
SetFocus(GetDlgItem(state->hDialog,IDC_COMBOMATERIAL));
SendDlgItemMessage(state->hDialog,IDC_COMBOMATERIAL,CB_SHOWDROPDOWN,true,0);
SetFocus(GetDlgItem(state->hDialog,IDC_COMBOFGMATERIAL));
SendDlgItemMessage(state->hDialog,IDC_COMBOFGMATERIAL,CB_SHOWDROPDOWN,true,0);
return true;
}
bool C4ToolsDlg::PopTextures()
{
if (!state->hDialog) return false;
SetFocus(GetDlgItem(state->hDialog,IDC_COMBOTEXTURE));
SendDlgItemMessage(state->hDialog,IDC_COMBOTEXTURE,CB_SHOWDROPDOWN,true,0);
SetFocus(GetDlgItem(state->hDialog,IDC_COMBOFGTEXTURE));
SendDlgItemMessage(state->hDialog,IDC_COMBOFGTEXTURE,CB_SHOWDROPDOWN,true,0);
return true;
}
void C4ToolsDlg::UpdateIFTControls()
{
if (!state->hDialog)
return;
SendDlgItemMessage(state->hDialog,IDC_BUTTONNOIFT,BM_SETSTATE,(ModeIFT==0),0);
UpdateWindow(GetDlgItem(state->hDialog,IDC_BUTTONNOIFT));
SendDlgItemMessage(state->hDialog,IDC_BUTTONIFT,BM_SETSTATE,(ModeIFT==1),0);
UpdateWindow(GetDlgItem(state->hDialog,IDC_BUTTONIFT));
// not using IFT
}
void C4ToolsDlg::UpdateLandscapeModeCtrls()
@ -1166,8 +1184,6 @@ void C4ToolsDlg::EnableControls()
SendDlgItemMessage(hDialog,IDC_BUTTONRECT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)((iLandscapeMode>=C4LSC_Static) ? state->hbmRect : state->hbmRect2));
SendDlgItemMessage(hDialog,IDC_BUTTONFILL,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)((iLandscapeMode>=C4LSC_Exact) ? state->hbmFill : state->hbmFill2));
SendDlgItemMessage(hDialog,IDC_BUTTONPICKER,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)((iLandscapeMode>=C4LSC_Static) ? state->hbmPicker : state->hbmPicker2));
SendDlgItemMessage(hDialog,IDC_BUTTONIFT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmIFT);
SendDlgItemMessage(hDialog,IDC_BUTTONNOIFT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmNoIFT);
SendDlgItemMessage(hDialog,IDC_BUTTONMODEDYNAMIC,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmDynamic);
SendDlgItemMessage(hDialog,IDC_BUTTONMODESTATIC,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmStatic);
SendDlgItemMessage(hDialog,IDC_BUTTONMODEEXACT,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)state->hbmExact);
@ -1177,12 +1193,14 @@ void C4ToolsDlg::EnableControls()
EnableWindow(GetDlgItem(hDialog,IDC_BUTTONRECT),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_BUTTONFILL),(iLandscapeMode>=C4LSC_Exact));
EnableWindow(GetDlgItem(hDialog,IDC_BUTTONPICKER),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_BUTTONIFT),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_BUTTONNOIFT),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_COMBOMATERIAL),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_COMBOTEXTURE),(iLandscapeMode>=C4LSC_Static) && !SEqual(Material,C4TLS_MatSky));
EnableWindow(GetDlgItem(hDialog,IDC_COMBOFGMATERIAL),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_COMBOFGTEXTURE),(iLandscapeMode>=C4LSC_Static) && !SEqual(Material,C4TLS_MatSky));
EnableWindow(GetDlgItem(hDialog,IDC_COMBOBGMATERIAL), (iLandscapeMode >= C4LSC_Static) && !SEqual(Material, C4TLS_MatSky));
EnableWindow(GetDlgItem(hDialog, IDC_COMBOBGTEXTURE), (iLandscapeMode >= C4LSC_Static) && !SEqual(Material, C4TLS_MatSky) && !SEqual(BackMaterial, C4TLS_MatSky));
EnableWindow(GetDlgItem(hDialog,IDC_STATICMATERIAL),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_STATICTEXTURE),(iLandscapeMode>=C4LSC_Static) && !SEqual(Material,C4TLS_MatSky));
EnableWindow(GetDlgItem(hDialog,IDC_STATICFOREGROUND), (iLandscapeMode >= C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_STATICBACKGROUND), (iLandscapeMode >= C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_SLIDERGRADE),(iLandscapeMode>=C4LSC_Static));
EnableWindow(GetDlgItem(hDialog,IDC_PREVIEW),(iLandscapeMode>=C4LSC_Static));

View File

@ -136,7 +136,7 @@ BEGIN
22,114,12,WS_EX_STATICEDGE
END
IDD_TOOLS DIALOGEX 0, 0, 194, 55
IDD_TOOLS DIALOGEX 0, 0, 335, 55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "TOOLS"
FONT 8, "MS Sans Serif", 0, 0, 0x1
@ -147,13 +147,17 @@ BEGIN
PUSHBUTTON "Button1",IDC_BUTTONFILL,92,2,16,16,BS_BITMAP
CONTROL "Slider1",IDC_SLIDERGRADE,"msctls_trackbar32",TBS_VERT |
TBS_TOP | TBS_NOTICKS | WS_TABSTOP,59,18,10,36
LTEXT "MATERIAL",IDC_STATICMATERIAL,112,3,78,8
LTEXT "TEXTURE",IDC_STATICTEXTURE,112,27,78,8
PUSHBUTTON "",IDC_BUTTONNOIFT,71,20,18,15,BS_BITMAP
PUSHBUTTON "",IDC_BUTTONIFT,71,36,18,15,BS_BITMAP
COMBOBOX IDC_COMBOMATERIAL,112,12,78,100,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBOTEXTURE,112,36,78,100,CBS_DROPDOWNLIST |
LTEXT "MATERIAL",IDC_STATICMATERIAL,168,6,78,8
LTEXT "TEXTURE",IDC_STATICTEXTURE,255,6,78,8
LTEXT "FOREGROUND",IDC_STATICFOREGROUND,108,20,54,8
LTEXT "BACKGROUND",IDC_STATICBACKGROUND,108,38,54,8
COMBOBOX IDC_COMBOFGMATERIAL,168,18,78,100,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBOFGTEXTURE,252,18,78,100,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBOBGMATERIAL,168,36,78,100,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBOBGTEXTURE,252,36,78,100,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_PREVIEW,"Static",SS_BLACKFRAME,24,21,33,30,
WS_EX_TRANSPARENT | WS_EX_CLIENTEDGE

View File

@ -12,12 +12,10 @@
#define IDB_FILL2 1007
#define IDB_HALT 1008
#define IDB_HALT2 1009
#define IDB_IFT 1010
#define IDB_LINE 1011
#define IDB_LINE2 1012
#define IDB_MOUSE 1013
#define IDB_MOUSE2 1014
#define IDB_NOIFT 1015
#define IDB_PICKER 1016
#define IDB_PICKER2 1017
#define IDB_PLAY 1018
@ -28,7 +26,6 @@
#define IDC_BUTTONBRUSH 2000
#define IDC_BUTTONFILL 2001
#define IDC_BUTTONHALT 2002
#define IDC_BUTTONIFT 2003
#define IDC_BUTTONLINE 2004
#define IDC_BUTTONMODEDRAW 2005
#define IDC_BUTTONMODEDYNAMIC 2006
@ -36,14 +33,13 @@
#define IDC_BUTTONMODEEXACT 2008
#define IDC_BUTTONMODEPLAY 2009
#define IDC_BUTTONMODESTATIC 2010
#define IDC_BUTTONNOIFT 2011
#define IDC_BUTTONPICKER 2012
#define IDC_BUTTONPLAY 2013
#define IDC_BUTTONRECT 2014
#define IDC_BUTTONRELOADDEF 2015
#define IDC_COMBOINPUT 2016
#define IDC_COMBOMATERIAL 2017
#define IDC_COMBOTEXTURE 2018
#define IDC_COMBOFGMATERIAL 2017
#define IDC_COMBOFGTEXTURE 2018
#define IDC_EDITDATA 2019
#define IDC_EDITOUTPUT 2020
#define IDC_PREVIEW 2021
@ -61,6 +57,10 @@
#define IDC_GFXERR_YINP 2034
#define IDC_GFXERR_FSCRN 2035
#define IDC_GFXERR_INVAL 2036
#define IDC_STATICFOREGROUND 2037
#define IDC_STATICBACKGROUND 2038
#define IDC_COMBOBGMATERIAL 2039
#define IDC_COMBOBGTEXTURE 2040
#define IDD_COMPONENT 3000
#define IDD_CONSOLE 3001
#define IDD_PROPERTIES 3002