⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 这是一个利用FLASH制作WINDOWSXP式样的皮肤源程序Flash_Skin .rar
💻 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 + -