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

|