winform使用SetParent 嵌入excel,打开的excel跟随dpi 25%*125%缩放了两次,目前微软官方没有好的解决方案,为什么

这篇具有很好参考价值的文章主要介绍了winform使用SetParent 嵌入excel,打开的excel跟随dpi 25%*125%缩放了两次,目前微软官方没有好的解决方案,为什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

双重缩放问题在将 Excel 嵌入到 WinForm 中时确实可能会出现,这是因为两个不同的应用程序(WinForm 和 Excel)之间的 DPI 缩放逻辑不一致,导致双重缩放的结果。

在 Windows 操作系统中,DPI 缩放是一种全局的设置,用于适应高 DPI 显示设备,从而提高显示元素的大小。当您将 Excel 嵌入到 WinForm 中时,Excel 作为一个独立的应用程序,也会根据系统的 DPI 缩放设置进行缩放,从而导致双重缩放。

这种情况下,微软官方可能没有提供特定的解决方案,因为解决双重缩放问题需要同时涉及到操作系统和应用程序的缩放逻辑,而且由于两者之间的缩放机制可能不完全一致,很难提供通用的解决方案。

为了解决这个问题,您可能需要考虑以下几个方向:

1. **禁用 WinForm 的 DPI 缩放:** 尝试在 WinForm 中禁用 DPI 缩放,这样 Excel 在嵌入时就不会受到 WinForm 的 DPI 缩放影响。

2. **适应 Excel 的 DPI 缩放:** 在嵌入 Excel 后,调整 Excel 的 DPI 缩放,使其适应 WinForm 的 DPI 缩放,从而避免 Excel 自身的分辨率缩放。

3. **调整布局和字体大小:** 在 WinForm 中,调整控件的布局和字体大小,使其适应 WinForm 和 Excel 的 DPI 缩放,从而减少双重缩放的影响。

4. **使用专业工具:** 考虑使用第三方的工具或控件,这些工具可能针对 Excel 和 WinForm 的 DPI 缩放问题提供更好的解决方案。

请注意,解决双重缩放问题可能需要进行更深入的研究和尝试不同的方法,因为涉及到底层的操作系统和应用程序缩放逻辑。这种情况下,可能需要根据具体的应用场景和需求来选择最合适的解决方案。文章来源地址https://www.toymoban.com/news/detail-624042.html

在 WinForm 中使用 SetParent 嵌入 Excel 是一种将 Excel 应用程序嵌入到 WinForm 窗体中的简单方法。要执行此操作,您需要在 WinForm 窗体中添加一个空白控件,将其用作 Excel 的容器。然后,您可以使用 SetParent 函数将 Excel 应用程序窗口的句柄设置为该控件句柄。

以下是使用 SetParent 嵌入 Excel 的示例代码:

C#
using System;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;

namespace WinFormEmbedExcel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // 添加一个空白控件作为 Excel 的容器
            Panel excelView = new Panel();
            excelView.Dock = DockStyle.Fill;
            this.Controls.Add(excelView);

            // 创建 Excel 应用程序对象
            Excel.Application excelApp = new Excel.Application();

            // 打开 Excel 文件
            string excelFilePath = @"C:\test\book1.xlsx";
            excelApp.Workbooks.Open(excelFilePath);

            // 获取 Excel 的第一个工作表
            Excel.Worksheet excelWorksheet = excelApp.ActiveSheet;

            // 将 Excel 嵌入到控件中
            IntPtr excelHwnd = new IntPtr(excelApp.Hwnd);
            SetParent(excelHwnd, excelView.Handle);
        }
    }
}
请谨慎使用代码。了解详情
此代码将在 WinForm 窗体中创建一个名为 "excelView" 的空白控件。然后,它将创建一个 Excel 应用程序对象并打开一个指定的 Excel 文件。最后,它将将 Excel 应用程序嵌入到 "excelView" 控件中。

在某些情况下,您可能需要禁用 WinForm 的 DPI 缩放,以避免 Excel 在嵌入时出现双重缩放。要执行此操作,您可以将以下代码添加到 WinForm 窗体的代码中:

