c++ builder 鼠标的On Mouse Move事件

c++ builder 鼠标的On Mouse Move事件,第1张

你的要求中,imgTrack只是底图,因此在这里不于理会。

给出以下代码供参考:

一、程序控件说明:

1、窗体 Form1

2、窗体上一Panl控件 Panel1 (如你的容器为其它也可,只要知道它的宽Width便可)。备档如

3、Image控件 Image1。

二、程序目标:

使Image1在鼠标拖动下左右移动,但不能移出控件Panel1。

三、具体代码:

1、头文件代码:

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

#ifndef Unit1H

#define Unit1H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Graphics.hpp>

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

class TForm1 : public TForm

{

__published: // IDE-managed Components

TPanel *Panel1

TImage *Image1

void __fastcall Image1MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner)

bool MouseDownBZ//鼠标按下标志(自行加入)

int MouseX//鼠标坐标(自行加入)

}

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

extern PACKAGE TForm1 *Form1

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

#endif

2、仿启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)

{

}

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

void __fastcall TForm1::Image1MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

MouseDownBZ = true

MouseX = X

}

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

void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

{

MouseDownBZ = false

MouseX = X

}

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

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

int MinMove = 0

int MaxMove = Panel1->Width - Image1->Width

int LSMove = Image1->Left+(X-MouseX)

if(MouseDownBZ == true){

if((LSMove >= MinMove)&&(LSMove <= MaxMove))

{

Image1->Left = LSMove

}

}

}

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

代码非常简单,希望是你要的。

我想如果你是会BCB的人,我这样写出来应该能看懂了。

此外,在窗体构成时,以上代码中加入:

Image1->Parent->DoubleBuffered = true

可以减低Image1在移动过程中的闪动感,特别是Imgae1图片大的时候。

WM_MOUSELEAVE和WM_MOUSEHOVER不是标准的Windows消息函数,它们不能通过类向导来添加,行旅所有的添加工作都需要通过手工输入代码来完成。

你可以先添加一个WM_MOUSEMOVE消息,看它生成了哪些代码,然后模仿。

其实手动添加WM_MOUSELEAVE和WM_MOUSEHOVER也不难汪颂。

1,在要相困带郑应这两个消息的类的头文件中加入

afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam)

afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam)

(其实就是函数原型声明)

2,在该类的源文件的消息映射(BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间)加入

ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)

ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)

3,源文件中实现OnMouseLeave和OnMouseHover两个函数的功能。

有什么问题再交流。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12322771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存