zoukankan      html  css  js  c++  java
  • 窗口视图

      大概大多c#入门都是从winForm的开始的吧,我正是这样的。微软挺照顾人的,入门倒是相比其他容易的(连后来的web都怕我们搞不来,来个webForm)。不自诩如何精通,过手的面试者中到是非常多自诩精通窗口的,贴图、重绘大概也就是这群人中的极限。孰不知让那些搞MFC,win api的人情何以堪?

      ——还是老问题“如何绘制一个非矩形的窗体”。(继续上面的话,搞mfc、win api的飘过了)

      大多能回答到贴图之类的。

      对于非api的程序员们,很多没有Window管理的概念。既然可以有那么那么多窗口,必然有集合,有集合必然有管理。何况乎我们总是能看到一个微软的叫“句柄”的东西,那说明必然是被管理起来了(Windows如此,其他的像Linux也都类似,老话类似往往细节不同而已)。系统每给出一个窗口,应当理解为一个虚拟屏幕(下面老叫XXDC,微软的名称是比较准确的)。

      既然得到了“屏幕”,可以往屏幕可以刷入buff,根据硬件属性可以写入不同色彩点了(有兴趣的话看看广告牌那种写入)。点当然很麻烦,何况乎再解析一个ttf出来,再绘制,真是很难很麻烦,还好有gdi+,System.Drawing囊括很多这些有用的东西。做个编辑器吧,我擦,gdi+是不是还是太麻烦,输入是问题,字体测量...都是麻烦事,微软由此做了一堆堆的Control,具体的继承关系不能列举了。从层次关系看比较复杂繁琐,比较各种实现层次,这个我倒是比较倾向Flash的简洁(所以我的游戏也很简洁,不过事件层等等,别个的类库处理的问题要多得多)。至于这些默认的控件的长相问题,反编译一下win Form就清楚了,MFC倒是清楚的标识了Resource。

      虚拟了屏幕的好处就是...dx也可以来。不知道注意没,高版本的ie取词词典无法工作,我猜想可能通过句柄取到的控件值(未有深究过这个接口),这下好了全dx绘制的,新的东西没得这些东西,老接口支持不了。话说到接口,毕竟跑在win上基本上得靠win api,c#底底下还得靠api。现在来补充回答一下序中的问题,调用api的裁剪函数。鄙人认为winForm(乃至c#)的能用和用好、精通不是相等和近似关系。未毕业之际(我学的c#,自学过c++,那会儿实习MFC),曾到那会儿的索贝实习,带领我的(这位也得尊称师傅,鄙人有位两个师傅,一个是这位技术上的,还有一位是产品上的,他们让我看到高度),让我领略到高度。这是一种什么样的熟练,我写的代码在没反应过来的时候,师傅坐下啪啪啪改完了,至于什么什么api烂熟的程度...可以体会这些简单的逻辑在他那已经不是逻辑。

      话说三维的东西 —— 

      —— 二维的东西点构成面,很容易理解。大多抽象一个屏幕或者画板之类的。三维似乎不行了,聪明的人类用摄像机的模型抽象了一套接口给你用,诸如有名的Directx、OpenGL。

      计算机硬件的进化中,各个部件也变得强大,许多外设有了独立处理的能力,而且越来越强大。显卡作为屏幕的辅助也不例外。为了增强各种图形图像处理的速度,显卡提供了这部分指令。由此我们经常可以看到有的软件中的硬件加速参数。of course,GDI+也变强大了,能支持硬件加速。

      话题转回去,像DX这东西是直接支持显卡的,如果没有那么他通过虚拟化技术来获取支持。如果计算没有这种硬件支持,弄个但凡有那么点计算量的着色语言,完了,计算机基本消耗殆尽。(如:游戏中大鱼吃小鱼的波纹,得用生成的图片来获得,这样主要消耗到内存上,内存反正是很便宜的)。基元也跟GDI不同了,由基本的着色器构成。想自己画个圆形倒是比前者麻烦了。

      小聊了一下视图中的界面,还有一大堆的事件。Windows中,系统虚拟了各种设备,便于了不同类型的同种设备的实现,同时系统将设备的各种中断信号处理成消息,系统窗口管理然后分发至各个地方(比如常规的编辑输入,会只发送给当前焦点窗口)。这是一大堆事,还有一堆冒泡处理,最终完成整个消息。

      消息和事件的关系——我们还是在窗口中看看代码。MFC和API中是必然要写的,而且也很容易 看的见。winForm中函数名字也类似有个叫winProc的函数,里面充斥着消息处理,这个是比较庞大的,看看消息类型种类可以想像。然后c#中通过事件委托处理,对外暴露给开发人员这些常用的事件。

      WinForm的类结构繁琐复杂,对外观的设计需要代码人员通过大量的编码或者贴图解决。布局的概念比较弱,毕竟当事时的屏幕还比较单一。Flash的类结构设计相比简单有效,并且代码有Builder,设计有Flash,在Flash中能设计出各种漂亮而且能动的玩意儿(我做游戏的时候就拿这玩意儿当IDE不是,极好的解决了设计上的问题)。何况乎Flash占了多少江山,微软推出了WPF及Silverlight。不像winForm基于GDI+的,这个的设计就更为复杂了。有的人喜欢依赖属性,我是很讨厌这种东西,xaml不利于代码的维护(一些特殊代码写法大概是不能够支持的,有的支持,但却要显示错误)且不说,来来回回的类型转换(值类型),必然装箱拆箱开销是巨大的。

      ——话说到这,不得不提及html。各种视图,IOS,Android,Windows,html的和js的带来的不靠谱的纠结,路在何方?是否html6、7直接上虚拟机标准,然后像WPF和Silverlight这样分个系统内和系统外的子集标准,让编码从新回归代码模式和编译模式。这样也不至于像html5还需要为直播而纠结嘛,编码人员也不用挨个碰瓷式的测试浏览器。

      WinForm实践推荐一下:Paway的窗口,关于作者????原作者写了QQ和360的界面Demo,我在这个基础上做了一些东西,贴一个Demo版的

      

      除了背景贴图,其余为(各个子)控件绘制。

      含原作者完整程序集Code地址:http://yunpan.cn/cQdeu9ucRvzJg  访问密码 fd59

  • 相关阅读:
    字符串排序
    java正则表达式教程
    Java Map
    统计字符串中出现次数最多的字母的次数,如果有多个重复的,都求出
    斐波那契数列非递归算法(fibonacci)
    CUDA还未产出,又要出北洋多元统计习题集
    R的GPUTOOLS不能再windows上用
    泪奔,配好了bioconductor环境
    CUDA笔记13
    CUDA笔记12
  • 原文地址:https://www.cnblogs.com/huapiaoshuiliuxi/p/4565550.html
Copyright © 2011-2022 走看看