//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "osx_InstallBox.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tosx_InstallBox_Form *osx_InstallBox_Form;
//---------------------------------------------------------------------------


#include "main.h"
#include "ide_main.h"
#include "ide_library.h"
#include "ide_msgbox.h"
#include "gui.h"
//[2009.04.20.월][추가!!!]
#include "editor_edit.h"
#include "ide_editor.h"
#include "tree_tree.h"
#include "msg_msg.h"
#include "ide_BalloonBox.h"

//[2009.05.27.수][추가!!!]
#include  "file.h"

//[2010.12.08.수][추가!!!]
#include  "file_ginf.h"

//[20120.12.09.목][추가!!!]
#include  "matdol.h"

//[2010.12.10.금][추가!!!]
#include  "vmos_info.h"


//[2010.12.14.화][생성!!!]{--------------------------------------------------------------
//<vmos_InstallBox> 를 가지고 [OSC 설치 대화상자] 를 새로 만든다.
//모든 처리 방식은 <vmos_InstallBox> 와 완전히 동일하고 단지 OSX 를 설치하는것만 다르다.
//}--------------------------------------------------------------------------------------


//[서브클래싱]------------------------------------------------------------------

void __fastcall Tosx_InstallBox_Form::WndProc(Messages::TMessage  &Message)
{
  //[설명!!!]{--------------------------------------------------------------------
  //TForm 의 경우는 바탕을 칠하고 OnPaint() 를 발생하게 되므로 실제 _Draw() 를
  //OnPaint() 에서 사용하는 경우는 크기가 변경되는 경우 바로 칠해지지 않아서
  //하얀색 바탕이 그대로 나오게 되어 보기 좋지 않게 된다.
  //따라서 TForm 자체의 바탕을 그리는 WM_ERASEBKGND 에서 바로 _Draw() 를 사용하여
  //그리고 OnPaint() 는 처리하지 않는다.
  //C++Builder 와 같이 완벽하게 처리되는 깜박임이 전혀 없는 화면을 만들수 있다.
  //
  //[2012.05.20.일][수정!!!]------------------------------------------------------
  //}-----------------------------------------------------------------------------

  if     (Message.Msg == WM_ERASEBKGND)
  {
    _Draw();

    //바로 죵료하지 않으면 WM_ERASEBKGND 메세지가 다음 TForm::WndProc(Message); 에서
    //다시 처리 되어 TForm->Color 로 칠해지게 되어 _Draw() 로 그린 것이 다 지워지므로
    //바로 종료한다.
    return;

  }
  else if(Message.Msg == WM_KEYDOWN)
  {
    //[2012.05.20.일][추가!!!]{----
    //<ESC 키> 처리를 위하여 추가.
    //}----------------------------

    switch(Message.WParam)
    {
      case VK_ESCAPE : //[키:ESC]
      {
        //[대화상자] 닫기.
        _EVENT_CloseButton_Click();

        Message.Result = true;
        return;

      } break;

    }

  }

  //[기본처리]
  //{
      //기본 메세지는 반드시 처리 되어야 한다.
      TForm::WndProc(Message);
      
  //}

  return;

}

//------------------------------------------------------------------------------

