标题:我编写的定时柜(含桌面日历),给各位老师交作业.
只看楼主
kongxc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:104
注 册:2007-9-30
得分:0 
谢谢吹老师的指教,与我测试的不同点,就是在表单1中加入了焦点指向表单2的SetFocus函数,我太粗心了..
2014-07-07 08:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
因上层有“穿透”的地方,SetFocus()使焦点保持在上层。
2014-07-07 09:33
kongxc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:104
注 册:2007-9-30
得分:0 
我现在把改后的软件发上来,虽然桌面日历已改成透明可调型,但有个问题不知能不能解决.就是这种形式的窗体,它的控件操作的灵敏度明显降低,老师请你试试就知道了,在日期上双击弹出菜单,有时一次可以,有时要操作许多次才能弹出菜单.初始状态是全透明的(只有一个主表单,没有背景表单,因它比起双表单来说,灵敏度要高些.),只有调整背景透明程度时,才会调用背景表单,但就是这种单表单时,它的标签控件灵敏度也较差,你与前一版本比较就知道了...这种现象不知道能不能改进,请老师们指教.
定时柜.zip (3.34 MB)
2014-07-10 17:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
控件上的“透明背景色”部分也具有“穿透”力,鼠标点击到这部分地方时实质是点击下层的地方,控件的背景色(BackColor)不要与“透明背景色”一致就不会被“穿透”。若将控件的背景色(BackColor)设置成“透明度”效果的色,看起来也像透明。
2014-07-10 21:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
* 选择窗口透明背景上一点取色样
DECLARE LONG GetDC IN user32 LONG
DECLARE LONG GetPixel IN gdi32 LONG, LONG, LONG

* 初始状态,如设置Label1的BackColor
PROCEDURE Activate   
    IF EMPTY(this.Tag)
        this.Tag = "1"
        SetLayeredWindowAttributes(this.HWnd, this.BackColor, 0, 1)
        INKEY(0.1)
        thisform.Label1.BackColor = GetPixel(GetDC(0), this.Left + 10, this.Top + 40)
   ENDIF
ENDPROC
2014-07-10 22:48
kongxc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:104
注 册:2007-9-30
得分:0 
谢谢吹老师教导,学到了新的知识,我再修改测试,争取达到满意的效果..
2014-07-11 08:20
kongxc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:104
注 册:2007-9-30
得分:0 
我按吹老师教的方法,取得透明窗背景色(透明色),然后将Container控件设为不透明的进行测试,效果是:
1. 当控件背景色与透明色一致时,虽然双击灵敏度有所提高,但常有双击无效的情况,达不到满意效果.
2. 当控件背景色改为非透明色(如黄色,灰色等)时,其灵敏度与正常表单效果基本一致,能达到满意效果.
这两种情况测试,均为不透明控件,仅仅修改背景颜色,为什么会出现这种情况? 难道它的穿透性与透明窗口背景色相关.
2014-07-11 09:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
怪招怪模样,按理只要控件上的色(背景或前景)不与SetLayeredWindowAttributes()的第二个参数一致就无穿透。
2014-07-11 10:12
kongxc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:104
注 册:2007-9-30
得分:0 
这几天通过不断改进和测试,已改进得较为完善了,现将最新版发上来,供老师们检验,并请指导. 我也将改进的经验汇报一下,供大家参考:(均使用双表单透明重叠方法,存在操作事件响应穿透情况.)
1.主表单控件使用不透明,背景采用透明色时,存在以下问题:
(1)当主表单控件背景与透明背景一致无视觉差时,测试发现控件对事件的反应程度与控件背景透明时的灵敏度无差异,仍然存在强穿透性. 只有当控件背景与透明背景存在色差时,才会保持控件事件的正常响应程度.
(2)在背景透明表单,透明度大于100时,即使取透明背景色作为控件背景色,仍然存在较大色差,影响了美观度.可能此时存在色素重叠色的情形.
由于存在以上问题,我放弃了此方法的应用.经测试摸索找到了以下较为实用的方法.
2.利用透明背景的穿透性,从背景表单入手,来满足事件响应的灵敏度.(此方法的灵敏度与正常表单无异)
  仍在透明控件的基础上,对主表单基本不作修改,只在背景表单的双击事件上同步调用菜单程序,并在其鼠标移动事件上区别鼠标是否在日期控件范围内..使用了标记开关来防止菜单反复弹出..为确保事件响应的灵敏度,背景表单透明度应大于5为宜.
定时柜.zip (3.35 MB)
2014-07-15 10:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-433575-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023038 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved