异型窗体设计

在Windows中有时因为需要需创建一个异形窗体,我们可以利用Windows API函数SetWindowRgn()达到目的,在Window单元中它是这样声明的:

int SetWindowRgn(
HWND hWnd, // 要改变窗口的句柄  
HRGN hRgn, // 窗口的显示区域  
BOOL bRedraw //指明窗口在被改变显示区域之后是否需要重绘(一般设为True)
);

SetWindowRgn函数能够将窗口设定成任意形状。现在我们来建立一个小太阳的窗体。先创建一空白窗体,没置窗体的Color属性为clRed(红色),BorderStyle为:bsNone(去掉标题栏).在FormCreate事件中添加如下代码:

procedure TForm1.FormCreate(Sender: TObject);
var
hRgn:LongInt;
begin
//建立一圆形窗体,如要创建其他形状的窗体,只需调用不同的建立区域的函数
hRgn:=CreateRoundRectRgn(0,0,200,200,200,200);
SetWindowRgn(Handle,hRgn,True);
end;

 

 

现在我们再添加代码实现无标题窗体的移动,这里我们要拦截WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的。当在客户区按下Mouse时,我们欺骗Windows认为是标题栏被按下:

 

procedure TForm1.WMNcHitTest(var Msg: TWmNcHitTest);message WM_NCHITTEST;
begin
inherited;

//如果Mouse按下是窗体的客户区,将值赋为标题区
if (Msg.Result=HTClient) then
Msg.Result:=HTCaption;
end;


 

这样我们就实现了无标题的异常窗体的创建及移动问题,再加上若干码,我们就可创建一个实用的小时钟程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值