__fastcall Tosx_InstallBox_Form::Tosx_InstallBox_Form(TComponent* Owner)
        : TForm(Owner)
{
  //[VAR]
  //{
      AnsiString     bmp_path;
      int            width, height;

      TRect          colorBoxTRect;
      int            w, h;

      int            i;

      //[2009.10.03.토][추가!!!]
      int            color;

  //}

  //[환경변수]
  //{
      //[2007.10.02.화][추가!!!]
      IDE_Get_Option(&_ide_option);

  //}

  //[초기화]
  //{
      //크기는 표시되는 내용에 따라 자동으로 처리 되지만 일단 임의 값을 기록한다.
      this->Left     = 0;
      this->Top      = 0;
      this->Width    = 400;
      this->Height   = 290;
      this->Color    = clWhite;

      //실제 그림 영역을 생성한다.
      _bmp_ = new Graphics::TBitmap;

      //그림 영역 크기 설정.
      _bmp_->Width       = this->Width;
      _bmp_->Height      = this->Height;

      //24bit bitmap 으로 지정한다.
      _bmp_->PixelFormat = pf24bit;

  //}

  //[글꼴 설정]
  //{
      //[기본 끌꼴 등록]{------------------------------------------------
      //모든 프로그램에서 기본적으로 사용하는 [system 글꼴] 을 등록한다.
      FONTPACK_SetDefault(&_font);
      //}----------------------------------------------------------------

      //[editor debug margin]
      //{
          _font.margin_size = 0;

      //}

      //문자 margin 을 설정한다.
      _font.offset_left   = 0;
      _font.offset_right  = 0;
      _font.offset_top    = 0;
      _font.offset_bottom = 0;

      //[2010.01.26.화][추가!!!]{---
      _font.en_offset_left  = 0;
      _font.en_offset_right = 0;
      //}---------------------------

  //}

  //[속성초기화]
  //{
      //기본적으로 선택되지 않은 상태.
      _caption_selected = false;

  //}

  //[caption 설정]
  //{
      //caption 문자열.(크게 바뀔일이 없다.)
      STR_Assign(_caption, " 맷돌 변환 운영체제(OSX) 설치 ");

      //높이 지정.
      _caption_height = 22;

      //caption 문자열의 width 를 구한다.
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, _caption, &width, &height);

      //실제 사용할 caption 폭을 설정한다.
      //_font.margin_size 는 처음 기본값인 0 을 사용한다.(한번만 그려주면 된다.)
      _caption_width = width + (_font.margin_size * 2) + 2;

  //}

  //[컨트롤 생성]
  //{
      //[닫기 버튼]
      //{
          _close_bmpbtns          = new Tgui_bmpbutton_Form(this);
          _close_bmpbtns->Parent  = this;
          _close_bmpbtns->Visible = true;

          //[초기화]
          //{
              //그림 할당하기.
              bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\control\\close.bmp";

              _close_bmpbtns->_Top(0);
              _close_bmpbtns->_Width(12);
              _close_bmpbtns->_Left(0);
              _close_bmpbtns->_Height(12);
              _close_bmpbtns->_Border(true);
              _close_bmpbtns->_Bitmap(bmp_path);
              _close_bmpbtns->_Image_Width(12);
              _close_bmpbtns->_Image_Height(12);

              //동작함수 등록.
              _close_bmpbtns->_EVENT_Click = _EVENT_CloseButton_Click;

          //}

      //}

  //}

  //[운영체제 목록 얻기]
  //{
      //[!]{---------------------------------------------------
      //[os\osx] 폴더안의 폴더 목록을 얻는다.
      //이는 이 목록을 바탕으로 해당 버튼을 생성하기 때문이다.
      //}------------------------------------------------------

      osxList = new TStringList;
      osxList->Clear();

      //[목록 구하기]
      //{
          //[!]{--------------------------------------------
          //전용 함수를 사용하여 안의 [폴더목록] 을 구한다.
          //한개의 폴더는 한개의 [운영체제] 에 해당한다.
          //}-----------------------------------------------

          Dir_Get_FileList_BoundDir(Ide_Osx_Root_Path,
                                    "*",
                                    //지정 폴더안만 대상으로 한다.
                                    true,
                                    //안의 [폴더] 만 대상으로 하고 경로를 제외한 [이름] 만 얻는다.
                                    d_Directory | d_NameOnly,
                                    osxList);

      //}

  //}

  //[설정 컨트롤 생성]
  //{
      //[!]{-----------------------------------------
      //설정용 대화상자의 각각의 설정 내용을 만든다.
      //}--------------------------------------------

      //[배경색 설정]{-----------------------------------------------------------------------------
      //바탕색을 설정한다.
      BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_IdeOptionDialogPartBack, &_colorBack);
      //}------------------------------------------------------------------------------------------

      //[설명글]
      //{
          title_Label          = new Tgui_Label_Form(this);
          title_Label->Parent  = this;
          title_Label->Visible = true;

          title_Label->_Width(this->Width - 8 + 2);
          title_Label->_Height(20);
          title_Label->_Top(22);
          title_Label->_Left(4 - 1);
          title_Label->_Caption("");
          title_Label->_BackColor(_colorBack);

          //[2010.12.15.수][추가!!!]{----------------------------------------------------------------
          //내부 테두리를 뚜렷하게 보여주기 위한 것이다.
          //내부 테두리 위에 <title_Label> 이 있으므로 <title_Label> 의 테두리를 같이 설정해야 한다.
          //title_Label->_BorderColor(IDE_COLOR_outline);
          //}----------------------------------------------------------------------------------------

          title_Label->_Border(true);

          title_Label->_FontXY(3, 4);
          title_Label->_Caption("[맷돌직접연결] 인 경우만 설치할수 있습니다.");

      //}

      //[바탕]
      //{
          base_Label          = new Tgui_Label_Form(this);
          base_Label->Parent  = this;
          base_Label->Visible = true;

          base_Label->_Width(this->Width - 8);
          base_Label->_Height(this->Height - 26 - 20);
          base_Label->_Top(22 + 20);
          base_Label->_Left(4);
          base_Label->_Caption("");
          //base_Label->_BackColor(clRed);

          //설명글이 위에 오게 만든다.
          title_Label->BringToFront();

      //}

      //[수직 줄이동자]
      //{
          //전체 설정을 수직으로 줄이동할 [수직 줄이동자] 를 배치한다.

          scroll_V          = new Tgui_scroll_v_Form(this);
          scroll_V->Parent  = base_Label;
          scroll_V->Visible = true;

          scroll_V->_Left(base_Label->Width - 13 - 2);
          scroll_V->_Top(2);
          scroll_V->_Height(base_Label->Height - 4);

          scroll_V->_Min(0);
          scroll_V->_Max(0);
          scroll_V->_DesignSize(100);
          scroll_V->_Position(0);

          //[EVENT 함수]
          //{
              scroll_V->_EVENT_Scroll = _EVENT_Scroll_V;

          //}

      //}

      //[설계묶음 버튼 생성]
      //{
          //[버튼 동적 생성]
          //{
              //관리자를 개수만큼 동적 생성한다.
              osx_Btns = new  Tgui_button_Form * [osxList->Count];

          //}

          //[버튼 바탕색 설정]{-----------------------------------------------------
          //바탕색을 설정한다.
          BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_WizardBtn, &color);
          //}-----------------------------------------------------------------------

          for(i = 0; i < osxList->Count; i++)
          {
            osx_Btns[i]          = new Tgui_button_Form(this);
            osx_Btns[i]->Parent  = base_Label;
            osx_Btns[i]->Visible = true;

            osx_Btns[i]->_Top(4 + 24 * i);
            osx_Btns[i]->_Left(4);
            osx_Btns[i]->_Width(base_Label->Width - 22);
            osx_Btns[i]->_Height(20);
            osx_Btns[i]->_Caption_AutoPos(false);
            osx_Btns[i]->_Caption_X(4);
            osx_Btns[i]->_Caption_Y(4);

            //[2011.01.15.토][수정!!!]{-------------------------------
            //글자가 잘 보이도록 [검정] 색으로 바꾼다.
            osx_Btns[i]->_FontColor(clBlack);//_ide_option->color_0);
            //}-------------------------------------------------------

            osx_Btns[i]->_Caption(((AnsiString)(osxList->Strings[i])).c_str());

            //[2009.10.03.토][추가!!!]{--------
            osx_Btns[i]->_BackColor(color);
            //}--------------------------------

            //어떤 버튼이 눌린 것인지 확인하기 위하여 필요하다.
            osx_Btns[i]->_EVENT_Down  = _EVENT_Down_osx_Btns;

            //실제 버튼동작은 여기서 처리한다.
            osx_Btns[i]->_EVENT_Click = _EVENT_Click_osx_Btns;

            //[VMOS통합판수정중][2010.12.06.화]{-----------------------------
            //해당 VMOS 의 설명을 보여 주기 위하여 [진입 동작] 도 처리한다.
            osx_Btns[i]->_EVENT_MouseEnter = _EVENT_MouseEnter_osx_Btns;
            //}--------------------------------------------------------------

            //[2011.01.15.토][추가!!!]
            osx_Btns[i]->_EVENT_MouseLeave = _EVENT_MouseLeave_osx_Btns;

          }

          //처음에는 눌린 버튼이 없다.
          selIndex = -1;

      //}

      //[줄이동자 범위 설정]
      //{
          //[2009.06.01.월][추가!!!]{--------------------------------------------
          //생성된 버튼의 개수와 동기화 되도록 [줄이동자] 의 범위를 설정해 준다.
          //기본 10 개는 항상 보이게 되므로 이 값을 제거해 주어야 한다.
          //[줄이동] 은 버튼단위로 진행되므로 범위는 버튼의 개수와 동기시킨다.
          //}--------------------------------------------------------------------

          if(osxList->Count > 10)
          {
            //기본적으로 보이는 개수는 제외-----v
            scroll_V->_Max(osxList->Count - 10);

            //동일한 크기로 설정하는것이 개수와 상관 없이 가장 적합하다.
            scroll_V->_DesignSize(scroll_V->_max);

          }

      //}

      //[설명 풍선 도움말]
      //{
          //[2011.01.15.토][추가!!!]{-------------------------------------------------------
          //VMOS 의 설명을 풀력하는 [설명 풍선 도움말] 을 만든다.
          //이전에 [출력창] 에 출력하던 것을 여기로 바꾸기 위한 것이다.
          //가능하면 [시점] 을 일치시켜 사용자에게 정확한 정보를 전달하게 하기 위한 것이다.
          //}-------------------------------------------------------------------------------

          //[생성]
          //{
              //위에서 얻은 [모체정보] 를 바탕으로 바로 설정하면 된다.
              _descript_BalloonBox         = new TGBalloonBox_Form(this);

              //전체 화면에 독립적으로 보이도록 [모체] 를 지정하지 않는다.
              _descript_BalloonBox->Parent = NULL;

          //}

          //감추고 시작한다.
          _descript_BalloonBox->Visible = false;

          _descript_BalloonBox->_BalloonBoxPos(this->Left + _descript_BalloonBox->_pointerLeft,
                                               this->Top + this->Height);

          _descript_BalloonBox->_FontStyle(d_FONTSTYLE_default);
          _descript_BalloonBox->_FontColor(clWhite);

          //바탕색을 설정한다.
          BMP_Get_Bright_Color(_ide_option->color_0, 50, &color);
          _descript_BalloonBox->_BackColor(color);

          _descript_BalloonBox->_OutLineColor(IDE_COLOR_outline);

          _descript_BalloonBox->_AlphaBlendValue(225);
          _descript_BalloonBox->_AlphaBlend(true);

      //}

  //}

  //[그리기]
  //{
      _Shape();

  //}

  //[폼 위치 조정]
  //{
      //폼이 항상 화면의 중앙에 나오도록 위치를 조정한다.
      this->Left = Screen->Width/2  - this->Width/2;
      this->Top  = Screen->Height/2 - this->Height/2;

  //}

  return;

}

