BCB6中无标题栏可拖动的窗口的四种方法

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

作者:红客robby

在BCB6中,无标题栏的窗口,即BorderStyle设为bsNone。

如何实现,无标题栏可拖动。

以下,本人写了四种方法。

方法一,用消息接收的方法。

在头件FORM中的Public声明中加入下面代码:

MESSAGE void WMNCHitTest(TWMNCHitTest& Message);

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_NCHITTEST,TWMNCHitTest,WMNCHitTest);

END_MESSAGE_MAP(TForm);

然后,CPP文件中加入下面的函数即可,

MESSAGE void TForm1::WMNCHitTest(TWMNCHitTest& Msg)

{

TForm::Dispatch(&Msg);

if(Msg.Result==HTCLIENT)

Msg.Result=HTCAPTION;

//TODO: Add your source code here

}

方法二,重载WndProc函数。

在public声明中加入如下的函数声明。

void __fastcall MyWndProc(Messages::TMessage &Message);

在FORM的构造函数中加入一句,

WindowProc=MyWndProc;

然后在CPP中加入该函数的实现代码。

void __fastcall TForm1::MyWndProc(Messages::TMessage &Message)

{

TForm1::WndProc(Message);

if(Message.Result==HTCLIENT)

Message.Result = HTCAPTION;

}

方法三,同样也是重载WndProc函数。

只是在实现函数的代码中,用了比较巧妙的方法,

即:

void __fastcall TForm1::MyWndProc(Messages::TMessage &Message)

{

if(Message.Msg ==WM_LBUTTONDOWN)

{

ReleaseCapture();

Perform(WM_SYSCOMMAND, 0xF017, 0);

}

}

方法四,用鼠标事件来实现。

即在FORM的MouseDown事件中加入如下的代码:

if(Button == mbLeft)

{

ReleaseCapture();

Perform(WM_SYSCOMMAND, 0xF017, 0);

}

// 这个方法也是最简单的。。:)

//************************************

最后,记得添加一个关闭按钮哦,不然的话…………

(呵呵,只能在下面的任务栏中按右键实现罢了)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航