厦门服装商城网站建设网页设计与制作实训报告2000字

张小明 2025/12/28 17:01:34
厦门服装商城网站建设,网页设计与制作实训报告2000字,企业文化墙设计图,WordPress全站广告私信#xff0c;有看过上一篇的朋友说想了解Winform相关内容#xff0c;感谢建议#xff0c;因为因此稍作回忆后就想稍作一些记录和对比。最早的时候TDS文件搜索这款工具是用Winform实现的#xff0c;最早版本是4.72的Winform#xff0c;后来变成了net8。当时有想过改WPF有看过上一篇的朋友说想了解Winform相关内容感谢建议因为因此稍作回忆后就想稍作一些记录和对比。最早的时候TDS文件搜索这款工具是用Winform实现的最早版本是4.72的Winform后来变成了net8。当时有想过改WPF但一直感觉必要性不大。直到后来net8开始尝试了avalonia才觉得有了些必要对界面及一些逻辑进行了重写。个人看来Winform开发速度快UI资源占用少界面响应也快而且本身的开发框架与windows系统功能兼容性很高不少效果都能通过黑科技般的操作实现。为了追求高画质/自由度,可能不得不用Avalonia UI这时很多习惯了的处理都需要重新找解决方案。尽管Avalonia类似WPF但很多语法细节差异还较大学习资料相对较少如果没有ai辅助刚入门甚至会有无从下手的感觉。而且Avalonia开发要从sdk开始安装开发界面也没法直观拖拉拽调试开发热更新需要适应。AVALONIA WINFORM尽管用了Avalonia但对Winform还是很喜欢的给了很多C#程序员一开始写代码的动力也是快速测试想法的首要选择。因此呢这里我把一些在tds这个软件中winform和avalonia相关实现的差异和走过的坑简单分享一下。Winform版本的代码也全部开源推送仓库了关注公众号发送tds消息自取。如果有仍在用Winform想实现特殊效果的或者有想尝试下Avalonia的可以参考。我们将分为五个TDS开发过程中的实例对Windows操作系统上的Winform和Avalonia两者实现相同的功能进行对比分别是系统消息接收无标题栏/边框窗体的窗体移动无标题栏/边框下的窗体尺寸改变二、系统消息接收在windows操作系统下响应系统级别快捷键响应最高效的实现自然是RegisterHotKey。当程序注册成功一个热键后用户按下了热键操作系统会向你的程序窗体局部发送一个标准的系统消息。注册热键直接调用系统api就可以了但是如何拿到消息呢[System.Runtime.InteropServices.DllImport(user32.dll)]public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint keyValue, Keys vk);2.1 Winform的消息循环Winform拿到消息很简单在Form类下面重写WndProc函数即可通过判定Message的值即可实现响应功能的触发。这个函数是不断触发的他不光处理按键还处理其他各种各样的消息因此写功能的时候一定要考虑到代码的执行效率。protected override void WndProc(ref Message m){switch (m.Msg){case 0x0312:switch (m.WParam.ToString()) //处理热键消息id{case 8617:autoshoworhide(); //窗口隐藏或显现break;}base.WndProc(ref m);break;// ....其他消息的处理default:base.WndProc(ref m);break;}}2.2 Avalonia的消息循环Avalonia中一开始尝试过用非阻塞式系统索API函数 PeekMessage尽管同样能拿到系统消息但由于各种原因总是会出现丢消息以及界面卡顿的情况。知道后来发现了可通过Avalonia.Controls下面的Win32Properties.AddWndProcHookCallback函数。Win32Properties.AddWndProcHookCallback(this, WndProc)需要将本窗体对象Avalonia.controls.Window也就是this和回调函数WndProc传入即可像Winform一样流畅处理系统消息了。private IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam, ref bool handled){// If not a hotkey message or the global hotkey for showing the windowif ((int)wParam GlobalHotkey.HotKeyId){AutoShowOrHide();}// ....其他消息的处理return IntPtr.Zero;}三、无标题栏/边框窗体的窗体移动无界面下没有标题栏了那么窗体的移动需要通过鼠标与控件的交互来实现。比如说点击控件后窗体跟着鼠标移动被鼠标拖拽等。可能大家会觉得这个实现很难需要计算各种鼠标与窗口位置控制边界等...Wait wait... 如果不亲自试一试的话永远也不会知道真正做起来有多简单。3.1 Winform的欺骗在Winform下的实现只需在某个控件的mouseDown事件中加入2行代码即可。他的原理其实是欺骗Windows告诉操作系统你鼠标点击的是程序的标题栏然后程序就可以像拖拽标题栏一样随鼠标移动了public const int WM_SYSCOMMAND 0x0112;public const int SC_MOVE 0xF010;public const int HTCAPTION 0x0002; //标题栏 其他对应的功能取值可参考 https://learn.microsoft.com/zh-cn/windows/win32/inputdev/wm-nchittest[DllImport(user32.dll)]public static extern bool ReleaseCapture();[DllImport(user32.dll)]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);private void Keywords_MouseDown(object sender, MouseEventArgs e) //某个控件的鼠标按下事件{//移动窗体ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE HTCAPTION, 0);}3.2 Avalonia实现可能是为了适配触控操作Avalonia无界面移动实现更简单在控件的PointerPressedEvent事件下直接调用自带方法this.BeginMoveDrag, 将PointerPressedEventArgs传入即可完成与Winform一样的效果。private void Keywords_MouseDown(object sender, PointerPressedEventArgs e){this.BeginMoveDrag(e);}四、无标题栏/边框下的窗体尺寸改变这个实现主要是考虑Winform窗体设置FormBorderStyle为None当标题栏消失时往往边框也消失了边框移动也没有了。4.1 Winform的再次欺骗仍然是在操作系统消息的处理循环中通过改写 WM_NCHITTEST 消息 (0x0084)欺骗系统鼠标在窗体的哪个区域并触发操作系统默认的机制。// 下面的常量是为了模拟有标题栏窗体时触发调整尺寸的上下左右四条边和四个角的状态标识const int HTLEFT 10;const int HTRIGHT 11;const int HTTOP 12;const int HTTOPLEFT 13;const int HTTOPRIGHT 14;const int HTBOTTOM 15;const int HTBOTTOMLEFT 0x10;const int HTBOTTOMRIGHT 17;protected override void WndProc(ref Message m){switch (m.Msg){case 0x0084: // WM_NCHITTESTbase.WndProc(ref m); // 默认消息不干扰Point vPoint new Point((int)m.LParam 0xFFFF,(int)m.LParam 16 0xFFFF);vPoint PointToClient(vPoint);if (vPoint.X 5) //计算容差然后触发后面类似...if (vPoint.Y 5)m.Result (IntPtr)HTTOPLEFT;else if (vPoint.Y ClientSize.Height - 5)m.Result (IntPtr)HTBOTTOMLEFT;elsem.Result (IntPtr)HTLEFT;else if (vPoint.X ClientSize.Width - 5)if (vPoint.Y 5)m.Result (IntPtr)HTTOPRIGHT;else if (vPoint.Y ClientSize.Height - 5)m.Result (IntPtr)HTBOTTOMRIGHT;elsem.Result (IntPtr)HTRIGHT;else if (vPoint.Y 5)m.Result (IntPtr)HTTOP;else if (vPoint.Y ClientSize.Height - 5)m.Result (IntPtr)HTBOTTOM;break;default:base.WndProc(ref m);break;}}4.2 Avalonia实现直接在xml中配置将以下三个参数添加到已有的配置中即可。WindowExtendClientAreaToDecorationsHintTrueExtendClientAreaChromeHintsNoChromeExtendClientAreaTitleBarHeightHint-1
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

