HGE窗口缩放

       HGE使用过程中,窗口大小是固定的,不能像Windows资源管理器那样,可以任意大小的伸缩。在网络上搜索了一圈之后,也没有发现有什么解决办法,但是找到了一般windows窗口伸缩的解决方案。那么只能自己动手修改HGE源码实现了。由于时间过长,源贴地址我已经找不到了,下面是我自己整理的。

 

      打开hge的源码,找到System.cpp,最后一个函数是HGE窗口的消息处理函数WindowProc,里面对一些基本的鼠标键盘响应做了处理,下面我们要自己添加消息响应,使窗口自由能够伸缩。

      我们要处理的消息一共有四个WM_SETCURSOR、WM_NCHITTEST、WM_NCLBUTTONDOWN、WM_ERASEBKGND。

      (1)WM_SETCURSOR

      这个消息,是用来更改鼠标指针的,比如在鼠标移到窗口的边缘指针变为<->这种形状,提示可以伸缩。消息参数我们用到lParam里低位的nHitTest,这是个鼠标点击测试代码(Mouse Hit-Test Codes)。

      这个消息的处理,我们只需要判断nHitTest的值是边缘的情况下鼠标更换为响应方向的双箭头指针,其他情况下更换为箭头指针即可。关于nHitTest的取值,百度或者MSDN。

         最后需要返回TRUE以防止系统的默认处理。
    return TRUE;

      (2)WM_NCHITTEST

      这个消息是用来告诉窗口,鼠标存在于窗口的什么部分,在这个消息里,我们需要判断窗口的边缘,并返回响应的值即可。

      (3)WM_NCLBUTTONDOWN

      在这个消息里,需要通知窗口即将开始伸缩。我们要做的就是,从wParam中获取nHitTest并根据它的值判断当前鼠标正处于哪个边界,然后根据鼠标确定消息参数,并发送WM_SYSCOMMAND消息。

       (4)WM_ERASEBKGND

      实际上,上面几个消息已经能够完成窗口缩放了,但是会出现界面闪烁的情况,所以我们需要处理WM_ERASEBKGND消息,防止Windows自己重绘(对这个消息原理不太明白的童鞋请百度)。

      直接return TRUE即可。

       编译hge.dll,替换原有的dll之后,HGE窗口可以自身支持动态缩放了。

 

      本想本篇写点自己的心得体会,可是写完之后,发现大多数都是别人的东西,只有最有一个WM_ERASEBKGND是我在实际使用过程中解决的,唉,写技术文章不容易啊。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值