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

📄 unit1.cpp

📁 本书《C++Builder与WindowsAPI经典范例》附含配套光盘包括132个WindowsAPI函数及206个完整、可执行的实例
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
//控制拖曳时的状态
FDragging = false;
//默认ImageList1图像出现的位置
DrawP = Point(ClientWidth/2, ClientHeight/3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
//在Form1居中绘制显现ImageList1的第一个图像
ImageList1->Draw(Canvas, DrawP.x, DrawP.y, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
//当鼠标在ImageList1图像范围内,单击左键
if (X > DrawP.x && X < DrawP.x + ImageList1->Width &&
     Y > DrawP.y && Y < DrawP.y + ImageList1->Height)
   {
   ClickP = ClientToScreen(Point(X, Y));
   //暂时锁住窗口更新动作
   ::LockWindowUpdate(::GetDesktopWindow());
   //允许拖曳ImageList1图像
   ImageList1->SetDragImage(0, X-DrawP.x, Y-DrawP.y);
   //开始拖曳ImageList1图像
   ImageList1->BeginDrag(::GetDesktopWindow(),
                         ClickP.x, ClickP.y);
   //启动OnMouseMove事件
   FDragging = true;
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if(FDragging)
  {
  //鼠标与图像相对的移动
  TPoint P = ClientToScreen(Point(X, Y));
  ImageList1->DragMove(P.x, P.y);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if(FDragging)
  {
  //放开鼠标左键时,即结束拖曳,并允许更新窗口
  ImageList1->EndDrag();
  ::LockWindowUpdate(NULL);

  //再更新鼠标最后移动的新位置,
  //并指派给下次拖曳时的开始位置
  TPoint P = ClientToScreen(Point(X, Y));
  DrawP.x = DrawP.x + (P.x - ClickP.x);
  DrawP.y = DrawP.y + (P.y - ClickP.y);
  Refresh();
  FDragging = false;
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -