windoweventobjectdialog.cpp
来自「骨骼动画....把魔兽模型解出的代码..」· C++ 代码 · 共 871 行 · 第 1/2 页
CPP
871 行
}
}
break;
}
}
return TRUE;
}
switch(LOWORD(W))
{
case TrackFileCreateNew:
case TrackFileCreateNew2:
{
INT Time;
Time = static_cast<INT>(DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(DialogTrack), Window, TrackDialogMessageHandler, 0));
if(Time < 0) return TRUE;
SortedInsert(GetDlgItem(Window, DialogEventObjectList), Time);
return TRUE;
}
case TrackFileRemove:
case TrackFileRemove2:
{
INT Index;
HWND ListBox;
ListBox = GetDlgItem(Window, DialogEventObjectList);
Index = static_cast<INT>(::SendMessage(ListBox, LB_GETCURSEL, 0, 0));
if(Index == LB_ERR) return TRUE;
::SendMessage(ListBox, LB_DELETESTRING, Index, 0);
return TRUE;
}
case DialogEventObjectButtonOk:
{
INT i;
INT Size;
INT Index;
HWND ListBox;
Index = static_cast<INT>(::SendMessage(GetDlgItem(Window, DialogEventObjectCombo1), CB_GETCURSEL, 0, 0));
switch(::SendMessage(GetDlgItem(Window, DialogEventObjectCombo1), CB_GETITEMDATA, Index, 0))
{
case 0:
{
StaticNameType = "FPT";
break;
}
case 1:
{
StaticNameType = "SPL";
break;
}
case 2:
{
StaticNameType = "UBR";
break;
}
case 3:
{
StaticNameType = "SND";
break;
}
case 4:
{
StaticNameType = "SPN";
break;
}
default:
{
Error.SetMessage("The event type is invalid!");
Error.DisplayMessage(Window);
Error.ClearMessage();
return TRUE;
}
}
StaticNameIdentifier = GetString(GetDlgItem(Window, DialogEventObjectEditIdentifier));
if(StaticNameIdentifier.size() != 1)
{
Error.SetMessage("The identifier has to be exactly one character!");
Error.DisplayMessage(Window);
Error.ClearMessage();
SetFocus(GetDlgItem(Window, DialogEventObjectEditIdentifier));
::SendMessage(GetDlgItem(Window, DialogEventObjectEditIdentifier), EM_SETSEL, 0, -1);
return TRUE;
}
StaticNameData = GetString(GetDlgItem(Window, DialogEventObjectEditData));
if(StaticNameData.size() != 4)
{
Error.SetMessage("The data has to be exactly four characters!");
Error.DisplayMessage(Window);
Error.ClearMessage();
SetFocus(GetDlgItem(Window, DialogEventObjectEditData));
::SendMessage(GetDlgItem(Window, DialogEventObjectEditData), EM_SETSEL, 0, -1);
return TRUE;
}
StaticData.Name = StaticNameType + StaticNameIdentifier + StaticNameData;
ListBox = GetDlgItem(Window, DialogEventObjectList);
Size = static_cast<INT>(::SendMessage(ListBox, LB_GETCOUNT, 0, 0));
StaticData.EventTrack.clear();
for(i = 0; i < Size; i++)
{
StaticData.EventTrack.push_back(static_cast<INT>(::SendMessage(ListBox, LB_GETITEMDATA, i, 0)));
}
StaticGlobalSequence = reinterpret_cast<MODEL_GLOBAL_SEQUENCE*>(::SendMessage(GetDlgItem(Window, DialogEventObjectComboGlobalSequenceId), CB_GETITEMDATA, ::SendMessage(GetDlgItem(Window, DialogEventObjectComboGlobalSequenceId), CB_GETCURSEL, 0, 0), 0));
RemoveWindow(Window);
EndDialog(Window, 1);
return TRUE;
}
case DialogEventObjectButtonCancel:
{
RemoveWindow(Window);
EndDialog(Window, 0);
return TRUE;
}
}
return FALSE;
}
case WM_CLOSE:
{
::SendMessage(Window, WM_COMMAND, DialogEventObjectButtonCancel, 0);
return TRUE;
}
}
return FALSE;
}
//+-----------------------------------------------------------------------------
//| Handles the track dialog messages
//+-----------------------------------------------------------------------------
BOOL CALLBACK WINDOW_EVENT_OBJECT_DIALOG::TrackDialogMessageHandler(HWND Window, UINT Message, WPARAM W, LPARAM L)
{
switch(Message)
{
case WM_INITDIALOG:
{
AddWindow(Window);
CenterWindow(Window);
SetDlgItemInt(Window, DialogTrackEditTime, 0, FALSE);
return TRUE;
}
case WM_COMMAND:
{
switch(LOWORD(W))
{
case DialogTrackButtonOk:
{
INT Time;
Time = GetDlgItemInt(Window, DialogTrackEditTime, NULL, FALSE);
RemoveWindow(Window);
EndDialog(Window, Time);
return TRUE;
}
case DialogTrackButtonCancel:
{
RemoveWindow(Window);
EndDialog(Window, -1);
return TRUE;
}
}
return FALSE;
}
case WM_CLOSE:
{
::SendMessage(Window, WM_COMMAND, DialogTrackButtonCancel, 0);
return TRUE;
}
}
return FALSE;
}
//+-----------------------------------------------------------------------------
//| Inserts the data into a sorted position in the list
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::SortedInsert(HWND ListBox, INT Data)
{
INT i;
INT Size;
INT Index;
std::stringstream Stream;
Size = static_cast<INT>(::SendMessage(ListBox, LB_GETCOUNT, 0, 0));
Index = -1;
for(i = 0; i < Size; i++)
{
if(::SendMessage(ListBox, LB_GETITEMDATA, i, 0) > Data)
{
Index = i;
break;
}
}
Stream << Data;
Index = static_cast<INT>(::SendMessage(ListBox, LB_INSERTSTRING, Index, reinterpret_cast<LPARAM>(Stream.str().c_str())));
::SendMessage(ListBox, LB_SETITEMDATA, Index, Data);
}
//+-----------------------------------------------------------------------------
//| Builds the global sequence ID list
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::BuildGlobalSequenceIdList(HWND Window)
{
INT i;
INT Index;
HWND ComboBox;
ComboBox = GetDlgItem(Window, DialogEventObjectComboGlobalSequenceId);
if(ComboBox == NULL) return;
Index = static_cast<INT>(::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(NAME_NO_ID.c_str())));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, 0);
::SendMessage(ComboBox, CB_SETCURSEL, 0, 0);
for(i = 0; i < Model.Data().GlobalSequenceContainer.GetTotalSize(); i++)
{
if(Model.Data().GlobalSequenceContainer.ValidIndex(i))
{
std::stringstream Stream;
Stream << "GlobalSequence " << Model.Data().GlobalSequenceContainer[i];
Index = static_cast<INT>(::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(Stream.str().c_str())));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, reinterpret_cast<LPARAM>(Model.Data().GlobalSequenceContainer[i]));
if(Model.Data().GlobalSequenceContainer[i] == StaticGlobalSequence)
{
::SendMessage(ComboBox, CB_SETCURSEL, Index, 0);
}
}
}
}
//+-----------------------------------------------------------------------------
//| Builds the splat list
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::BuildSplatList(HWND Window)
{
HWND ComboBox;
std::map<std::string, std::string>::iterator i;
ComboBox = GetDlgItem(Window, DialogEventObjectCombo2);
if(ComboBox == NULL) return;
::SendMessage(ComboBox, CB_RESETCONTENT, 0, 0);
i = SplatMap.begin();
while(i != SplatMap.end())
{
::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(i->first.c_str()));
i++;
}
::SendMessage(Window, CB_SETCURSEL, 0, 0);
}
//+-----------------------------------------------------------------------------
//| Builds the uber splat list
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::BuildUberSplatList(HWND Window)
{
HWND ComboBox;
std::map<std::string, std::string>::iterator i;
ComboBox = GetDlgItem(Window, DialogEventObjectCombo2);
if(ComboBox == NULL) return;
::SendMessage(ComboBox, CB_RESETCONTENT, 0, 0);
i = UberSplatMap.begin();
while(i != UberSplatMap.end())
{
::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(i->first.c_str()));
i++;
}
::SendMessage(Window, CB_SETCURSEL, 0, 0);
}
//+-----------------------------------------------------------------------------
//| Builds the sound list
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::BuildSoundList(HWND Window)
{
HWND ComboBox;
std::map<std::string, std::string>::iterator i;
ComboBox = GetDlgItem(Window, DialogEventObjectCombo2);
if(ComboBox == NULL) return;
::SendMessage(ComboBox, CB_RESETCONTENT, 0, 0);
i = SoundMap.begin();
while(i != SoundMap.end())
{
::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(i->first.c_str()));
i++;
}
::SendMessage(Window, CB_SETCURSEL, 0, 0);
}
//+-----------------------------------------------------------------------------
//| Builds the spawn object list
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::BuildSpawnObjectList(HWND Window)
{
HWND ComboBox;
std::map<std::string, std::string>::iterator i;
ComboBox = GetDlgItem(Window, DialogEventObjectCombo2);
if(ComboBox == NULL) return;
::SendMessage(ComboBox, CB_RESETCONTENT, 0, 0);
i = SpawnObjectMap.begin();
while(i != SpawnObjectMap.end())
{
::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(i->first.c_str()));
i++;
}
::SendMessage(Window, CB_SETCURSEL, 0, 0);
}
//+-----------------------------------------------------------------------------
//| Registers a splat
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::RegisterSplat(CONST std::string& Data, CONST std::string& Name)
{
SplatMap.insert(std::make_pair(Name, Data));
}
//+-----------------------------------------------------------------------------
//| Registers an uber splat
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::RegisterUberSplat(CONST std::string& Data, CONST std::string& Name)
{
UberSplatMap.insert(std::make_pair(Name, Data));
}
//+-----------------------------------------------------------------------------
//| Registers a sound
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::RegisterSound(CONST std::string& Data, CONST std::string& Name)
{
SoundMap.insert(std::make_pair(Name, Data));
}
//+-----------------------------------------------------------------------------
//| Registers a spawn object
//+-----------------------------------------------------------------------------
VOID WINDOW_EVENT_OBJECT_DIALOG::RegisterSpawnObject(CONST std::string& Data, CONST std::string& Name)
{
SpawnObjectMap.insert(std::make_pair(Name, Data));
}
//+-----------------------------------------------------------------------------
//| Returns the combobox index for a certain data
//+-----------------------------------------------------------------------------
INT WINDOW_EVENT_OBJECT_DIALOG::GetComboIndex(HWND Window, CONST std::string& Data, std::map<std::string, std::string>& Map)
{
INT Index;
HWND ComboBox;
std::map<std::string, std::string>::iterator i;
ComboBox = GetDlgItem(Window, DialogEventObjectCombo2);
i = Map.begin();
while(i != Map.end())
{
if(i->second == Data)
{
Index = static_cast<INT>(::SendMessage(ComboBox, CB_FINDSTRINGEXACT, -1, reinterpret_cast<LPARAM>(i->first.c_str())));
if(Index == LB_ERR) return 0;
return Index;
}
i++;
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?