1
0
mirror of https://github.com/k4zmu2a/SpaceCadetPinball.git synced 2024-11-07 03:12:58 +01:00

Table, Component v2. Strings RC.

This commit is contained in:
oz 2020-11-04 16:22:52 +03:00
parent 5e94b5b513
commit 4157e79c83
9 changed files with 567 additions and 19 deletions

View File

@ -8,13 +8,17 @@
#include "partman.h"
#include "DatParser.h"
#include "loader.h"
#include "pinball.h"
#include "score.h"
#include "TPinballTable.h"
#include "TTextBox.h"
int main()
{
std::cout << "Hello World!\n";
pinball::hinst = GetModuleHandle(nullptr);
objlist_class d = objlist_class(2, 4);
for (int i = 0; i < 100; i++)
{
@ -53,7 +57,14 @@ int main()
auto score1 = score::create("score1", 117);
auto pinballTable = new TPinballTable();
//pinballTable->find_component(1);
for (int i = 0; i < 190; i++)
{
auto rsc = pinball::get_rc_string(i, 0);
if (rsc)
printf_s("%d:\t%s\n", i, rsc);
}
//DatParser::Parse(dataFileName);
std::cout << "Goodby World!\n";
}

View File

@ -1,6 +1,5 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
@ -14,10 +13,11 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
// Russian (Russia) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 25, 1
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
@ -44,6 +44,215 @@ END
#endif // APSTUDIO_INVOKED
#endif // Russian (Russia) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_STRING101 "Replay Awarded"
IDS_STRING102 "Ball Locked"
IDS_STRING103 "Center Post\n%ld"
IDS_STRING104 "Bonus Awarded\n%ld"
IDS_STRING105 "Bonus Activated"
IDS_STRING106 "Weapons Upgraded"
IDS_STRING107 "Engine Upgraded"
IDS_STRING108 "Bonus up 1 Million"
IDS_STRING109 "Extra Ball Available\n%ld"
IDS_STRING110 "Extra Ball"
IDS_STRING111 "Reflex Shot Award\n%ld"
IDS_STRING112 "Final Battle Won"
IDS_STRING113 "Hyperspace Bonus\n%ld"
IDS_STRING114 "Hyperspace Bonus Available"
IDS_STRING115 "Jackpot Awarded\n%ld"
IDS_STRING116 "Jackpot Activated"
IDS_STRING117 "Multiball"
IDS_STRING118 "Ramp Bonus Awarded"
IDS_STRING119 "Light Added"
IDS_STRING120 "Ramp Bonus On"
IDS_STRING121 "Light Reset Off"
IDS_STRING122 "Skill Shot\n%ld"
IDS_STRING123 "Game Paused\nF3 to Resume"
IDS_STRING124 "Continue Play"
IDS_STRING125 "F2 Starts New Game"
IDS_STRING126 "Careful..."
IDS_STRING127 "Player 1"
IDS_STRING128 "Player 2"
IDS_STRING129 "Player 3"
IDS_STRING130 "Player 4"
IDS_STRING131 "Demo\nPlayer 1"
IDS_STRING132 "Demo\nPlayer 2"
IDS_STRING133 "Demo\nPlayer 3"
IDS_STRING134 "Demo\nPlayer 4"
IDS_STRING135 "Game Over"
IDS_STRING136 "TILT!"
IDS_STRING137 "This program requires an 80386 or later CPU."
IDS_STRING138 "80386 Required"
IDS_STRING139 "3D Pinball for Windows - Space Cadet"
IDS_STRING140 "One or more of the player controls is set to the same key,\nfor best performance use unique keys for each control."
IDS_STRING141 "Clear High Scores?"
IDS_STRING142 "Confirm"
IDS_STRING143 "WAVEMIX.INF is missing - it must be in the pinball directory!"
IDS_STRING144 "Warning:"
IDS_STRING145 "Ship Re-Fueled"
IDS_STRING146 "Gravity Well"
IDS_STRING147 "Time Warp Forward"
IDS_STRING148 "Time Warp Backward"
IDS_STRING149 "Maelstrom!"
IDS_STRING150 "Wormhole"
IDS_STRING151 "Awaiting Deployment"
IDS_STRING152 "Flags Upgraded"
IDS_STRING153 "Bonus Hold"
IDS_STRING154 "Level One Commendation"
IDS_STRING155 "Level Two Commendation"
IDS_STRING156 "Level Three Commendation"
IDS_STRING157 "Field Multiplier 2x"
IDS_STRING158 "Field Multiplier 3x"
IDS_STRING159 "Field Multiplier 5x"
IDS_STRING160 "Field Multiplier 10x"
IDS_STRING161 "Target Practice"
IDS_STRING162 "Launch Training"
IDS_STRING163 "Re-Entry Training"
IDS_STRING164 "Science"
IDS_STRING165 "Stray Comet"
IDS_STRING166 "Black Hole"
IDS_STRING167 "Space Radiation"
IDS_STRING168 "Bug Hunt"
IDS_STRING169 "Alien Menace"
IDS_STRING170 "Rescue"
IDS_STRING171 "Satellite Retrieval"
IDS_STRING172 "Recon"
IDS_STRING173 "Doomsday Machine"
IDS_STRING174 "Cosmic Plague"
IDS_STRING175 "Secret"
IDS_STRING176 "Time Warp"
IDS_STRING177 "Maelstrom"
IDS_STRING178 "Mission Accepted\n%ld"
IDS_STRING179 "Mission Completed\n%ld"
IDS_STRING180 "%s Mission Selected"
IDS_STRING181 "Black Hole\n%ld"
IDS_STRING182 "Gravity Normalized\n%ld"
IDS_STRING183 "Gravity Well\n%ld"
IDS_STRING184 "Promotion to %s"
IDS_STRING185 "Cadet"
IDS_STRING186 "Ensign"
IDS_STRING187 "Lieutenant"
IDS_STRING188 "Captain"
IDS_STRING189 "Lt Commander"
IDS_STRING190 "Commander"
IDS_STRING191 "Commodore"
IDS_STRING192 "Admiral"
IDS_STRING193 "Fleet Admiral"
IDS_STRING194 "Wormhole Opened"
IDS_STRING195 "Crash Bonus\n%ld"
IDS_STRING196 "Replay Ball"
IDS_STRING197 "Re-Deploy"
IDS_STRING198 "Player 1 Shoot Again"
IDS_STRING199 "Player 2 Shoot Again"
IDS_STRING200 "Player 3 Shoot Again"
IDS_STRING201 "Player 4 Shoot Again"
IDS_STRING202 "This 3D Pinball Table was created for Microsoft by Maxis.\nFor more information call (800)-336-2947\n(US and Canadian customers only).\nCopyright (c) 1995 Maxis."
IDS_STRING203 "3D Pinball Table created for Microsoft by Maxis. Copyright (c) 1995 Maxis."
IDS_STRING204 "About 3D Pinball"
IDS_STRING205 "Hit Mission Targets To Select Mission"
IDS_STRING206 "Re-Fuel Ship"
IDS_STRING207 "Launch Ramp To Accept %s Mission"
IDS_STRING208 "Attack Bumpers Hits\nLeft: %d"
IDS_STRING209 "Target Training Passed"
IDS_STRING210 "Mission Aborted"
IDS_STRING211 "Launches Left: %d"
IDS_STRING212 "Launch Training Passed"
IDS_STRING213 "Re-Entries Left: %d"
IDS_STRING214 "Re-Entry Training Passed"
IDS_STRING215 "Drop Targets\nLeft: %d"
IDS_STRING216 "Science Mission Completed"
IDS_STRING217 "Warning -- Low Fuel"
IDS_STRING218 "Fill Right Hazard Banks"
IDS_STRING219 "Hyperspace Launch"
IDS_STRING220 "Comet Destroyed"
IDS_STRING221 "Enter Wormhole"
IDS_STRING222 "Radiation Eliminated"
IDS_STRING223 "Upgrade Launch Bumpers"
IDS_STRING224 "Enter Black Hole"
IDS_STRING225 "Black Hole Eliminated"
IDS_STRING226 "Targets\nLeft: %d"
IDS_STRING227 "Xenomorphs Destroyed"
IDS_STRING228 "Upgrade Flags"
IDS_STRING229 "Hyperspace Launch"
IDS_STRING230 "Survivors Rescued"
IDS_STRING231 "Aliens Repelled"
IDS_STRING232 "Hit Fuel Targets"
IDS_STRING233 "Remote Attack Bumper Hits\nLeft: %d"
IDS_STRING234 "Satellite Repaired"
IDS_STRING235 "Lane Passes\nLeft: %d"
IDS_STRING236 "Shoot Ball Up Fuel Chute"
IDS_STRING237 "Survey Complete"
IDS_STRING238 "Out Lane Passes\nLeft: %d"
IDS_STRING239 "Doomsday Machine Destroyed"
IDS_STRING240 "Roll Flags: %d"
IDS_STRING241 "Hit Space Warp Rollover"
IDS_STRING242 "Plague Eliminated"
IDS_STRING243 "Hit Yellow Wormhole"
IDS_STRING244 "Hit Red Wormhole"
IDS_STRING245 "Hit Green Wormhole"
IDS_STRING246 "Plans Recovered"
IDS_STRING247 "Rebound Hits\nLeft: %d"
IDS_STRING248 "Hit Hyperspace Chute or Launch Ramp"
IDS_STRING249 "Drop Target Hits\nLeft: %d"
IDS_STRING250 "Spot Target Hits\nLeft: %d"
IDS_STRING251 "Lanes Passes\nLeft: %d"
IDS_STRING252 "Shoot Ball Up Fuel Chute"
IDS_STRING253 "Hit Launch Ramp"
IDS_STRING254 "Hit Flags"
IDS_STRING255 "Hit Worm Hole"
IDS_STRING256 "Hyperspace Chute to end Maelstrom"
IDS_STRING257 "pinball.mid"
IDS_STRING258 "1 UseBitmapFont"
IDS_STRING259 "90 Left Flipper Key"
IDS_STRING260 "191 Right Flipper Key"
IDS_STRING261 "32 Plunger Key"
IDS_STRING262 "88 Bump Left Key"
IDS_STRING263 "190 Bump Right Key"
IDS_STRING264 "38 Bump Bottom Key"
IDS_STRING265 "Software\\Microsoft\\Plus!\\Pinball"
IDS_STRING266 "SpaceCadet"
IDS_STRING267 "1c7c22a0-9576-11ce-bf80-444553540000"
IDS_STRING268 "PINBALL.DAT"
IDS_STRING269 "Space Cadet"
IDS_STRING270 "Error:"
IDS_STRING271 "Unable to find other tables."
IDS_STRING272 "3D Pinball\nSpace Cadet"
IDS_STRING273 "Promotion to %s"
IDS_STRING274 "Demotion to %s"
IDS_STRING275 "Upgrade Attack Bumpers"
IDS_STRING276 "Fill Left Hazard Banks"
IDS_STRING277 "HIGH SCORE"
IDS_STRING278 "pinball.chm"
IDS_STRING279 "Not enough memory to run 3D Pinball."
IDS_STRING280 "Player 1's Score\n%ld"
IDS_STRING281 "Player 2's Score\n%ld"
IDS_STRING282 "Player 3's Score\n%ld"
IDS_STRING283 "Player 4's Score\n%ld"
IDS_STRING284 "High Score 1\n%ld"
IDS_STRING285 "High Score 2\n%ld"
IDS_STRING286 "High Score 3\n%ld"
IDS_STRING287 "High Score 4\n%ld"
IDS_STRING288 "High Score 5\n%ld"
IDS_STRING289 "255 255 255 (R G B default font color)"
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
@ -58,3 +267,4 @@ END
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -10,7 +10,7 @@ TPinballComponent::TPinballComponent(TPinballTable* table, int groupIndex, bool
visualStruct visual{}; // [esp+Ch] [ebp-6Ch]
//this->VfTable = (int)&TPinballComponent::`vftable';
this->Unknown2 = 0;
this->MessageField = 0;
this->UnknownBaseFlag1 = 0;
this->UnknownBaseFlag2 = 0;
this->PinballTable = table;
@ -79,3 +79,33 @@ TPinballComponent::TPinballComponent(TPinballTable* table, int groupIndex, bool
}
this->GroupIndex = groupIndex;
}
TPinballComponent::~TPinballComponent()
{
TPinballTable* table = PinballTable;
if (table)
table->ListP1->Delete(this);
delete List1Bitmap8;
delete List2Bitmap16;
}
int TPinballComponent::Message(int message1, float message2)
{
this->MessageField = message1;
if (message1 == 1024)
this->MessageField = 0;
return 0;
}
void TPinballComponent::put_scoring( int score1, int score2)
{
}
int TPinballComponent::get_scoring(int score1)
{
return 0;
}

View File

@ -3,13 +3,18 @@
class TPinballComponent
{public:
{
public:
TPinballComponent(class TPinballTable* table, int groupIndex, bool loadVisuals);
virtual ~TPinballComponent();
virtual int Message(int message1, float message2);
virtual void put_scoring(int score1, int score2);
virtual int get_scoring(int score1);
int VfTable;
__int8 UnknownBaseFlag1;
__int8 UnknownBaseFlag2;
int Unknown2;
int MessageField;
char* GroupName;
int Unknown4;
int Unknown5;
@ -19,4 +24,3 @@ class TPinballComponent
TZmapList* List1Bitmap8;
TZmapList* List2Bitmap16;
};

View File

@ -180,8 +180,83 @@ TPinballTable::TPinballTable(): TPinballComponent(nullptr, -1, false)
}
}
/* build_occlude_list();
InfoTextBox = (TTextBox*)TPinballTable::find_component(this, "info_text_box");
MissTextBox = (TTextBox*)TPinballTable::find_component(this, "mission_text_box");
control_make_links(this);*/
//build_occlude_list();
pinball::InfoTextBox = static_cast<TTextBox*>(find_component("info_text_box"));
pinball::MissTextBox = static_cast<TTextBox*>(find_component("mission_text_box"));
//control_make_links(this);
}
TPinballTable::~TPinballTable()
{
//this->VfTable = (TPinballComponent_vtbl*)&TPinballTable::`vftable';
scoreStruct** scorePtr = &Score2;
int index = 4;
do
{
if (*scorePtr)
{
free(*scorePtr);
*scorePtr = nullptr;
}
scorePtr += 7;
--index;
}
while (index);
if (ScorePlayerNumber1)
{
free(ScorePlayerNumber1);
ScorePlayerNumber1 = nullptr;
}
if (ScoreBallcount)
{
free(ScoreBallcount);
ScoreBallcount = nullptr;
}
for (auto i = LightGroup; ; i = static_cast<TLightGroup*>(ListP1->Get(0)))
{
//if (i)
//(*(void(__thiscall**)(TLightGroup*, int))(*(_DWORD*)i + 16))(i, 1);
if (!ListP1->Count())
break;
}
delete ListP2;
delete ListP1;
}
TPinballComponent* TPinballTable::find_component(LPCSTR componentName)
{
int objCount = ListP1->Count();
if (objCount > 0)
{
for (int index = 0; index < objCount; ++index)
{
TPinballComponent* obj = static_cast<TPinballComponent*>(ListP1->Get(index));
const CHAR* groupName = obj->GroupName;
if (groupName && !lstrcmpA(groupName, componentName))
{
return obj;
}
}
}
MessageBoxA(nullptr, "Table cant find:", componentName, 0x2000u);
return nullptr;
}
TPinballComponent* TPinballTable::find_component(int groupIndex)
{
char Buffer[33];
int objCount = ListP1->Count();
if (objCount > 0)
{
for (int index = 0; index < objCount; ++index)
{
TPinballComponent* obj = static_cast<TPinballComponent*>(ListP1->Get(index));
if (obj->GroupIndex == groupIndex)
return obj;
}
}
_itoa_s(groupIndex, Buffer, 10);
MessageBoxA(nullptr, "Table cant find (lh):", Buffer, 0x2000u);
return nullptr;
}

