📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ShockwaveFlashObjects_OCX"
#pragma resource "*.dfm"
Tfmain *fmain;
//---------------------------------------------------------------------------
__fastcall Tfmain::Tfmain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall Tfmain::SetBitMapW(HWND hForm,TImage *Pic)
{
TColor w2;
HRGN rgn;
Graphics::TBitmap *w1=new Graphics::TBitmap();
w1->Assign(Pic->Picture->Bitmap );
w2=w1->Canvas->Pixels[0][0];
rgn=CreateRegion(w1,w2,hForm);//main->Handle );
if (rgn!=0)
{
SetWindowRgn(hForm, rgn, true);
}
w1->Free();
}
HRGN Tfmain::CreateRegion(Graphics::TBitmap *wMask,TColor wColor,HWND hControl)
{ //建立显示区域
HDC dc,dc_c;
HRGN rgn;
int x=0,y=0 ;
TPoint coord,old;
bool line=true;
TColor color;
dc = GetWindowDC(hControl);
dc_c= CreateCompatibleDC(dc);
SelectObject(dc_c, wMask->Handle);
BeginPath(dc);
for (x=0 ;x<=wMask->Width-1;x++)
{
line = false;
for (y=0 ;y<=wMask->Height-1;y++)
{
color = GetPixel(dc_c, x, y);
if (color!= wColor)
{
if (!line)
{
line = true;
coord.x = x;
coord.y = y;
}
}
if ((color == wColor)||(y==wMask->Height-1))
{
if (line)
{
line = false;
MoveToEx(dc, coord.x, coord.y,&old);
LineTo(dc, coord.x, y);
LineTo(dc, coord.x + 1, y);
LineTo(dc, coord.x + 1, coord.y);
old.x=coord.x;
old.y=coord.y;
CloseFigure(dc);
}
}
}
}
EndPath(dc);
rgn = PathToRegion(dc);
ReleaseDC(hControl, dc);
return (rgn);
}
void __fastcall Tfmain::FormCreate(TObject *Sender)
{
SetBitMapW(Handle,iBack); //不规则形状
BuildMenu(); //装载动态菜单
LoadDSet(); //装载默认设置。没有实现,参看上面的函数
}
//---------------------------------------------------------------------------
void __fastcall Tfmain::WMNCHitTest(TMessage &Msg)
{ //点击消息处理
TPoint mouse;
mouse.x=LOWORD(Msg.LParam);
mouse.y=HIWORD(Msg.LParam);
mouse=ScreenToClient(mouse); //判断触发位置
if ((mouse.y<36)&&(GetAsyncKeyState(VK_LBUTTON)<0))
{
Msg.Result = HTCAPTION; // report caption area hit
}
else
{
Msg.Result = HTCLIENT; //点击客户区
}
}
void __fastcall Tfmain::NoSkinClick(TObject *Sender)
{ //动态菜单实现
if (((TMenuItem *)(Sender))->Caption=="No Skin")
{
Beep(); //没有菜单
}
else
{
//载入配置文件,,摘自live flash player 所以略显复杂,,,,不知道什么原因必须使用"\0x5c"
TIniFile *IniFile=new TIniFile(ExtractFilePath(Application->ExeName)+"\\Demo.ini");
TStringList *SkinName =new TStringList();
TStringList *SkinSet =new TStringList();
IniFile->ReadSectionValues("SkinName",SkinName);
IniFile->ReadSectionValues(((TMenuItem *)(Sender))->Caption,SkinSet);
ShowMessage(ExtractFilePath(Application->ExeName)+"\0x5c"+SkinName->Values[((TMenuItem *)(Sender))->Caption]);
Test1->Movie=ExtractFilePath(Application->ExeName)+"\0x5c"+SkinName->Values[((TMenuItem *)(Sender))->Caption];
((TMenuItem *)(Sender))->Checked=true; //选定菜单
delete IniFile;
}
}
//---------------------------------------------------------------------------
void __fastcall Tfmain::BuildMenu()
{ //建立菜单
TIniFile *IniFile=new TIniFile(ExtractFilePath(Application->ExeName)+"\0x5c"+"Demo.ini");
TStringList *DefSet =new TStringList();
TStringList *SkinName =new TStringList();
IniFile->ReadSectionValues("DefSet",DefSet); //读取默认设置
IniFile->ReadSectionValues("SkinName",SkinName);
for (int i=0;i<StrToInt(DefSet->Values["SkinNum"]);i++ )
{ //装配
TMenuItem *NewItem= new TMenuItem(NewItem);
fmain->Pop->Items->Insert(i+1,NewItem);
NewItem->Caption=SkinName->Names[i];
NewItem->RadioItem=True;
NewItem->OnClick=fmain->NoSkinClick;//关联函数
NewItem->Tag=i+1; //设置标志
}
delete IniFile;
}
//------------------------
void __fastcall Tfmain::LoadDSet()
{
//没有实现,参看装入菜单函数
}
//------------------------
void __fastcall Tfmain::Test1FSCommand(TObject *Sender, BSTR command,
BSTR args)
{ //Flash皮肤响应处理,,这里写得比较业余:-)
unsigned int CommandV=0;
CommandV=command[0];
switch (CommandV-48)
{
case 1: //open
Edit1->Text="Open";
break;
case 2: //play
Edit1->Text="Play";
break;
case 3: //pause
Edit1->Text="Pause";
break;
case 4: //stop
Edit1->Text="Stop";
default: ;
}
}
//---------------------------------------------------------------------------
void __fastcall Tfmain::Button1Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -