作者:红客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);
}
// 这个方法也是最简单的。。:)
//************************************
最后,记得添加一个关闭按钮哦,不然的话…………
(呵呵,只能在下面的任务栏中按右键实现罢了)