C#
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.UseCompatibleTextRendering, true);
this.SetStyle(ControlStyles.UseFontSmoothing, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
请谨慎使用代码。了解详情
此代码将禁用 WinForm 的 DPI 缩放和其他一些与 DPI 相关的设置。

到了这里,关于winform使用SetParent 嵌入excel,打开的excel跟随dpi 25%*125%缩放了两次,目前微软官方没有好的解决方案,为什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • winform使用CefSharp嵌入VUE网页并交互

    1、NuGet添加CefSharp 如果下载慢或失败可以更新下载源 腾讯资源 https://mirrors.cloud.tencent.com/nuget/ 华为资源 https://repo.huaweicloud.com/repository/nuget/v3/index.json  2、将项目平台改为X64 3、在winform窗体添加cef ChromMenuHandler BoundObject 4、vue代码编写 5、打包vue并放到项目下并设置复制到输出

    2024年02月04日
    浏览(40)
  • winform中嵌入cefsharp, 并使用selenium控制

     正常说, 需要安装的包    下面是所有的包  全部代码 需要注意的地方 1. selenium, 要下载3版本的。 2. 下载的驱动, 必须和cefsharp一致。     第一次写c#, 原以为网上应该有很多相关的资料了, 搜了半天都找不到, 自己研究了半天才弄出来。  以后自己写个脚本就方便了

    2024年02月12日
    浏览(36)
  • C# winform usercontrol控件跟随主窗体实现自动大小

    usercontrol控件跟随主窗体实现自动大小 今天是跟着哗哩哗哩大学学习C的第N天,但是是学习usercontrol的第一天。 第一天遇到的问题就是如何将usercontrol的大小跟随主窗体的一起变大变小。视频中教得很详细,首先是将usercontrol控件实例化,接着就是设置usercontrol的dock属性为fil

    2024年02月12日
    浏览(45)
  • 手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出)

    C# Winform高DPI字体模糊. 高DPI下(缩放100%), UI设计器一直提示缩放到100%, 如果不重启到100%,设计的控件会乱飞. 新建.Net Windows窗体应用 (Winform)工程 选择.Net6.0 将窗体尺寸定为 1000 x 1000 , 用于后面检测缩放是否正确 添加一个按钮 , 尺寸定为 150 x 50 添加一个图片框 , 尺寸定为 300 x

    2024年02月07日
    浏览(43)
  • C# WinForm 使用Microsoft.Office.Interop.Excel对Excel文件表格的单元格值进行修改操作

    在引用位置点击右键 点击管理NUGet程序包 搜索Excel,在搜索结果中点击Microsoft.Office.Interop.Excel 然后点击安装即可,搜不到的话,在右侧程序包源位置改成全部再次搜索 。 对准项目,点击右键,在弹出菜单选择添加,选择类 类名称随意,然后清空新建类得到全部内容,把下面

    2024年02月13日
    浏览(53)
  • 嵌入式硬件电路原理图之跟随电路

    描述 电压跟随电路 电压跟随器是共集电极电路,信号从基极输入,射极输出,故又称射极输出器。基极电压与集电极电压相位相同,即输入电压与输出电压同相。这一电路的主要特点是:高输入电阻、低输出电阻、电压增益近似为1,所以叫做电压跟随器。 电压跟随器电路

    2024年02月04日
    浏览(55)
  • c# Winform 程序嵌入PPT

    记录一下,嵌入ppt程序遇到的问题。。。。。。。。。。。。。。。。。。。。。。。。。。。 在网上找了很多资料,关于嵌入ppt浏览ppt的例子和方法,使用下来都是一大推问题。。 最后选择了打开ppt程序,把ppt程序嵌入页面UI中这个方法,但同样问题都一抹多,庆幸问题最

    2024年02月05日
    浏览(39)
  • Java excel poi 使用HSSFWorkbook 导出的excel wps能打开office打不开问题解决 Excel无法打开xx.xlsx,因为文件格式或扩展名无效......

    1.在开发代码中涉及到报表导出 xlsx文件 office打不开问题 JavaPOI导出Excel有三种形式,他们分别是 1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWorkbook。 pom文件如下 检查创建sheet代码如下 代码中用了 HSSFworkbook 去创建Sheet 导致office打不开原因就在这里 HSSFworkbook 解释如下: HSSFWorkbook:是操作Exc

    2024年02月16日
    浏览(48)
  • c#-winform项目嵌入Unity(一)

    完成工程功能后: 新建文件夹保存发布的版本: 成功后生成该文件: 建立工程后,先添加所需的控件。 新建一个选项卡,命名为unity:

    2024年02月12日
    浏览(32)
  • winForm导出Excel

    方法一:XML导出后改后缀.(记事本打开就是编写的数据格式) 优点:简单,快捷 缺点:Excek或Office打开时提示文件格式错误,需要另存为标准的Excel格式,直接导入会提示 方法二:使用微软的动态库Microsoft.Office.Interop.Excel.dll(标准的Excel格式,记事本打开后是乱码) 优点:标准的Excel格式,自由

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包