zoukankan      html  css  js  c++  java
  • WINDOWS MOIBLE 透明控件思路

    首先有关UI的东西有几点建议,

    一尽量不要使用D3D,因为D3D基本上不被很多的机型甚至是许多主流的SP机型所支持,所以这很有可能让您的UI不能在很多机型上被支持.

    二在.NET平台上实现透明的效果很有难度,原因有以下几方面

    由于.NET的GDI+的速度本身就不快,而且还要P/INVOKE一系列的API.按照我的反复实验.在实现透明有可能,但是防卡闪烁与拖动效果基本上是不可监得.如果还要一个比较快的刷新速度的话,SP的平台上基本上是别想了.

    下面说一下,实现透明控件的基本思路,由于具体的代码由于涉密的关系实在是不方便贴出来说一下大体的思路.

    下面进入正文.

    1.不管您是用WTL框架(不推荐MFC由于不通用,很多厂商都不把MFC做为组件定制到WM当中去),还是其它什么框架,(纯WIN32肯定能实现但是很挑战).首先用观察者模式来进行事件监听.

    2.用组合封装LAYOUT,一定要做这一步,如果不把LAYOUT组合的方式实现的话,代码修改是相当相当复杂的事情.让LAYOUT类去根据屏幕大小计算机控件的位置和大小,并把需要更新的区别INVALID掉.

    3.新建一个ITEM类,注意这些ITEM一般来说不要做成WINDOW否则速度和刷新都有问题,只需要存TEXT,和ICON,和RECT的以及FOCUSED就OK了.一般来讲在初始化的时候把ITEM传给LAYOUT去计算位置,在RESIZE的时候重新计算位置.另外根据触笔点击的位置去和各个ITEM的位置去计算到底是应该触发什么事件.

    4.利用API APLABLEND(@混合函数)把那些ITEM的画到屏幕上.

    三.关于去闪的方法

    一使用双缓存就是先往BITMAP上画,再画到屏幕上.这个比较常规.

    二建议在支持拖动的时候不要整体刷新屏幕,通过LAYOUT把需要更新的rect INVALID掉就OK了.

    恩,具体的代码并不方向贴出.但是如果大家有自己的观点欢迎多多交流.另外这里需要您对设计模式比较有了解.如果您不太了解建议您至少先看看组合模式,工厂模式,和观察者模式:)

  • 相关阅读:
    Selenium中解决输入法导致sendKeys输入内容与预期不一致的问题
    java代码中启动exe程序最简单的方法
    安装node.js
    安装MongoDB流程。
    阿里云RocketMQ定时/延迟消息队列实现
    Camunda工作流引擎简单入门
    因是子静坐养生汇编PDF下载-蒋维乔
    倪海厦天纪系列之天机道
    倪海厦天纪系列之地脉道
    张志顺老道长八部金刚功长寿功PDF下载
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2458398.html
Copyright © 2011-2022 走看看