关于窗体移动跟随的问题!

flowercity 2004-10-14 09:24:38
窗体1移动之后,窗体2也要跟着移动,请问:
如何判断窗口在移动?要写什么函数?或者属性?
我自己写了一个,没反映!
代码如下:

void __fastcall TForm1::WMWindowPosChanging(TWMWindowPosChanging &msg) //移动屏幕的时候没有反映,图像不跟着窗体移动
{
RECT rc ;
int x,y ;
GetWindowRect(this->Panel1->Handle,&rc); //图像显示在窗口的一个Panel1上
x = rc.left;
y = rc.top;

if (g_MRgnID >= 0) //视频采集函数
sapiMoveMainRegion(g_MRgnID,x,y,true);
}
...全文
107 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlestcc 2004-10-14
  • 打赏
  • 举报
回复
在form1里捕获WM_EXITSIZEMOVE消息
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_EXITSIZEMOVE, TMessage, AfterMove)
END_MESSAGE_MAP(TForm)

在AfterMove函数里改变form2的left/top属性以跟随form1移动
void __fastcall TMainForm::AfterMove(TMessage &Msg)
{
if (Form2!= NULL && m_Form2->Visible == true)
{
Form2->Left += this->Left - m_Left;
Form2->Top += this->Top - m_Top;
}
Msg.Result = 0;
}
flowercity 2004-10-14
  • 打赏
  • 举报
回复
你这个我知道
我的问题是:如何知道窗口移动事件?而不是鼠标移动
zdyyongjing 2004-10-14
  • 打赏
  • 举报
回复
这是我写的程序,你参考一下吧,或许参你有用。Form里放一个Button,两个Panel,一个Panel里面一个Picture组件,当程序运行的时候,拖动鼠标,图片就会移动。程序如下:
#include <vcl.h>
#pragma hdrstop

#include "movebigbitmap.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)
{
iX0 = X;
iY0 = Y;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
int iDeltaX, iDeltaY;
if(Shift.Contains(ssLeft))
{
iDeltaX = X - iX0;
iDeltaY = Y- iY0;
if(iDeltaX)
Image1->Left += iDeltaX;
Image2->Left=Image1->Left;

if(iDeltaY)
Image1->Top += iDeltaY;
Image2->Top=Image1->Top;
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Image1->Picture->LoadFromFile("bb.bmp");
Image2->Picture=Image1->Picture;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Picture->Bitmap->PixelFormat=pf24bit;
Image2->Picture->Bitmap->PixelFormat=pf24bit;
Image1->Width=200;
Image1->Height=200;
Image1->Picture->Bitmap->Width=200;
Image1->Picture->Bitmap->Height=200;
Image2->Width=200;
Image2->Height=200;
Image2->Picture->Bitmap->Width=200;
Image2->Picture->Bitmap->Height=200;
Form1->DoubleBuffered = true;
}
flowercity 2004-10-14
  • 打赏
  • 举报
回复
谢谢!
我尝试一下!
littlestcc 2004-10-14
  • 打赏
  • 举报
回复
放在你form1的头文件里protected部分
BEGIN_MESSAGE_MAP ... END_MESSAGE_MAP,用于声明自定义消息处理函数,不明白查一下帮助
flowercity 2004-10-14
  • 打赏
  • 举报
回复

BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_EXITSIZEMOVE, TMessage, AfterMove)
END_MESSAGE_MAP(TForm)

上面的代码放在主窗体的什么位置?
我没看到这样的定义方式啊,兄弟!

我自己重新写的一个,你看对不对?

void __fastcall TForm1::WndProc(TMessage &Msg)
{
TForm::WndProc(Msg);
if(Msg.Msg==WM_MOVING)
{
RECT rc ;
int x,y ;
GetWindowRect(this->Panel1->Handle,&rc);
x = rc.left;
y = rc.top;

if (g_MRgnID >= 0)
sapiMoveMainRegion(g_MRgnID,x,y,true);
}
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