View File

@ -11,6 +11,9 @@ class TPinballTable:TPinballComponent
{
public:
TPinballTable();
~TPinballTable();
TPinballComponent* find_component(LPCSTR componentName);
TPinballComponent* find_component(int groupIndex);
TFlipper* FlipperL;
TFlipper* FlipperR;

View File

@ -4,3 +4,19 @@
int pinball::quickFlag = 0;
int pinball::render_background_bitmap = 0;
TTextBox* pinball::InfoTextBox;
TTextBox* pinball::MissTextBox;
char pinball::getRcBuffer[6 * 256];
int pinball::rc_string_slot = 0;
HINSTANCE pinball::hinst;
char* pinball::get_rc_string(int uID, int a2)
{
char* result = &getRcBuffer[256 * rc_string_slot];
if (!LoadStringA(hinst, uID, &getRcBuffer[256 * rc_string_slot], 255))
*result = 0;
if (++rc_string_slot >= 6)
rc_string_slot = 0;
return result;
}

View File

@ -1,9 +1,17 @@
#pragma once
#include "TTextBox.h"
class pinball
{
public:
static int quickFlag;
static int render_background_bitmap;
static TTextBox* InfoTextBox;
static TTextBox* MissTextBox;
static HINSTANCE hinst;
static char* get_rc_string(int uID, int a2);
private:
static char getRcBuffer[256*6];
static int rc_string_slot;
};

View File

@ -1,12 +1,203 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by SpaceCadetPinball.rc
//
#define IDS_STRING101 0
#define IDS_STRING102 1
#define IDS_STRING103 2
#define IDS_STRING104 3
#define IDS_STRING105 4
#define IDS_STRING106 5
#define IDS_STRING107 6
#define IDS_STRING108 7
#define IDS_STRING109 8
#define IDS_STRING110 9
#define IDS_STRING111 10
#define IDS_STRING112 11
#define IDS_STRING113 12
#define IDS_STRING114 13
#define IDS_STRING115 14
#define IDS_STRING116 15
#define IDS_STRING117 16
#define IDS_STRING118 17
#define IDS_STRING119 18
#define IDS_STRING120 19
#define IDS_STRING121 20
#define IDS_STRING122 21
#define IDS_STRING123 22
#define IDS_STRING124 23
#define IDS_STRING125 24
#define IDS_STRING126 25
#define IDS_STRING127 26
#define IDS_STRING128 27
#define IDS_STRING129 28
#define IDS_STRING130 29
#define IDS_STRING131 30
#define IDS_STRING132 31
#define IDS_STRING133 32
#define IDS_STRING134 33
#define IDS_STRING135 34
#define IDS_STRING136 35
#define IDS_STRING137 36
#define IDS_STRING138 37
#define IDS_STRING139 38
#define IDS_STRING140 39
#define IDS_STRING141 40
#define IDS_STRING142 41
#define IDS_STRING143 42
#define IDS_STRING144 43
#define IDS_STRING145 44
#define IDS_STRING146 45
#define IDS_STRING147 46
#define IDS_STRING148 47
#define IDS_STRING149 48
#define IDS_STRING150 49
#define IDS_STRING151 50
#define IDS_STRING152 51
#define IDS_STRING153 52
#define IDS_STRING154 53
#define IDS_STRING155 54
#define IDS_STRING156 55
#define IDS_STRING157 56
#define IDS_STRING158 57
#define IDS_STRING159 58
#define IDS_STRING160 59
#define IDS_STRING161 60
#define IDS_STRING162 61
#define IDS_STRING163 62
#define IDS_STRING164 63
#define IDS_STRING165 64
#define IDS_STRING166 65
#define IDS_STRING167 66
#define IDS_STRING168 67
#define IDS_STRING169 68
#define IDS_STRING170 69
#define IDS_STRING171 70
#define IDS_STRING172 71
#define IDS_STRING173 72
#define IDS_STRING174 73
#define IDS_STRING175 74
#define IDS_STRING176 75
#define IDS_STRING177 76
#define IDS_STRING178 77
#define IDS_STRING179 78
#define IDS_STRING180 79
#define IDS_STRING181 80
#define IDS_STRING182 81
#define IDS_STRING183 82
#define IDS_STRING184 83
#define IDS_STRING185 84
#define IDS_STRING186 85
#define IDS_STRING187 86
#define IDS_STRING188 87
#define IDS_STRING189 88
#define IDS_STRING190 89
#define IDS_STRING191 90
#define IDS_STRING192 91
#define IDS_STRING193 92
#define IDS_STRING194 93
#define IDS_STRING195 94
#define IDS_STRING196 95
#define IDS_STRING197 96
#define IDS_STRING198 97
#define IDS_STRING199 98
#define IDS_STRING200 99
#define IDS_STRING201 100
#define IDS_STRING202 101
#define IDS_STRING203 102
#define IDS_STRING204 103
#define IDS_STRING205 104
#define IDS_STRING206 105
#define IDS_STRING207 106
#define IDS_STRING208 107
#define IDS_STRING209 108
#define IDS_STRING210 109
#define IDS_STRING211 110
#define IDS_STRING212 111
#define IDS_STRING213 112
#define IDS_STRING214 113
#define IDS_STRING215 114
#define IDS_STRING216 115
#define IDS_STRING217 116
#define IDS_STRING218 117
#define IDS_STRING219 118
#define IDS_STRING220 119
#define IDS_STRING221 120
#define IDS_STRING222 121
#define IDS_STRING223 122
#define IDS_STRING224 123
#define IDS_STRING225 124
#define IDS_STRING226 125
#define IDS_STRING227 126
#define IDS_STRING228 127
#define IDS_STRING229 128
#define IDS_STRING230 129
#define IDS_STRING231 130
#define IDS_STRING232 131
#define IDS_STRING233 132
#define IDS_STRING234 133
#define IDS_STRING235 134
#define IDS_STRING236 135
#define IDS_STRING237 136
#define IDS_STRING238 137
#define IDS_STRING239 138
#define IDS_STRING240 139
#define IDS_STRING241 140
#define IDS_STRING242 141
#define IDS_STRING243 142
#define IDS_STRING244 143
#define IDS_STRING245 144
#define IDS_STRING246 145
#define IDS_STRING247 146
#define IDS_STRING248 147
#define IDS_STRING249 148
#define IDS_STRING250 149
#define IDS_STRING251 150
#define IDS_STRING252 151
#define IDS_STRING253 152
#define IDS_STRING254 153
#define IDS_STRING255 154
#define IDS_STRING256 155
#define IDS_STRING257 156
#define IDS_STRING258 158
#define IDS_STRING259 159
#define IDS_STRING260 160
#define IDS_STRING261 161
#define IDS_STRING262 162
#define IDS_STRING263 163
#define IDS_STRING264 164
#define IDS_STRING265 165
#define IDS_STRING266 166
#define IDS_STRING267 167
#define IDS_STRING268 168
#define IDS_STRING269 169
#define IDS_STRING270 170
#define IDS_STRING271 171
#define IDS_STRING272 172
#define IDS_STRING273 173
#define IDS_STRING274 174
#define IDS_STRING275 175
#define IDS_STRING276 176
#define IDS_STRING277 177
#define IDS_STRING278 178
#define IDS_STRING279 179
#define IDS_STRING280 180
#define IDS_STRING281 181
#define IDS_STRING282 182
#define IDS_STRING283 183
#define IDS_STRING284 184
#define IDS_STRING285 185
#define IDS_STRING286 186
#define IDS_STRING287 187
#define IDS_STRING288 188
#define IDS_STRING289 189
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101