买了域名怎么做自己的网站石家庄企业商城网站建设

课题介绍 基于 SpringBoot 的高校党员管理系统,直击 “高校党员信息管理分散、发展流程不规范、组织生活记录碎片化、考核评价无数据支撑” 的核心痛点,依托 SpringBoot 轻量级框架优势与高校党建场景适配能力,构建 “党员档案 发展管控 组…

张小明 2025/12/28 17:01:34 网站建设

买了域名如何建立网站wordpress知更鸟菜单修改

英雄联盟皮肤修改神器R3nzSkin:三步解锁全英雄付费皮肤 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL).Everyone is welcome to help improve it. 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 还在为心仪的皮肤价格望而却…

张小明 2025/12/28 17:01:00 网站建设

求一个dw做的网站教育网站建设需求文档

第一章:跨领域 Agent 的协同机制在复杂系统中,不同领域的智能体(Agent)需通过高效协同完成任务。这种协同不仅涉及通信协议的统一,还包括目标对齐、资源调度与状态同步等关键问题。为实现跨领域协作,通常采…

张小明 2025/12/28 17:00:26 网站建设

长沙seo网站建设福州百度分公司

简介 LangChain 1.0作为高层框架,专注于快速原型设计和LLM应用部署;LangGraph 1.0作为底层编排引擎,擅长持久化、有状态的智能体工作流。LangChain适合简单聊天机器人、RAG管道;LangGraph适合长运行任务、多智能体系统。两者可结合…

张小明 2025/12/28 16:59:52 网站建设

电商网站建设 平台医疗 企业 网站制作

引言:当TPS成为战场 在以太坊「世界计算机」的愿景遭遇性能瓶颈后,新公链们正在上演一场静默的技术革命。比特鹰观察到,2024年区块链世界的军备竞赛已聚焦于共识算法层面——这些支撑着区块链心脏跳动的底层机制,正在经历从"…

张小明 2025/12/28 16:59:16 网站建设

青岛做网站建设网页搭建流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个企业级TigerVNC部署指南生成器。输入企业规模、网络拓扑和安全要求后,自动输出完整的部署方案,包括:1) 分步骤的安装指南 2) 防火墙规则…

张小明 2025/12/28 16:58:43 网站建设