当前位置: 首页 > news >正文

服装网站建设什么公司好特色软件app推荐

服装网站建设什么公司好,特色软件app推荐,设计公司做网站有用吗,如何建设文化企业网站wpf截屏系列 第一章 使用GDI实现截屏 第二章 制作截屏框#xff08;本章#xff09; ______第一节 使用DockPanel制作截屏框 ______第二节 利用Clip属性实现截屏框(本节) 第三章 实现截屏框热键截屏 第四章 实现截屏框实时截屏 第五章 使用ffmpeg命令行实现录屏 文章目录 wp…wpf截屏系列 第一章 使用GDI实现截屏 第二章 制作截屏框本章 ______第一节 使用DockPanel制作截屏框 ______第二节 利用Clip属性实现截屏框(本节) 第三章 实现截屏框热键截屏 第四章 实现截屏框实时截屏 第五章 使用ffmpeg命令行实现录屏 文章目录 wpf截屏系列前言一、实现步骤1、Clip穿透2、子控件同步Clip区域3、子控件实现拖动4、子控件实现拖动调整大小5、鼠标事件传递 二、完整代码1、自行整合2、简化的实现 三、效果预览1、矩形框2、圆形框 总结 前言 第一节已经实现过截屏框实现方法相对简单也仅支持矩形框。最近使用wpf的clip时发现了一种用法可以实现穿透效果。那显然我们基于clip也能实现截屏窗口而且支持任意形状。 一、实现步骤 1、Clip穿透 使用GeometryGroup 且FillRule为EvenOdd就可以做出穿透的效果。 GridGrid Width200 Height200 BackgroundSeaGreen Grid.ClipGeometryGroup FillRuleEvenOdd!--底下的rect必须保持和容器大小一致--RectangleGeometry Rect0 0 200 200 /!--上层形状即为穿透区域--RectangleGeometry x:NameforeRect Rect0 0 200 200 RadiusX100 RadiusY100//GeometryGroup/Grid.Clip/GridTextBlock HorizontalAlignmentCenter VerticalAlignmentCenter Text Clip区域会穿透 ForegroundBlack/TextBlock /Grid2、子控件同步Clip区域 单纯Clip无法实现拖动和改变大小尤其是改变大小直接通过鼠标事件结合clip也不好实现。比较简单的方法是定义一个子控件子控件的位置和大小与Clip关联这样只要实现子控件的拖动和调整大小功能就能控制Clip区域了。 通过LayoutUpdated事件就可以实时同步Clip区域。子控件就相当于截屏框。 Border x:NameclipBorder LayoutUpdatedBorder_LayoutUpdated下列代码的GetPosition是自定义拓展方法自己实现获取控件坐标即可。 private void Border_LayoutUpdated(object sender, EventArgs e) {//截屏框与上层clip rect保持一致foreRect.Rect new Rect(clipBorder.GetPosition(), new Size(clipBorder.ActualWidth, clipBorder.ActualHeight));; }3、子控件实现拖动 参考《wpf拖动系列》根据不同的容器选择不同实现直接拷贝网页代码此处使用第六章的功能简化实现。 Border x:NameclipBorder ac:Move.IsDragMoveableTrue 4、子控件实现拖动调整大小 参考《wpf拖动调整大小系列》根据不同的容器选择不同实现直接拷贝网页代码此处使用第五章的功能简化实现。 Border x:NameclipBorder ac:Resize.IsDragResizeableTrue 5、鼠标事件传递 由于使用了Clip穿透穿透区域的子控件是无法响应鼠标的有幸的是穿透区域不会影响装饰层所以我们需要在子控件里定义一个装饰器用于捕获鼠标消息。我们通过《wpf 附加属性实现界面上定义装饰器》简化装饰器的定义。 Border x:NameclipBorder!--截屏框的装饰层用于捕获鼠标消息--local:AdornerHelper.AdornerContentGrid MouseDownGrid_MouseDown BackgroundTransparent/Grid/local:AdornerHelper.AdornerContent /Borderprivate void Grid_MouseDown(object sender, MouseButtonEventArgs e) { //事件转移触发拖动clipBorder.RaiseEvent(e); }二、完整代码 1、自行整合 通过上述步骤将《wpf拖动系列》、《wpf拖动调整大小系列》、《wpf 附加属性实现界面上定义装饰器》网页上的代码对应容器类型整合到一起即可实现所有功能。 2、简化的实现 下列是使用wpf拖动系列第六章和wpf拖动调整大小系列第五章的实现需要下载。 xaml Window x:ClassWpfClip.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WpfClipxmlns:acclr-namespace:ACmc:IgnorabledWindowStyleNoneBackgroundTransparentResizeModeNoResizeTopmostTrueWindowStateMaximizedTitleMainWindow Height450 Width800WindowChrome.WindowChromeWindowChrome GlassFrameThickness-1 CaptionHeight0 //WindowChrome.WindowChrome Grid x:Namegrid Background#80000000 LayoutUpdatedGrid_LayoutUpdatedGrid.Clip!--利用clip实现穿透--GeometryGroup FillRuleEvenOddRectangleGeometry x:NamebackRect/!--实际的截屏形状--RectangleGeometry x:NameforeRect //GeometryGroup/Grid.Clip!--截屏框--Border x:NameclipBorder Width200 Height200 ac:Move.IsDragMoveableTrue ac:Resize.IsResizeableTrue LayoutUpdatedBorder_LayoutUpdatedac:Resize.ThumbsTemplateControlTemplateBorder Width16 Height16 Background Green BorderBrushWhite BorderThickness2 CornerRadius8/Border/ControlTemplate/ac:Resize.ThumbsTemplateac:Resize.ThumbsPanelItemsPanelTemplateGrid Margin-8/Grid/ItemsPanelTemplate/ac:Resize.ThumbsPanel!--截屏框的装饰层用于捕获鼠标消息--local:AdornerHelper.AdornerContentGrid MouseDownGrid_MouseDown BackgroundTransparent/Grid/local:AdornerHelper.AdornerContent/Border/Grid /Windowcs using AC; using System.Windows; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; namespace WpfClip {/// summary/// Interaction logic for MainWindow.xaml/// /summarypublic partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void Grid_LayoutUpdated(object sender, EventArgs e){//确保底层clip rect与容器大小相同backRect.Rectnew Rect(0,0, grid.ActualWidth, grid.ActualHeight);}private void Border_LayoutUpdated(object sender, EventArgs e){//截屏框与上层clip rect保持一致foreRect.Rect new Rect(clipBorder.GetPosition(), new Size(clipBorder.ActualWidth, clipBorder.ActualHeight));//圆形效果去掉则是矩形foreRect.RadiusX clipBorder.Width/2;foreRect.RadiusY clipBorder.Height/2;}private void Grid_MouseDown(object sender, MouseButtonEventArgs e){ //事件转移触发拖动clipBorder.RaiseEvent(e);}}internal class AdornerHelper{public static UIElement GetAdornerContent(DependencyObject obj){return (UIElement)obj.GetValue(AdornerContent);}public static void SetAdornerContent(DependencyObject obj, UIElement value){obj.SetValue(AdornerContent, value);}// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...public static readonly DependencyProperty AdornerContent DependencyProperty.RegisterAttached(AdornerContent, typeof(UIElement), typeof(AdornerHelper), new PropertyMetadata(null, (d, e) {var c d as FrameworkElement;if (c null)return;var adronerContent e.NewValue as UIElement;if (!c.IsLoaded){if (adronerContent ! null){RoutedEventHandler l null;l (s, E) {var content GetAdornerContent(c);if (content ! null){var layer AdornerLayer.GetAdornerLayer(c);if (layer null)throw new Exception(获取控件装饰层失败控件可能没有装饰层);layer.Add(new NormalAdorner((UIElement)c, (UIElement)e.NewValue));}c.Loaded - l;};c.Loaded l;}}else{var layer AdornerLayer.GetAdornerLayer(d as Visual);if (layer null)throw new Exception(获取控件装饰层失败控件可能没有装饰层);if (e.OldValue ! null){var adorners layer.GetAdorners(c);foreach (var i in adorners){if (i is NormalAdorner){var na i as NormalAdorner;if (na.Child e.OldValue){layer.Remove(i);break;}}}}if (adronerContent ! null){layer.Add(new NormalAdorner((UIElement)c, (UIElement)e.NewValue));}}}));class NormalAdorner : Adorner{UIElement _child;/// summary/// 构造方法/// /summary/// param nameadornedElement被添加装饰器的元素/param/// param namechild放到装饰器中的元素/parampublic NormalAdorner(UIElement adornedElement, UIElement child) : base(adornedElement){_child child;AddVisualChild(child);}public UIElement Child { get { return _child; } }protected override Visual GetVisualChild(int index){return _child;}protected override int VisualChildrenCount{get{return 1;}}protected override Size ArrangeOverride(Size finalSize){_child.Arrange(new Rect(new Point(0, 0), finalSize));return finalSize;}}} }三、效果预览 我们可以通过设置foreRect的类型改变形状当然Border_LayoutUpdated的逻辑也要相应的修改。 1、矩形框 2、圆形框 总结 以上就是今天要讲的内容有了之前的基础本文实现起来相对容易当前目前的也是比较初步的功能但灵活性是比DockPanel要好的尤其是支持任意形状这样就有利于后期划线截屏的实现了。
http://www.pierceye.com/news/815494/

相关文章:

  • 网站建设响应技术wordpress502
  • 开个捕鱼网站怎么做网络销售面试问题有哪些
  • 外国纪录片网站机场建设海外seo是什么
  • 一个服务器做多个网站微信商城和网站建设
  • 网站的基本类型地推平台
  • 简单的企业小网站网页统计代码大全
  • 中国手机网站建设公司大气网站建设
  • 国内建网站费用青岛网站建设公司排行
  • 石台做网站策略网页游戏排行榜
  • 注册网站怎么做网站深圳网站设计公司怎么样
  • 网站备案后有什么好处个人主页网页设计
  • 网站搭建上海wordpress主题范例
  • 网站内容建设出现的问题马鞍山人才网
  • 上海正规做网站公司电话演示 又一个wordpress站点
  • 建设银行网站特色完整网站开发视频教程
  • 株洲做网站渠道电话设计师培训生招聘
  • 四川阿坝建设招标网站wordpress调整文章编辑界面
  • 福州seo计费优化设计的答案
  • 网站建设教程网什么是oa系统软件
  • 建设一个网站app需要多少钱哪个做问卷网站佣金高
  • 宁夏网站设计公司网页视频怎么下载ios
  • 滁州建设厅网站工程建设施工企业质量管理规范
  • 从事网站建设的职业wordpress 外网
  • 百度百度上海百度seo
  • 山西网站的公司广东省住房与城乡建设厅网站
  • 怎么查看网站是用什么编程语言开发的品牌软文范文
  • 能够沟通业务的网站wordpress 主题 恢复
  • 动态域名做网站在线查询企业
  • 绍兴企业网站推广建设通是什么网站
  • 网站设计制作太原抖音seo怎么做的