__fastcall Tosx_InstallBox_Form::~Tosx_InstallBox_Form(void)
{
  //[2012.04.30.월][수정!!!]{---------------
  //안전을 위하여 선언한 역순으로 삭제한다.
  //}---------------------------------------

  //[VAR]
  //{
      int  i;

  //}

  if(_descript_BalloonBox != NULL) { delete _descript_BalloonBox; _descript_BalloonBox = NULL; }

  for(i = 0; i < osxList->Count; i++)
  {
    if(osx_Btns[i] != NULL) { delete osx_Btns[i]; osx_Btns[i] = NULL; }

  }

  if(osx_Btns != NULL) { delete [] osx_Btns; osx_Btns = NULL; }

  if(scroll_V != NULL) { delete scroll_V; scroll_V = NULL; }

  if(base_Label != NULL) { delete base_Label; base_Label = NULL; }

  if(title_Label != NULL) { delete title_Label; title_Label = NULL; }

  if(osxList != NULL) { delete osxList; osxList = NULL; }

  if(_close_bmpbtns != NULL) { delete _close_bmpbtns; _close_bmpbtns = NULL; }

  if(_bmp_ != NULL) { delete _bmp_; _bmp_ = NULL; }

}

//------------------------------------------------------------------------------

void __fastcall Tosx_InstallBox_Form::_FormCut(void)
{
  //[2006.11.07.화][생성!!!]{----------------------------------------------------
  //폼의 caption 의 모양을 보기 좋게 하기 위하여 caption 의 영역을 제외한 나머지
  //영역의 폼을 제거해 준다.(구멍을 뚫어준다.)
  //여러개의 [사각형] 모양으로 구멍을 뚫어준다.
  //}----------------------------------------------------------------------------

  //[VAR]
  //{
      HRGN    rgn_main,                              //대상 폼.
              rgn_cut_rect,                          //caption 오른쪽 영역 전부.
              rgn_cut_left_line, rgn_cut_left_dot,   //수평line, dot.
              rgn_cut_right_line, rgn_cut_right_dot; //수평line, dot.
  //}


  //[Form 초기화]
  //{
      //포인터 초기화.
      rgn_main = 0;

      //Form 의 영역 정보를 얻는다.
      GetWindowRgn(this->Handle, rgn_main);

      //일단 현재 Form 영역을 지운다.
      DeleteObject(rgn_main);
  //}

  //[영역 생성]
  //{
      //새로운 영역을 생성한다.
      rgn_main = CreateRectRgn(0, 0, this->Width, this->Height);

      //[구멍 뚫을 영역 지정]
      //{
          //caption 오른쪽 영역.
          rgn_cut_rect       = CreateRectRgn(_caption_width, 0, this->Width, 18);

          //좌측 라인.
          rgn_cut_left_line  = CreateRectRgn(0, 0, 2, 1);

          //좌측 점.
          rgn_cut_left_dot   = CreateRectRgn(0, 1, 1, 2);

          //우측 라인.
          rgn_cut_right_line = CreateRectRgn(_caption_width - 2, 0, _caption_width, 1);

          //우측 점.
          rgn_cut_right_dot  = CreateRectRgn(_caption_width - 1, 1, _caption_width, 2);

      //}

      CombineRgn(rgn_main, rgn_main, rgn_cut_rect, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_left_line, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_left_dot, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_right_line, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_right_dot, RGN_DIFF);

      SetWindowRgn(this->Handle, rgn_main, TRUE);
  //}

  //[구멍 뚫기]
  //{
      //--------------------------------
      //지정 영역에 구멍을 뚫는다.
      DeleteObject(rgn_cut_rect);
      DeleteObject(rgn_cut_left_line);
      DeleteObject(rgn_cut_left_dot);
      DeleteObject(rgn_cut_right_line);
      DeleteObject(rgn_cut_right_dot);
      //--------------------------------
  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::_Border(void)
{
  //[설명!!!]{----------------------------------------------------------------
  //Form 전체의 테두리를 만든다.
  //두께는 4pixel, 동서남 3 면만 그리면 된다.
  //테두리는 직접 보이는 것이고 내용에 영향을 주지 않아야 하므로 직접 그린다.

  //[2007.03.18.일][수정!!!]
  //1 pixel 의 [통합개발환경] 전체 테두리를 마지막에 그려준다.
  //이는 윤곽을 더 뚜렷하게 하기 위한 것이다.
  //}-------------------------------------------------------------------------

  //[VAR]
  //{
      TRect            trect;
  //}

  //[테두리 만들기]
  //{
      //[좌측 테두리]{-------------------------------
      trect.Left   = 0;
      trect.Top    = 0;
      trect.Right  = d_border_width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //[우측 테두리]{-------------------------------
      trect.Left   = _bmp_->Width - d_border_width;
      trect.Top    = 0;
      trect.Right  = _bmp_->Width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //[아래 테두리]{-------------------------------
      trect.Left   = 0;
      trect.Top    = _bmp_->Height - d_border_width;
      trect.Right  = _bmp_->Width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //---------------------------------------------
  //}

  //[윤곽선 만들기]
  //{
      //[2007.03.18.일][추가!!!]
      if(d_OPTION_msgbox_outline)
      {
        //[왼쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(0, 2);
        _bmp_->Canvas->LineTo(0, this->Height);

        //[오른쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(this->Width - 1, 0);
        _bmp_->Canvas->LineTo(this->Width - 1, this->Height);

        //[아래쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(0, this->Height - 1);
        _bmp_->Canvas->LineTo(this->Width - 1, this->Height - 1);

        //[제목줄 위쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(2, 0);
        _bmp_->Canvas->LineTo(_caption_width-3, 0);

        //[오늘쪽 위쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width -1 , _caption_height - d_border_width);
        _bmp_->Canvas->LineTo(this->Width - 1, _caption_height - d_border_width);

        //[제목줄 오른쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width -1 , 2);
        _bmp_->Canvas->LineTo(_caption_width -1, _caption_height - d_border_width);

        //[제목줄 왼쪽위 모서리]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(2 , 0);
        _bmp_->Canvas->LineTo(0, 2);

        //[제목줄 오른쪽위 모서리]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width-3 , 0);
        _bmp_->Canvas->LineTo(_caption_width -1, 2);

      }

  //}

  return;

  //[내부 테두리 만들기]
  //{
      //[2010.12.15.수][추가!!!]{-----------
      //보기 좋게 내부에도 테두리를 만든다.
      //}-----------------------------------

      trect.Left   = d_border_width - 1;
      trect.Top    = _caption_height + d_border_width - 1;
      trect.Right  = this->Width - d_border_width + 1;
      trect.Bottom = this->Height - d_border_width + 1;

      _bmp_->Canvas->Pen->Color   = IDE_COLOR_outline;
      _bmp_->Canvas->Pen->Width   = 1;
      _bmp_->Canvas->Brush->Style = bsClear;

      _bmp_->Canvas->Rectangle(trect);

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::_Shape(void)
{
  //[2007.09.26.수][생성!!!]{---
  //컨트롤의 모양을 만든다.
  //}---------------------------

  //[VAR]
  //{
      TRect  rect;
      TRect  rect_caption;

      int    w, h;

      int    width, height;

  //}

  //[제목줄 폭 구하기]
  //{
      //caption 문자열의 width 를 구한다.
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, _caption, &width, &height);

      //실제 사용할 caption 폭을 설정한다.
      //_font.margin_size 는 처음 기본값인 0 을 사용한다.(한번만 그려주면 된다.)
      _caption_width = width + (_font.margin_size * 2) + 2;

  //}

  //[수정]
  //{
      //[닫기] 버튼의 폭과 배치를 반영하여 폭을 늘려준다.
      _caption_width += (_close_bmpbtns->Width + 4);

  //}

  //[폼 오려내기]
  //{
      _FormCut();
      
  //}

  //[모양 그리기]
  //{
      //[전체 배경 처리]
      //{
          //[영역정보]{-------------------
          rect = _bmp_->Canvas->ClipRect;
          //}-----------------------------

          //[바탕 지우기]{---------------------------
          _bmp_->Canvas->Brush->Color = IDE_COLOR_2;
          _bmp_->Canvas->FillRect(rect);
          //}----------------------------------------

      //}

      //[caption 처리]
      //{
          //[caption 영역]{----------------------
          rect_caption = rect;
          rect_caption.Bottom = _caption_height;
          //}------------------------------------

          //[caption 바탕 지우기]{-------------------
          _bmp_->Canvas->Brush->Color = _ide_option->color_0;
          _bmp_->Canvas->FillRect(rect_caption);
          //}----------------------------------------

          //[caption 문자열]
          //{
              //----------------------------------------------------------------------------------
              _font.margin_size = 0;

              //FONT_Out_String2(_bmp_, &_font, 0, 5, IDE_COLOR_3, _ide_option->color_0, true,
              //                 _caption,
              //                 d_FONT_underline_no, true, 0, IDE_COLOR_1,
              //                 &w, &h);

              //[2007.12.15.토][수정!!!]
              //위의 함수를 [형식] 을 적용할수 있는 이 함수로 바꾼다.
              FONT_Out_StyleString2(_bmp_, &_font, 0, 5, IDE_COLOR_3, _ide_option->color_0, true,
                                    d_FONTSTYLE_default,
                                    _caption,
                                    d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                    &w, &h);
              //----------------------------------------------------------------------------------
          //}

      //}

      //[닫기 단추 배치]
      //{
          _close_bmpbtns->_Top(5);
          _close_bmpbtns->_Left(_caption_width - _close_bmpbtns->Width - 5);

          //[단추 배경 지우기]
          //{
              rect.Left   = _close_bmpbtns->Left - 1;
              rect.Top    = _close_bmpbtns->Top  - 1;
              rect.Right  = _close_bmpbtns->Left + _close_bmpbtns->Width  + 1;
              rect.Bottom = _close_bmpbtns->Top  + _close_bmpbtns->Height + 1;

              _bmp_->Canvas->Brush->Color = IDE_COLOR_2;
              _bmp_->Canvas->FillRect(rect);

          //}

      //}

  //}

  //[테두리]
  //{
      _Border();
  //}

  //[view]{-------------
  //그린 것을 보여준다.
  _Draw();
  //}-------------------

  return;

}

void __fastcall Tosx_InstallBox_Form::_Draw(void)
{
  BitBlt(this->Canvas->Handle, 0, 0,
         this->Width, this->Height,
         _bmp_->Canvas->Handle, 0, 0, SRCCOPY);

  return;

}

void __fastcall Tosx_InstallBox_Form::_Caption(char  *pCaption)
{
  //[2007.12.14.금][생성!!!]{-------------------------------------------------------
  //[제목줄] 문자열을 지정된 문자열로 바꾸어 주고 전체를 다시 그려준다.
  //[제목줄] 이 달라지면 폼을 다시 오려 주어야 하므로 다시 전체를 그려 주어야 한다.
  //}-------------------------------------------------------------------------------

  //[VAR]
  //{
      int            width, height;

  //}

  //[caption 설정]
  //{
      //caption 문자열.(크게 바뀔일이 없다.)
      STR_Assign(_caption, pCaption);

      //높이 지정.
      _caption_height = 22;

      //caption 문자열의 width 를 구한다.
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, _caption, &width, &height);

      //실제 사용할 caption 폭을 설정한다.
      //_font.margin_size 는 처음 기본값인 0 을 사용한다.(한번만 그려주면 된다.)
      _caption_width = width + (_font.margin_size * 2) + 2;

  //}

  //[그리기]
  //{
      _Shape();

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::_Width(int  pWidth)
{
  //[2007.12.14.금][생성!!!]{-----------------------------------------------------------
  //폭을 바꾸어 주고 _bmp_ 등 관련 부분도 다 수정하고 폼도 다시 오려주고 다시 그려준다.
  //}-----------------------------------------------------------------------------------

  //[크기 조정]
  //{
      //지정 폭으로 폭을 조정한다.
      _bmp_->Width = pWidth;

      this->Width  = pWidth;

  //}

  //[그리기]
  //{
      _Shape();

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::_Height(int  pHeight)
{
  //[2007.12.14.금][생성!!!]{-------------------------------------------------------------
  //높이를 바꾸어 주고 _bmp_ 등 관련 부분도 다 수정하고 폼도 다시 오려주고 다시 그려준다.
  //}-------------------------------------------------------------------------------------

  //[크기 조정]
  //{
      //지정 폭으로 폭을 조정한다.
      _bmp_->Height = pHeight;

      this->Height  = pHeight;

  //}

  //[그리기]
  //{
      _Shape();

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::_Show(void)
{
  //[2012.05.07.월][생성!!!]{-------------------------------------------
  //[맷돌C:GUI] 동작후 [가장 앞으로 보이기] 안되는 문제 수정하기 위하여
  //보여주는 함수를 새로 만든다.
  //}-------------------------------------------------------------------

  //[보이기]
  //{
      //[2012.05.07.월][추가!!!]{------------------------------------------
      //아래 <this->BringToFront()> 추가와 같은 이유인데
      //원래 지정한 것이나 재지정한다.
      //단, 어떤 이유인지는 알수 없으나 [맷돌C:GUI] 를 돌린후 우선순위
      //문제로 [가장 앞으로 보이기] 가 제대로 복구되지 않는 경우가 있다.
      //이를 완전히 초기화 하기 위하여 [기본폼] 으로 다시 지정후
      //[가장위] 로 다시 지정하면 다시 완벽하게 복구된다.
      //실험결과 여러 상황에서도 문제 없이 잘 [가장 위로 보이기] 동작된다.
      //
      //[주의!!!]----------------------------------------------------------
      //반드시 아래 순서대로 처리해야 한다.
      //
      //1) this->FormStyle = fsNormal;
      //2) this->FormStyle = fsStayOnTop;
      //3) this->BringToFront();
      //4) this->Show();
      //}------------------------------------------------------------------

      this->FormStyle = fsNormal;
      this->FormStyle = fsStayOnTop;

      this->BringToFront();

      this->Show();

  //}

}

//------------------------------------------------------------------------------
//[동작홤수들]------------------------------------------------------------------
//------------------------------------------------------------------------------

void __fastcall Tosx_InstallBox_Form::_EVENT_CloseButton_Click(void)
{
  //[2007.09.26.수][생성!!!]{---
  //이 폼을 닫는다.
  //}---------------------------

  this->Close();

  return;

}

void __fastcall Tosx_InstallBox_Form::_EVENT_Scroll_V(void)
{
  //[2009.04.19.일][생성!!!]{-----------------------------------------------
  //[수직 줄이동자] 가 움직이는 경우 내부의 모든 버튼을 동기화 시킨다.
  //각각의 모든 버튼은 전부 [배열] 로 관리되고 있으므로 쉽게 처리 가능하다.
  //}-----------------------------------------------------------------------

  //[VAR]
  //{
      //[2009.06.01.월][추가!!!]
      int  i;

  //}

  //[2009.06.01.월][추가!!!]
  for(i = 0; i < osxList->Count; i++)
  {
    osx_Btns[i]->_Top(4 + 24 * i - (4 + 24 * scroll_V->_position) + 4);

  }

  return;

}

void __fastcall Tosx_InstallBox_Form::_EVENT_Down_osx_Btns(void)
{
  //[2009.05.27.수][생성!!!]{--------------------------------
  //여기서 어떤 버튼이 눌렸는지 확인하고 기록해 놓아야 한다.
  //}--------------------------------------------------------

  //[VAR]
  //{
      int  i;

  //}

  for(i = 0; i < osxList->Count; i++)
  {
    //눌린 버튼을 기록한다.
    if(osx_Btns[i]->_down == true) { selIndex = i; }

  }

  return;

}

void __fastcall Tosx_InstallBox_Form::_EVENT_Click_osx_Btns(void)
{
  //[2009.05.27.수][생성!!!]{------------------------------------------------
  //[선택버튼] 에 해당하는 [설계묶음] 을 사용자가 지정한 위치에 생성해 준다.
  //이는 전용 함수를 사용하여 처리한다.
  //}------------------------------------------------------------------------

  //[VAR]
  //{
      char   gosFileName[OPT_lineStrSize];
      char   ginfFileName[OPT_lineStrSize];

      char   tempStr[OPT_lineStrSize];

      char  *ginfFileBuf;

  //}

  //[VMOSINFO 위치 얻기]
  //{
      //[2010.12.10.금][추가!!!]
      struct VMOSINFO  *vmosInfo;

      VmosInfo_GetPtr(&vmosInfo);

  //}

  //[<*.gos> 경로 만들기]
  //{
      //기본 경로 만들기.
	  STR_Assign(gosFileName, ((AnsiString)Ide_Osx_Root_Path).c_str());

      //버튼의 문자열이 해당 [운영체제] 의 [폴더이름] 이 된다.
      STR_Add(gosFileName, osx_Btns[selIndex]->_caption); STR_Add(gosFileName, "\\");

      //버튼의 문자열이 해당 [운영체제] 의 [이름(확장자 제외한)] 이 된다.
      STR_Add(gosFileName, osx_Btns[selIndex]->_caption); STR_Add(gosFileName, ".gos");

  //}

  //[운영체제 정보 정리]
  //{
      //[2010.12.10.금][추가!!!]{-----------------------------------------------------
      //현재 설치하는 [운영체제] 의 [식별자] 를 [운영체제 관리정보] 에 등록해 놓는다.
      //이는 실제 [운영체제] 를 설치하는 <matdol.cpp> 의 해당 함수를 위한 것이다.
      //}-----------------------------------------------------------------------------

      //[<*.ginf> 열기]
      //{
          //[2010.12.11.토][추가!!!]{----------------------------------------------
          //<*.gos> 와 <*.ginf> 는 항상 짝을 이루어 사용되며, 같은 이름을 가지므로
          //[확장자] 만 <*.ginf> 로 바꾸면 된다.
          //}----------------------------------------------------------------------

          STR_ChangeFileExt(gosFileName, "ginf", ginfFileName);

          //열다가 오류가 발생한 경우는 더이상 처리하지 않는다.
          //이 경우 아직 동적 생성되지 않은 상태이므로 저장소를 삭제할 필요는 없다.
          if(Ginf_Open(ginfFileName, (unsigned char **)(&ginfFileBuf), NULL) != true) return;

      //}

      //[식별자]
      //{
          vmosInfo->osID = Ginf_Get_Id(ginfFileBuf);

      //}

      //[운영체제 자체 크기]
      //{
          //[!]{------------------------------------------------
          //VMOS 와 달리 [운영체제] 자체 크기정보는 불필요하다.
          //}---------------------------------------------------

      //}

      //[동적 삭제]
      //{
          delete [] ginfFileBuf; ginfFileBuf = NULL;

      //}

  //}

  //[운영체제 설치]
  //{
      //[!]{---------------------------
      //OSX 전용 설치 함수를 사용한다.
      //}------------------------------

      Ide_Ctrl_OSX_Install(gosFileName);

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::_EVENT_MouseEnter_osx_Btns(void)
{
  //[2010.12.06.화][생성!!!]{-------------------------------------------------------------
  //해당 [운영체제] 의 <*.ginf> 문서를 읽어 "<설명>" 정보를 읽어 [출력창] 에 출력한다.
  //이는 해당 [운영체제] 의 자세한 정보를 보여주기 위한 것이다.
  //
  //[출력창] 에는 [크기제한] 으로 문자열이 잘라지지 않도록 출력시 전체를 지우고 출력한다.
  //
  //[2012.05.07.월][수정!!!]--------------------------------------------------------------
  //[2018.04.20.금][수정!!!]--------------------------------------------------------------
  //}-------------------------------------------------------------------------------------

  //[VAR]
  //{
      int    i;

      char   fileName[OPT_lineStrSize];
      char   tempStr[OPT_lineStrSize];

      char  *fileBuf;

      //[2011.01.15.토][추가!!!]
      int    color;

  //}

  //[선택된 버튼 번호 구하기]
  //{
      //[!]{-----------------------------------------------------------------------
      //<gui_button->_in> 속성을 검사하면 어떤 버튼이 대상인지 바로 확인할수 있다.
      //}--------------------------------------------------------------------------

      for(i = 0; i < osxList->Count; i++)
      {
        //현재 [화면지정자] 가 들어와 있는 것이 있나?
        if(osx_Btns[i]->_in == true) { selIndex = i; }

      }

  //}

  //[버튼 선택 처리]
  //{
      //[2011.01.15.토][추가!!!]{-----------------------------------------
      //현재 선택된 버튼을 한 눈에 쉽게 확인할수 있도록 특별 처리를 한다.
      //}-----------------------------------------------------------------

      //osx_Btns[selIndex]->_FontStyle(d_FONTSTYLE_bold);

      /*
      [2018.04.20.금][주석처리!!!]{--------------------------------------
      [버튼] 자체에 [가선택] 기능을 넣었으므로 여기서는 처리하지 않는다.
      [Linux:wine] 에서는 여기서 처리하는 경우 제대로 동작하지 않는다.
      여러 버튼이 계속 가선택 상태로 남아 있거나 하는 문제가 있어서 아예
      [버튼] 에 이 기능을 지어 넣었다.
      //}----------------------------------------------------------------

      //[버튼 바탕색 설정]{-------------------------------------------------------
      //바탕색을 설정한다.
      BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_WizardBtn/2, &color);
      //}-------------------------------------------------------------------------

      osx_Btns[selIndex]->_BackColor(color);
      */

  //}

  //[경로 얻기]
  //{
      //기본 경로 만들기.
	  STR_Assign(fileName, ((AnsiString)Ide_Osx_Root_Path).c_str());

      //버튼의 문자열이 해당 [운영체제] 의 [폴더이름] 이 된다.
      STR_Add(fileName, osx_Btns[selIndex]->_caption); STR_Add(fileName, "\\");

      //[설명문] 정보가 들어있는 <*.ginf> 문서를 지정한다.
      //버튼의 문자열이 해당 [운영체제] 의 [이름(확장자 제외한)] 이 된다.
      STR_Add(fileName, osx_Btns[selIndex]->_caption); STR_Add(fileName, ".ginf");

  //}

  //[설명문 표시]
  //{
      //[2010.12.08.수][추가!!!]{--------------------------------------------------------
      //해당 [운영체제] 의 간단한 설명을 해당 <*.ginf> 에서 읽어서 [출력창] 에 보야준다.
      //}--------------------------------------------------------------------------------

      //[문서 열기]
      //{
          Ginf_Open(fileName, (unsigned char **)(&fileBuf), NULL);

      //}

      //[설명문 추출]
      //{
          //<*.ginf> 에서 [설명문] 을 추출한다.
          Ginf_Get_DescriptStr(fileBuf, tempStr);

      //}

      //[설명 풍선 도움말에 출력]
      //{
          //[2011.01.15.토][수정!!!]{------------------------------------------------------------
          //원래 [출력창] 에 출력하던 것을 금일 새로 추가한 전용 [설명 풍선 도움말] 에
          //출력하는 것으로 수정한다.
          //이는 시점의 차이를 줄여 보다 정보 전달을 쉽게 하기 위한 것이다.
          //
          //[2012.05.07.월][수정!!!]{------------------------------------------------------------
          //<_descript_BalloonBox->_pointerLeft> 는 계속 가변하는 값으로 제대로 적용되지 않는다.
          //반드시 지정 위치 고정값인 <d_GBalloonBox_pointerLeft> 기본값을 사용한다.
          //[기준] 을 고정값으로 주어야 내부적으로 [오른쪽으로 벗어났는지] 여부를 판단할수 있고
          //다시 수평위치를 재조정 할수 있기 때문이다.
          //}------------------------------------------------------------------------------------

          //_descript_BalloonBox->_BalloonBox(this->Left + _descript_BalloonBox->_pointerLeft,
          _descript_BalloonBox->_BalloonBox(this->Left + d_GBalloonBox_pointerLeft,
                                            this->Top + this->Height,
                                            false,
                                            tempStr);

          _descript_BalloonBox->Visible = true;

      //}

      //[저장소 삭제]
      //{
          //Ginf_Open() 에서 동적으로 생성된 저장소를 삭제한다.
          delete [] fileBuf; fileBuf = NULL;

      //}

  //}

}

void __fastcall Tosx_InstallBox_Form::_EVENT_MouseLeave_osx_Btns(void)
{
  //[2011.01.15.토][생성!!!]{--------------------------------------
  //_EVENT_MouseEnter_osx_Btns() 의 설정을 해제할 것을 해제시킨다.
  //
  //[2018.04.20.금][수정!!!]---------------------------------------
  //}--------------------------------------------------------------

  //[VAR]
  //{
      int  color;

  //}

  //[버튼 선택 해제]
  //{
      //[2011.01.15.토][추가!!!]{--------------------------
      //현재 선택된 버튼을 해제시키고 원래대로 돌려놓는다.
      //}--------------------------------------------------

      //vmos_Btns[selIndex]->_FontStyle(d_FONTSTYLE_default);

      /*
      [2018.04.20.금][주석처리!!!]{--------------------------------------
      [버튼] 자체에 [가선택] 기능을 넣었으므로 여기서는 처리하지 않는다.
      [Linux:wine] 에서는 여기서 처리하는 경우 제대로 동작하지 않는다.
      여러 버튼이 계속 가선택 상태로 남아 있거나 하는 문제가 있어서 아예
      [버튼] 에 이 기능을 지어 넣었다.
      //}----------------------------------------------------------------
      
      //[버튼 바탕색 설정]{-----------------------------------------------------
      //바탕색을 설정한다.
      BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_WizardBtn, &color);
      //}-----------------------------------------------------------------------

      osx_Btns[selIndex]->_BackColor(color);
      */
      
  //}

}

//------------------------------------------------------------------------------

void __fastcall Tosx_InstallBox_Form::FormMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //[2007.09.26.수][생성!!!]{-------
  //현재 [폼 이동] 처리에 사용한다.
  //}-------------------------------

  //[VAR]
  //{
      //[2018.03.17.토][추가!!!]
      TPoint  mousePos;

  //}

  //[전광판]
  //{
      //[2010.04.03.토][추가!!!]{-----------------------------
      //[전광판] 을 일시 정지 시킨다.
      //이는 이동, 크기조정시 끊어짐 현상을 막기 위한 것이다.
      //}-----------------------------------------------------

      ide_editor_Form->_GDotMatrix_RotateTemp(false);

  //}

  //[캡션바] 영역에서만 처리되어야 한다.
  if(((0 <= X) && (X < _caption_width)) &&
     ((0 <= Y) && (Y < _caption_height)))
  {
    if(Button == mbLeft)
    {
      //[위치 기록]
      //{
          //[2018.03.17.토][수정!!!]{-----------------------------------------------------
          //[전체화면] 을 대상으로한 위치 사용.
          //이는 <GVmos> 등 다른 Form 안에 생성되는 경우에도 동일하게 동작 시키기 위한것.
          //}-----------------------------------------------------------------------------

          //[전체화면] 을 대상으로 마우스 위치 얻기.
          GetCursorPos(&mousePos);

          //현재 <this> 위치와 [마우스] 위치 간의 거리 얻기.
          //항상 같은 거리를 유지하는 방법으로 [제목줄 이동] 을 구현하기 위한것.
          deltaLeft = mousePos.x - this->Left;
          deltaTop  = mousePos.y - this->Top;

      //}

      //caption 이 선택된 것을 알린다.
      _caption_selected = true;

      //[wine 지원]
      //{
          //[2018.03.04.일][추가!!!]{---------
          //[제목줄] 이동을 위한 타이머 켜기.
          //}---------------------------------

          if(_ide_option->wine == true)
          {
            captionMoveTimer->Enabled = true;

          }

      //}

    }

  }   

  return;

}

void __fastcall Tosx_InstallBox_Form::FormMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
  //[2007.09.26.수][생성!!!]{----------------------
  //마우스로 caption 을 집어 끄는 경우를 처리한다.
  //}----------------------------------------------

  //[VAR]
  //{
      //[2018.03.17.토][추가!!!]
      TPoint  mousePos;

  //}

  //[캡션바 이동]
  //{
      //[캡션바] 영역에서만 처리되어야 한다.
      if(((0 <= X) && (X < _caption_width)) &&
         ((0 <= Y) && (Y < _caption_height)) ||
         //마우스로 집어  끄는 경우 영역을 벗어난 경우도 처리 되어야 한다.
         //이는 집어 끌다가 놓치는 경우를 막기 위한 것이다.
         (Shift.Contains(ssLeft)))
      {
        if((Shift.Contains(ssLeft)) && (_caption_selected == true))
        {
          //caption 을 마우스로 집어끄는 경우 Form 을 이동 시켜야 한다.

          //[wine 지원]
          //{
              //[2018.03.04.일][추가!!!]{-------------------------------
              //<Linux:wine> 에서 구동 중이라면 여기서 처리하지 않는다.
              //<captionMoveTimerTimer()> 안에서 처리된다.
              //}-------------------------------------------------------

              if(_ide_option->wine == true)
              {
                //[Linux:wine]
                //이 경우 아래에서 사용하는 <Left>, <Top> 값은 <captionMoveTimer> 안에서
                //수정되고 있는 정확한 값으로 처리.

              }
              else
              {
                //[윈도우]

                //[위치 이동]
                //{
                    //[2018.03.17.토][수정!!!]{-----------------------------------------------------
                    //[전체화면] 을 대상으로한 위치 사용.
                    //이는 <GVmos> 등 다른 Form 안에 생성되는 경우에도 동일하게 동작 시키기 위한것.
                    //}-----------------------------------------------------------------------------

                    //[전체화면] 을 대상으로 마우스 위치 얻기.
                    GetCursorPos(&mousePos);

                    //현재 <this> 위치와 [마우스] 위치 간의 거리를
                    //항상 같은 거리로 유지하는 방법으로 [제목줄 이동] 을 구현.
                    this->Left = mousePos.x - deltaLeft;
                    this->Top  = mousePos.y - deltaTop;

                //}

              }

          //}

        }

      }

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::FormMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //[2007.09.26.수][생성!!!]

  //[wine 지원]
  //{
      //[2018.03.04.일][추가!!!]{---------
      //[제목줄] 이동을 위한 타이머 끄기.
      //}---------------------------------

      if(_ide_option->wine == true)
      {
        //<FormMouseUp> 에서는 무조건 타이머 정지.
        captionMoveTimer->Enabled = false;

      }

  //}

  //[전광판]
  //{
      //[2010.02.23.화][추가!!!]{--------------
      //[전광판] 을 다시 정지에서 해제시킨다.
      //}--------------------------------------

      ide_editor_Form->_GDotMatrix_RotateTemp(true);

  //}

  if(((0 <= X) && (X < _caption_width)) &&
     ((0 <= Y) && (Y < _caption_height)))
  {
    if(Button == mbRight)
    {

    }

  }

  //[해제]
  //{
      //caption 선택을 해제한다.
      _caption_selected = false;

  //}

  return;

}

void __fastcall Tosx_InstallBox_Form::captionMoveTimerTimer(TObject *Sender)
{
  //[2018.03.04.일][생성!!!]{---------------------------
  //[Linux:wine] 에서 [제목줄:이동] 을 지원하기 위한것.
  //}---------------------------------------------------

  //[VAR]
  //{
      TPoint  mousePos;

  //}

  //[위치 수정]
  //{
      //[!]{-----------------------------------------------------------------------------
      //이전 방식은 <Linux:wine> 에서는 빠르게 이동하는 경우 [떨림] 현상이 생기고
      //이동이 끊어지는 문제가 발생.
      //이는 <Linux:wine> 에서 [제목줄] 밖으로 [화면지정자] 가 나가는 경우를 제대로
      //처리하지 못하는 문제인듯.
      //따라서, 기존처럼 [상대좌표] 를 사용하지 않고 [절대좌표] 를 사용하는 것으로 수정.
      //}--------------------------------------------------------------------------------

      //[마우스 절대 위치 얻기]
      //{
          //화면상의 [마우스] 절대 위치를 얻는다.
          GetCursorPos(&mousePos);

      //}

      //[이동]
      //{
          //[2018.03.17.토][수정!!!]{---------------------------------
          //현재 <this> 위치와 [마우스] 위치 간의 거리를
          //항상 같은 거리로 유지하는 방법으로 [제목줄 이동] 을 구현.
          //자세한 내용은 [제목줄 이동] 관련 부분 설명 연관 참고.
          //}---------------------------------------------------------
          
          this->Left = mousePos.x - deltaLeft;
          this->Top  = mousePos.y - deltaTop;

      //}

  //}

}






