📄 general.cpp
字号:
win->AddControl(txt);
txt->Refresh();
txt=new C_Text;
txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
txt->SetFlagBitOn(C_BIT_WORDWRAP);
txt->SetFixedWidth(_tcsclen(evt->eventText));
txt->SetText(evt->eventText);
txt->SetFont(win->Font_);
txt->SetXY(40,y);
txt->SetW(wrap_w);
txt->SetFGColor(0xe0e0e0);
txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
win->AddControl(txt);
y += txt->GetH()+2;
}
delete evt->eventText;
delete evt;
i++;
evt=RetrieveEvent(i);
}
win->ScanClientAreas();
win->RefreshClient(0);
}
}
void RelocateSquadron()
{
C_Window *win;
C_Bitmap *bmp;
C_Text *txt;
C_Resmgr *res;
IMAGE_RSC *rsc;
Objective Obj;
Squadron sqd;
_TCHAR buffer[80];
GridIndex x,y;
ObjClassDataType *ObjPtr;
if(!gMainHandler)
return;
sqd=(Squadron)FalconLocalSession->GetPlayerSquadron();
if(!sqd)
return;
Obj=(Objective)vuDatabase->Find(sqd->GetUnitAirbaseID());
if(!Obj)
return;
ObjPtr=Obj->GetObjectiveClassData();
if(!ObjPtr)
return;
win=gMainHandler->FindWindow(TRANSFER_WIN);
if(win)
{
res=gImageMgr->GetImageRes(BLUE_TEAM_ICONS_W);
txt=(C_Text*)win->FindControl(MY_SQUADRON);
if(txt)
{
sqd=(Squadron)FalconLocalSession->GetPlayerSquadron();
if(sqd)
{
sqd->GetName(buffer,38,FALSE);
txt->Refresh();
txt->SetText(buffer);
txt->Refresh();
}
}
txt=(C_Text*)win->FindControl(NEW_BASE);
if(txt)
{
Obj->GetName(buffer,38,TRUE);
txt->Refresh();
txt->SetText(buffer);
txt->Refresh();
}
bmp=(C_Bitmap *)win->FindControl(CS_MAP_WIN);
if(bmp)
{
bmp->SetImage(gOccupationMap);
bmp->Refresh();
}
bmp=(C_Bitmap *)win->FindControl(BASE_ICON);
if(bmp)
{
bmp->Refresh();
Obj->GetLocation(&x,&y); // campaign coords
y=static_cast<short>(TheCampaign.TheaterSizeY - y);
if(res)
{
bmp->SetXY(x/MAP_RATIO,y/MAP_RATIO);
bmp->SetFlagBitOn(C_BIT_HCENTER|C_BIT_VCENTER);
rsc=(IMAGE_RSC*)res->Find(ObjPtr->IconIndex);
if(rsc)
bmp->SetImage(rsc);
bmp->Refresh();
}
}
gMainHandler->EnableWindowGroup(win->GetGroup());
}
}
// Screen shot HACK stuff
void CloseItCB(long,short hit,C_Base *ctrl)
{
if(hit != C_TYPE_LMOUSEUP)
return;
gMainHandler->HideWindow(ctrl->Parent_);
}
#pragma pack(1)
typedef struct
{
long First,Second,Third;
WORD Width;
WORD Height;
WORD Last;
} BOGUS_HEADER;
#pragma pack()
BOGUS_HEADER TgaHeader=
{
0x00020000,
0x00000000,
0x00000000,
800,600, // w,h
0x0110,
};
extern WORD *gScreenShotBuffer;
void SaveTargaCB(long,short hittype,C_Base *control)
{
_TCHAR filename[MAX_PATH];
C_EditBox *ebox;
FILE *fp;
long y,i;
if(hittype != C_TYPE_LMOUSEUP)
return;
gMainHandler->HideWindow(control->Parent_);
ebox=(C_EditBox*)control->Parent_->FindControl(FILE_NAME);
if(ebox)
{
// convert Mem to 555 format
for(i=0;i<800*600;i++)
gScreenShotBuffer[i]=UI95_ScreenToTga(gScreenShotBuffer[i]);
// Write file
_stprintf(filename,"%s.tga",ebox->GetText());
fp=fopen(filename,"wb");
if(fp)
{
fwrite(&TgaHeader,sizeof(TgaHeader),1,fp);
for(y=0;y<600;y++)
fwrite(&gScreenShotBuffer[(599-y)*800],800*sizeof(WORD),1,fp);
fclose(fp);
}
}
}
void SaveScreenShot()
{
SetDeleteCallback(DelTGAFileCB);
SaveAFile(gStringMgr->AddText("Save Screenshot"),"*.tga",NULL,SaveTargaCB,CloseItCB);
}
char MasterXOR[]="Falcon is your Master";
void EncryptBuffer(uchar startkey,uchar *buffer,long length)
{
long i,xrlen,idx;
uchar *ptr;
uchar nextkey;
if(!buffer || length <= 0)
return;
idx=0;
xrlen=strlen(MasterXOR);
ptr=buffer;
for(i=0;i<length;i++)
{
*ptr ^= MasterXOR[(idx++)%xrlen];
*ptr ^= startkey;
nextkey=*ptr++;
startkey=nextkey;
}
}
void DecryptBuffer(uchar startkey,uchar *buffer,long length)
{
long i,xrlen,idx;
uchar *ptr;
uchar nextkey;
if(!buffer || length <= 0)
return;
idx=0;
xrlen=strlen(MasterXOR);
ptr=buffer;
for(i=0;i<length;i++)
{
nextkey=*ptr;
*ptr ^= startkey;
*ptr++ ^= MasterXOR[(idx++)%xrlen];
startkey=nextkey;
}
}
void ScrollTimerCB(long,short,C_Base *base)
{
C_Window *win;
if(!base)
return;
win=base->Parent_;
if(win)
{
if(win->VY_[base->GetClient()] > base->GetUserNumber(0))
{
win->VY_[base->GetClient()]-=2;
win->RefreshClient(base->GetClient());
}
}
}
void LoadPeopleInfo(long client)
{
C_Window *win=NULL;
char *filedata=NULL;
long size=0;
TitleStr *tit=NULL;
PersonStr *per=NULL;
LegalStr *leg=NULL;
short type=0;
long offset=0;
long center=0,y=0;
long LanguageID=0;
C_Text *txt=NULL;
C_TimerHook *drawTimer=NULL;
C_Resmgr *res=NULL;
FLAT_RSC *rsc=NULL;
res=new C_Resmgr;
if(!res)
return;
res->Setup(CREDITS_RES,"art\\resource\\credits",gMainParser->GetTokenHash());
res->LoadData();
switch(gLangIDNum)
{
case F4LANG_GERMAN:
LanguageID=GERMAN_CREDITS;
break;
case F4LANG_FRENCH:
LanguageID=FRENCH_CREDITS;
break;
case F4LANG_SPANISH:
LanguageID=SPANISH_CREDITS;
break;
case F4LANG_ITALIAN:
LanguageID=ITALIAN_CREDITS;
break;
case F4LANG_PORTUGESE:
LanguageID=PORTUGUESE_CREDITS;
break;
case F4LANG_ENGLISH:
case F4LANG_UK:
default:
LanguageID=ENGLISH_CREDITS;
break;
}
rsc=(FLAT_RSC*)res->Find(LanguageID);
if(!rsc)
return;
filedata=(char*)rsc->GetData();
size=rsc->Header->size;
win=gMainHandler->FindWindow(EXIT_WIN);
if(win)
{
center=((win->ClientArea_[client].right - win->ClientArea_[client].left)/2);
y=win->GetH()/2;
offset=0;
while(offset < size)
{
type=*((short*)&filedata[offset]);
offset+=sizeof(short);
switch(type)
{
case _TITLE_:
tit=(TitleStr*)&filedata[offset];
DecryptBuffer(0x79,(uchar*)&filedata[offset],sizeof(TitleStr));
offset+=sizeof(TitleStr);
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
txt->SetFont(tit->FontID);
txt->SetFGColor(tit->ColorID);
txt->SetFlagBitOn(C_BIT_HCENTER);
txt->SetClient(static_cast<short>(client));
txt->SetXY(center,y);
txt->SetText(gStringMgr->GetText(gStringMgr->AddText(tit->Title)));
win->AddControl(txt);
y+=gFontList->GetHeight(tit->FontID)+10;
break;
case _NAME_:
per=(PersonStr*)&filedata[offset];
DecryptBuffer(0x79,(uchar*)&filedata[offset],sizeof(PersonStr));
offset+=sizeof(PersonStr);
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
txt->SetFont(per->FontID);
txt->SetFGColor(per->ColorID);
#if 0
if(per->Job[0])
{
txt->SetFlagBitOn(C_BIT_RIGHT);
txt->SetXY(center-10,y);
}
else
{
#endif
txt->SetFlagBitOn(C_BIT_HCENTER);
txt->SetXY(center,y);
#if 0
}
#endif
txt->SetClient(static_cast<short>(client));
txt->SetText(gStringMgr->GetText(gStringMgr->AddText(per->Name)));
win->AddControl(txt);
#if 0
if(per->Job[0])
{
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
txt->SetFont(per->FontID);
txt->SetFGColor(per->ColorID);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(client);
txt->SetXY(center+10,y);
txt->SetText(gStringMgr->GetText(gStringMgr->AddText(per->Job)));
win->AddControl(txt);
}
#endif
y+=gFontList->GetHeight(per->FontID);
break;
case _LEGAL_:
leg=(LegalStr*)&filedata[offset];
DecryptBuffer(0x79,(uchar*)&filedata[offset],sizeof(LegalStr));
offset+=sizeof(LegalStr);
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
txt->SetFont(leg->FontID);
txt->SetFGColor(leg->ColorID);
txt->SetFlagBitOn(C_BIT_LEFT);
txt->SetClient(static_cast<short>(client));
txt->SetXY(0,y);
txt->SetText(gStringMgr->GetText(gStringMgr->AddText(leg->Legal)));
win->AddControl(txt);
y+=gFontList->GetHeight(leg->FontID);
break;
case _BLANK_:
y+=40;
break;
}
}
y+=win->GetH()/2;
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
if(leg)
{
txt->SetFont(leg->FontID);
txt->SetFGColor(leg->ColorID);
}
txt->SetFlagBitOn(C_BIT_HCENTER);
txt->SetClient(static_cast<short>(client));
txt->SetXY(center,y);
txt->SetText(gStringMgr->GetText(gStringMgr->AddText("Fini")));
win->AddControl(txt);
win->ScanClientAreas();
y+=win->GetH()/2;
txt=new C_Text;
txt->Setup(C_DONT_CARE,0);
if(leg)
{
txt->SetFont(leg->FontID);
txt->SetFGColor(leg->ColorID);
}
txt->SetFlagBitOn(C_BIT_HCENTER);
txt->SetClient(static_cast<short>(client));
txt->SetXY(center,y);
txt->SetText(gStringMgr->GetText(gStringMgr->AddText("")));
win->AddControl(txt);
win->ScanClientAreas();
drawTimer = new C_TimerHook;
drawTimer->Setup( C_DONT_CARE,C_TYPE_NORMAL );
drawTimer->SetClient(static_cast<short>(client));
drawTimer->SetUpdateCallback(ScrollTimerCB);
drawTimer->SetReady(1);
drawTimer->SetUserNumber(0,(win->GetH()-5)-y);
win->AddControl( drawTimer );
}
res->Cleanup();
delete res;
}
// Delete file functions...
BOOL CheckSystemFiles(char *Name,char *Ext)
{
char filename[MAX_PATH];
short i;
strcpy(filename,Name);
strcat(filename,".");
strcat(filename,Ext);
i=0;
while(DontDeleteList[i])
{
if(!stricmp(DontDeleteList[i],filename))
return(TRUE);
i++;
}
return(FALSE);
}
BOOL DeleteAFile(char *Path,char *Name,char *Ext)
{
char Filename[MAX_PATH];
if(!Name)
return(FALSE);
Filename[0]=0;
if(Path)
{
strcpy(Filename,Path);
strcat(Filename,"\\");
}
strcat(Filename,Name);
if(Ext)
{
strcat(Filename,".");
strcat(Filename,Ext);
}
if(!CheckSystemFiles(Name,Ext))
{
DeleteFile(Filename);
return(TRUE);
}
return(FALSE);
}
void DelSTRFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"str"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelDFSFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"dfs"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelLSTFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile(NULL,btn->GetText(0),"lst"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelCamFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"cam"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelTacFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"tac"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelTGAFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile(NULL,btn->GetText(0),"tga"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelVHSFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile("acmibin",btn->GetText(0),"vhs"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
void DelKeyFileCB(long,short,C_Base *)
{
C_TreeList *tree;
C_Button *btn;
TREELIST *item;
tree = (C_TreeList*)gPopupMgr->GetCallingControl();
if(tree)
{
item=tree->GetLastItem();
if(item)
{
btn=(C_Button*)item->Item_;
if(btn)
{
if(DeleteAFile("config",btn->GetText(0),"key"))
{
tree->DeleteItem(item);
tree->RecalcSize();
tree->Parent_->RefreshClient(tree->GetClient());
}
}
}
}
gPopupMgr->CloseMenu ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -