您所在位置: 网站首页 / 文档列表 / .NET / 文档详情
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部.doc 立即下载
上传人:yy****24 上传时间:2024-09-05 格式:DOC 页数:9 大小:1.8MB 金币:18 举报 版权申诉
预览加载中,请您耐心等待几秒...

C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部.doc

C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

18 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://www.cnblogs.com/bitzhuwei/archive/2012/05/24/SmileWei_EmbeddedApp.html"C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开发的一样(实际上……跟自己开发的还是有一点点区别的,就是内嵌程序和宿主程序的窗口激活状态问题)。在codeproject找到了一篇相关的文章(HYPERLINK"http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project"\o"HostingEXEApplicationsinaWinFormproject"\t"_blank"http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project),虽然可用,但是很不方便,于是重新设计编写了一个类库,用一个控件完成内嵌其它应用程序的功能。直接上图先:从打开AdobeReader那张图片可以看出来所谓的“内嵌程序和宿主程序的窗口激活状态问题”。当内嵌程序窗口激活时,表面上将其包裹起来的宿主窗口却处于非激活的状态。想隐藏这一点的话,把窗口的FormBorderStyle属性设为None吧,然后自己在窗口上画关闭、最大化、最小化按钮好了。原作者的实现思路更能暴露本质,所以这里用原作者的代码段解释一下实现过程。1、启动要嵌入的应用程序进程1Processp=null;2try3{4//Starttheprocess5p=System.Diagnostics.Process.Start(this.exeName);67//Waitforprocesstobecreatedandenteridlecondition8p.WaitForInputIdle();910//Getthemainhandle11appWin=p.MainWindowHandle;12}13catch(Exceptionex)14{15MessageBox.Show(this,ex.Message,"Error");16}2、调用WindowsAPI将启动的应用程序窗口嵌入自定义的控件(作者用的是Panel控件)1//Putitintothisform2SetParent(appWin,this.Handle);//this在这里是Panel控件34//Removeborderandwhatnot5SetWindowLong(appWin,GWL_STYLE,WS_VISIBLE);67//Movethewindowtooverlayitonthiswindow8MoveWindow(appWin,0,0,this.Width,this.Height,true);3、设置被嵌入的窗体大小随宿主窗体改变1protectedoverridevoidOnResize(EventArgse)2{3if(this.appWin!=IntPtr.Zero)4{5MoveWindow(appWin,0,0,this.Width,this.Height,true);6}7base.OnResize(e);8}4、设置被嵌入的窗体应用程序在宿主程序关闭时也关闭1protectedoverridevoidOnHandleDestroyed(EventArgse)2{3//Stoptheapplication4if(appWin!=IntPtr.Zero)5{6//Postacolsemessage7PostMessage(appWin,WM_CLOSE,0,0);89//Delayforittogetthemessage10System.Threading.Thread.Sleep(1000);1112//Clearinternalhandle13appWin=IntPtr.Zero;14}15base.OnHandleDestroyed(e);16}原作者的代码实际用起来是很不方便的,具体大家试试就知道,不细说了(反正我只学了学上面的步骤,也不用他的库)。本人开发了一个比较实用的控件,使用起来也很简单,只需三步。首先,在窗体应用程序项目中引用类库SmileWei.EmbeddedApp。然后,在宿主窗体上拖一个AppContain
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部

文档大小:1.8MB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
年会员
99.0
¥199.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用

手机号注册 用户名注册
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
登录
手机号登录 微信扫码登录
微信扫一扫登录 账号密码登录

首次登录需关注“豆柴文库”公众号

新用户注册
VIP会员(1亿+VIP文档免费下)
年会员
99.0
¥199.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用