- 博客(192)
- 资源 (2)
- 收藏
- 关注
原创 处理LibVLCSharp.WPF鼠标点击事件
仔细观察发现,VideoView是一个内容控件,但是运行后,发现VideoView.Content是为空的,说明VideoView只是一个宿主控件而已。此时我们只需要设置一下VideoView.Content为一个面板,并设置透明度为几乎透明的状态,这样,我们能看到视频播放效果,也能对事件进行处理。在WPF里,会有事件路由机制,但是Win32里没有,所以这个事件就是直接被。但是初次尝试,发现创建钩子不成功,后面又尝试了一下,使用子窗口。因为我以前没用过VLC控件,但是最近有小伙伴问到我这个问题。
2025-03-10 11:30:04
1133
原创 WPF预览并打印FlowDocument
21 <Button Content="加载" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Height="28" Click="Button_Click"></Button>在前面的文章中,介绍过通过FixedDocument进行预览并打印。但是有时候我们可能使用的是。
2025-03-10 11:28:02
730
原创 如何获取BIOS信息
2 {// 结构类型// 该类型结构的格式化区域长度(请注意,长度取决于主板或系统支持的具体版本)// 结构句柄(0~0xFEFF范围内的数字)这里以Type 1 BIOS 系统信息为例2 // 系统信息(Type 1)SMBIOS结构的格式化区域的完整定义4 {// SMBIOS结构头SMBIOSHeader// Manufacturer字符串的编号// Product Name字符串的编号// Version字符串的编号。
2025-03-05 15:45:16
961
原创 如何在Windows下离线部署DeepSeek并以WebApi形式调用
最近这一块的话题有点火,这里也找资料学习了解了一下,分享出来。目前应该有很多公司已经通过官方的WebApi接口接入了DeepSeek。本文可以帮助你离线使用DeepSeek的WebApi,并集成到自己的程序里。文末会有示例程序。是一个开源的 AI 模型服务平台,旨在提供高效且易于使用的 AI 模型部署和管理解决方案。它结合了强大的计算能力和灵活的模型接口,使用户能够轻松构建、训练和部署自定义 AI 模型。目前支持在本地运行包括但不限于, 等模型。目前还无法选择路径,会自动安装到C盘。
2025-03-05 15:42:53
776
原创 WPF中对滚动条进行平滑滚动
11 <Button Content="普通滚动" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Click="Button_Click" Margin="-120,0,0,0"></Button>一开始我想的是通过一个循环,缓动增加Y的位置,这样就达到了动画效果。我们也可以借助WPF的Animation来做,这样效果会更好。7 // 获取选择元素的位置。11 //滚动到指定位置。
2025-02-28 23:54:07
993
原创 如何使用git的reset功能重置代码
像平常我们提交时,需要先使用git add命令,将修改的文件添加到索引文件中,然后再调用git commit 进行提交。在我前面的文章中,介绍了如何删除不想要的commit,这里的功能 就是借助git reset --soft。首先创建三次提交,分别为commit 1、commit 2、commit 3。简单来说,执行git reset,会将指定commit前面所有的commit都重置。后,可以看到在左侧的列表并不会看到任何修改,因为。,这里不做详细介绍。将分支重置,并且不保留这些分支修改的文件。
2025-02-28 23:52:44
822
原创 COM智能指针ComPtr的介绍以及使用
ComPtr是为COM而设计的智能指针。相比ATL里的CComPtr类,它有了一些提升。ComPtr会自动维护基础接口指针的引用计数,并在参考计数为零时释放接口,从而消除内存泄漏。2、开启了/clr支持的托管C++是不能使用WRL的,这时候可以使用ATL里面的CComPtr,原理和ComPtr一样,使用方法有一点小区别,可以查看。使用智能指针后,不需要再调用Release()进行释放,关于详细的引用计数,可以访问文末参考资料里的链接进行了解。1、在C++/WinRT 项目中,应该使用。与许多智能指针一样,
2025-01-10 14:02:34
779
原创 如何在C#中使用COM接口
Windows中很多功能都是通过COM实现的,有时候我们想实现一些系统功能,但是又没有直接的Win32 API代调用,就可以寻找COM接口替代。使用CsWin32生成COM接口的声明,在官方的文档中并未直接说明,我也是在一个issue中找到了实现方法。对于自动生成的类型,命名空间都不一样,但是都是在Windows.Win32命名空间下。在C++中,可以使用CoCreateInstance函数来创建COM接口的实例。],然后在结果中查找,一般会有C#的接口声明,如果没找到相关结果,可以查看方法2。
2025-01-10 13:51:36
1100
原创 WPF自定义任务栏缩略图
但是这种预览是基于窗口本身内容的,如果我们想修改这个缩略图的内容,类似网易云这样,就需要一些技术手段。参数设置的属性值的大小(以字节为单位)。当鼠标划会任务栏上的程序时,会打开一个预览窗口,可以对整个窗口内容进行预览。在后面的Windows 8/8.1/10/11系统上,都延续了这个功能。指向包含要设置的属性值的对象的指针。设置窗口管理器(DWM)非客户端呈现属性的值。窗口或选项卡的句柄。此参数指定要设置的属性,要为其设置属性值的窗口的句柄。描述要设置的值的标志,指定为。参数指向包含属性值的对象。
2025-01-03 09:26:26
1117
原创 PowerShell入门教程
什么是Powershell?MSDN上的说明是:PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言。 PowerShell 可帮助系统管理员和高级用户快速自动执行用于管理操作系统(Linux、macOS 和 Windows)和流程的任务。使用 PowerShell 命令可以从命令行管理计算机。 PowerShell 提供程序可让你访问数据存储(如注册表和证书存储),与你访问文件系统一样方便。 PowerShell 具有丰富的表达式分析器和完全开发的脚本语言。个人理解为Pow
2024-12-31 09:18:41
790
原创 WPF中的VisualState(视觉状态)
VisualState类实现了可以让控件始终处于特定的状态的功能。例如,当鼠标在控件的表面上移动时,该控件被视为处于。调用System.Windows.VisualStateManager.GoToState函数,可以指定控件的状态。在应用于控件的每个状态组中,控件始终处于每个组的一种状态。但是,控件不能处于同一组中的两种不同状态。状态分为多个组,前面提到的MouseMove状态和Normal属于。如果是自定义控件,直接将控件名换成this即可。没有特定状态的控件被视为处于。
2024-12-03 09:28:58
1357
原创 WPF从本地文件加载界面
在前面的文章中,我介绍过一种报告模板的实现思路。就是用的XAML本地加载。WPF使用XAML实现报表的一种思路(支持外部加载) - zhaotianff - 博客园在另外一篇文章中,介绍了XAML是如何被转换成对象的。WPF中的XAML是如何转换成对象的? - zhaotianff - 博客园在这篇文章中,简单介绍了InitializeComponent函数,它的内部如下:在任意一个界面的构造函数下都会调用InitializeComponent函数,也就是在InitializeC
2024-12-03 09:25:09
1059
原创 C++结构体初始化 struct= {0}、struct={} 和 struct{}的区别
后面我在学C++的时候,在初始化结构体时,都习惯了使用C++ 11里的 一致性初始化(Uniform Initialization)这里在stackoverflow上搜到一个高赞回答,做个笔记记录一下。C语言学了好多年,很多基础理论都不记得了。因为一直都是C#用得多。可以看到上面 3种常用的写法在初始化时并不能很好地进行清零操作。所以也想搞清楚这些初始化方法的区别是什么。最近在书上看到的写法是。
2024-11-29 09:23:54
913
原创 git从服务器获取最新代码
在使用Visual Studio的Pull时,界面会显示Incoming,但是无法合并到本地代码。main就是当前分支的名称。
2024-11-29 09:20:58
180
原创 git如何创建一次没有修改的commit
因为公司的打包服务器需要代码提交,才会自动进行打包,而我又没权限进行手动打包。所以最快的解决办法就是创建一次没有修改的提交。这种在实际使用中应该很难碰到,我最近刚好遇上这样一个问题。
2024-11-29 09:18:44
531
原创 如何在WPF中打印PDF文件
当用户右键单击 Shell 对象(如文件)时,Shell 会显示 (上下文) 菜单的快捷方式。此菜单包含一个命令列表,用户可以选择这些命令对项执行各种操作。这些命令也称为快捷菜单项或谓词。可以自定义快捷菜单。6 FileName = path //PDF文件路径。时,系统会到注册表寻找当前类型文件的注册程序节点下的。所使用的的PDF渲染引擎。项目的PDF查看器。当我们在创建进程时,,并执行其中的命令。
2024-11-29 09:15:34
1994
原创 C#反序列化XML时提示XML 文档(1, 1)中有错误
\r\n\r\n 200\r\n 成功\r\n";使用Utf-8编码获取字节数组,再通过调用Deserialize的重载,将字节数组转换成流传进去。看描述应该是XML格式的问题,我把XML复制到新建的控制台程序,反序列化又是可以的。在Stackoverflow上找到一个解决方案,这里分享一下。
2024-11-29 09:13:28
651
原创 如何禁用Visual Studio 2022 AI代码提示(带五角星的代码)
在Visual Studio 2019中可以通过禁用扩展来停用这一功能,但到Visual Studio 2022时,这一项功能已经变成自带功能了。在Visual Studio 2019及以后的版本中,增加了IntelliCode功能,在WPF XAML布局时,这一项功能并不是非常方便。如果不需要此功能,也可以在安装时取消钩选。功能介绍可以参考我前面的一篇文章。
2024-11-28 16:49:39
781
原创 在WPF使用Segoe MDL2字体图标库
因为是自带的字体文件,所以直接指定FontFamily即可,非常方便。任何内容控件都可以使用。以前一直用的FontAwesome字体图标,也是最近才知道,原来微软官方就有一套字体图标库。Windows 11自带的是Segoe Fluent。Windows 10自带的是Segoe MDL2。字体文件是Windows自带。官网搜索,或者访问我的。
2024-11-28 16:47:05
897
原创 git如何将当前的修改提交到其它分支
使修改后的文件转移到堆栈中。因此,后来在同一或在另一个分支中,能够将它们带回去,并在项目中查看这些修改。阶段是提交的前一步,将修改的文件添加到“Staged files”中以创建下一个提交。切换分支后, 将暂存的文件恢复。再将修改的内容放到新的分支中。此时,按正常提交即可。
2024-11-21 09:16:43
902
原创 如何在WPF中嵌入其它程序
这里我们以WPF嵌入WPF来进行演示,其它程序也可以嵌入,但是要注意:被嵌入的窗口必须是无边框且置顶的。像一般的窗口程序都可以设置窗口类型,如果是嵌入Unity这种无法控制窗口类型的,可以调用。此时我们还需要处理一些窗口的事件,比如最大化,最小化,移动和大小改变等。在窗口的Loaded事件中创建其它程序进程,并嵌入。其它的操作可以参考示例代码,这里不做详细介绍。在父窗口中,窗口关闭时,发送消息到子窗口即可。此时我们运行后,就可以看到窗口已经被嵌入。在WPF中嵌入其它程序,这里提供两种方案。
2024-11-21 09:07:08
1805
原创 WPF实现一个壁纸切换器
准备支持动态壁纸、Bing每日图、从WebApi接口随机获取一张图,并加入开机时屏蔽Ctrl+Alt+Del按键。项目代码:https://github.com/zhaotianff/PrivateWallpaper。写这个工具的想法是方便切换两套壁纸,一套私密壁纸,一套日常壁纸。
2024-11-18 15:35:55
484
原创 调试WPF数据绑定的几种方法
命名空间错误:如System.Drawing.Brushes类型和System.Windows.Media.Brushes类型错误使用,导致在Converter中,颜色转换不生效。应用程序运行时,在运行目录下会生成一个DebugTrace.txt 文件,它里面记录了包括数据绑定的错误日志和其它任何程序运行时的错误信息。正常运行时,会发现界面没有内容显示,调试时发现属性赋值又正常,这个时候我们可以借助。数据绑定错误:这个导致的原因比较多,所以这里我们总结一下如何调试数据绑定。--诊断信息输出-->
2024-11-18 15:20:32
817
原创 解决无法打开包括文件: “excpt.h”的问题
报错原因是未安装对应版本的VC++生成工具,我这里的版本是143,因为我钩了ATL和MFC,所以打开工程时并不会报错,但是在编译时会报错。可以看到这个报错来自于注意:需要安装对应版本的VC++生成工具。
2024-11-08 09:18:14
226
原创 WPF MVVM入门系列教程(三、数据绑定)
如果绑定具有正确的设置,并且数据提供适当的通知,则在数据更改其值时,绑定到该数据的元素会自动反映更改。数据绑定还意味着,如果元素中数据的外部表示形式发生更改,则基础数据可以自动进行更新以反映更改。如果你想使用源属性中的某个值来初始化目标属性,且提前不知道数据上下文,则此类型的绑定也有用。绑定,对源属性的更改会自动更新目标属性,但对目标属性的更改不会传播回源属性。)上,当数据进行更改时,绑定的依赖属性值会更新(UI更新)。而当依赖属性的值更改(UI更改)时,绑定的数据也会进行更改。属性来解析数据绑定。
2024-11-08 09:14:49
1255
原创 WPF MVVM入门系列教程(二、依赖属性)
通俗点来说,WPF的依赖属性就是在.NET属性的基础上进行的扩展。这一点跟前面的依赖属性有区别。指定此依赖属性的元数据,元数据定义依赖属性在应用于特定类型时的某些行为方面,包括默认值、值更改时的回调等。本文不包括依赖属性内存存储方式、属性取值优先级、属性默认值、属性值更改回调、属性验证等概念,在后面的文章中再进行补充。的第一个参数代表依赖属性的默认值,设置为null,第二个参数是在值更改时的回调函数,这里是调用。说明:本文是介绍WPF中的依赖属性功能,如果对依赖属性已经有了解了,可以浏览后面的文章。
2024-11-07 09:09:51
942
原创 C#如何快速获取P/Invoke方法签名
这个网站,但基本很少使用。一方面是想多动手,另一方面是因为各种数据类型基本都用过了,都能自己在C#中 对应 起来。有了这个项目,以后调用API函数可以更方便。最重要的是,官方提供了函数签名示例,我们可以从里面学到很多东西。使用API函数已经好几年了,封装函数签名基本是参照MSDN上的文档,然后再做数据类型对应。项目替代,使用方法跟上述一致,nuget搜索CsWin32包使用即可。,这个项目是流行操作系统的所有P/Invoke方法签名的库集合。最近在逛github时,发现了一个官方的项目,
2024-11-06 09:20:32
1023
原创 在C#中使用Union联合体
以上两个变量在内存中占用的字节数不同,但都从同一个地址开始存放,也就是使用覆盖技术,几个变量互相覆盖。这段示例代码中使用了Windows Data Types(LPWSTR),在不同的平台中,指针的大小不一样,所以在C#中调用时,需要根据平台,定义对应的结构体。2、union起作用的成员是最后一次存放的变量,在存入一个新的成员后原有的成员就失去作用。56 /// 如果使用了union中的char[]字段,就使用这个结构体。46 /// 如果使用了union中的int字段,就使用这个结构体。
2024-10-31 17:00:21
1601
原创 C#与C++结构体交互时的字节对齐问题
这里简单的举个例子:假设处理器总是从存储器中读取4个字节,如果我们能保证将所有的数据类型的地址对齐成4的倍数,那么就可以用一个存储器操作来读或者写值了。否则,可能需要执行两次存储器访问,就降低了速度。在进行平台调用时,需要注意在C++模块里,是否使用了字节对齐。如果使用了字节对齐,C#这边也要去做这样一个对应,否则就会导致程序运行不正常。22 //未进行字节对齐的情况,程序可以执行,但内存里的值对应不起来。这里我们创建一个导出函数Test,返回一个使用了字节对齐的结构体。
2024-10-30 09:14:40
997
原创 在C#中使用指针
使用指针后,可以进行低级的内存访问,但这是有代价的,使用指针的语法比引用类型的语法复杂得多,而且指针使用起来也比较困难,需要较高的编程技巧和强力。另外,如果使用指针,就必须授予代码运行库的代码访问安全机制的高级别信任,否则就不能执行它。如果一个不安全的上下文要与这个对象(或这个堆上的任何对象)交互,就可能会出现问题,因为垃圾回收可随时发生。但这块内存是在栈上的,当分配方法返回的时候,被分配的内存立即被清理。操作符构建数据类型相对应的指针类型(指针类型、值类型和引用类型,示例代码中的。仅与基础类型一起写入;
2024-10-28 22:52:25
1995
原创 C#与C++互操作时的数据类型对应
/往IntPtr里拷贝数据需要提前分配空间,否则会报错。C#和C++在互操作时,会涉及到数据类型对应的问题,如果数据类型用得不对,就会得不到想要的结果,严重的情况下,可能还会导致程序崩溃。//再拷贝到IntPtr。//先拷贝到字节数组。使用C#读出(由于在写入Point数据时,指针的位置已经不是当初映射出来的起点了,要偏移,就需要使用指针)12 //程序退出时的资源释放操作。21 //程序退出时的资源释放操作。15 //使用指针。
2024-10-28 22:50:24
869
原创 C#与C++进行互操作时字符串处理的一些问题
的容量,使它刚好能装下这些字符串。如果我直接不分配容量,CLR会分配一个稍微大一点的容量。现在还在做桌面这一块的,可能非常少了。昨天在调用封装的加密狗模块时,遇到了一些问题。查了一些资料,这里做一些总结。的容量写小一点,当这个容量不足以容纳字符串时,CLR会改变。C#与C++进行互操作时,字符串这一块需要注意几个地方。这种情况跟上面所述一致,不修改字符串内容的,用。这里不封装导出函数了,直接用API函数。,这个函数会对传入的字符串进行修改。这里还发现一件有趣的事,就是当我把。,需要修改并传出的,用。
2024-10-17 09:46:20
1302
原创 WPF MVVM模式实现DataGrid编辑
34 <Button Grid.Row="6" Content="保存" Width="88" Height="28" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="10"14 <DataGridTextColumn Header="姓名" Width="*" Binding="{Binding Name}"/>
2024-10-17 09:43:24
1677
原创 WPF实现类似网易云音乐的菜单切换
11 Title="工具箱" Height="650" Width="1100" TitleForeground="{DynamicResource MahApps.Brushes.Text}" Icon="logo.png" Background="{DynamicResource MahApps.Brushes.ThemeBackground}">--标题文本,如果需要大标题显示,取消注释这段代码-->这里的一些颜色使用了动态资源 ,以便实现深色和浅色模式的切换。属性,可以设置菜单项。
2024-10-15 11:54:21
1407
原创 WPFDeveloper正式版发布
一个基于WPF自定义高级控件的WPF开发人员UI库,它提供了众多的自定义控件。该项目的创建者和主要维护者是现役微软MVP 闫驚鏵:WPFDeveloper从2022年6月21日 发布第一个预览版1.0.5-preview,经历了35个版本的迭代,终于推出了正式版0.0.0.1。欢迎各位小伙伴前来使用体验,在使用过程中遇到任何问题,可以到项目的下进行反馈。引入XAML命名空间添加到资源字典中--需要注意 wd:Resources 必须在配色主题后,Theme="Dark" 为黑色皮肤-->
2024-10-15 11:22:12
1724
1
codeblocks-20.02mingw官网下载,codeblocks官网的资源下载太慢,做一个搬运
2024-08-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人