j9国际站|(官网)点击登录

    新疆j9九游会

    本站首页 j9九游会 乐成案例 公司新闻 公司简介 客服中心 软件技能 网站建立
      您如今的地位: 新疆二域j9九游会公司 >> 开辟言语 >> 文章注释

    在桌面中嵌入窗体

    前几天在网上看到一个软件的介绍:可以嵌入桌面,即便是“表现桌面”也不会影响此步伐。看作者说的仿佛有何等的神奇一样。周未就返来试一下。最初发明,Windows这个桌面还真是庞大和故意思。
      起首要剖析Windows桌面。
      翻开老牌软件"Spy Window"。检察一下桌面。获得一个“SysListView32”类的句柄(本体系为XP版本)。将其最小化,可以看出方才获得的控件仿佛是通明的。由于将其最小化之后,还可以看到你所设置的桌面图片。
      重新用"Spy Window"获取桌面上的控件句柄(也可以间接点击"Parent Window"获得其父窗口句柄),失掉一个"SHELLDLL_DefView"类的句柄。将其最小化,可以看到桌面图片仍然存在,岂非又是一个通明控件吗?先不睬会它,j9九游会持续向“下”找。再一次获得“桌面”上一个类名为“Progman”的控件句柄。并且此时你会发明Spy Window的"Parent Window"按钮已不行用了。
      这个类为“Progman”的窗口“上面”真的没有别的窗口了吗?按“Ctrl+Alt+Del“在义务办理器里完毕“explorer”,后再利用“Spy Window”看一下,是不是又有一个类名为“#32769”的窗口出了。试着对此窗口举行禁用,最小化,隐蔽操纵试一下。仿佛统统都是有效的。
      到此为至,应该说把这张桌面的布局搞明白了。相称于图像处置中的四个图层,并且是通明图层。
      按类名由前至里的排序为:
      SysListView32
      SHELLDLL_DefView
      Progman
      #32769
      看来这个桌面公然不是一样平常的庞大。
      回想一下曩昔用代码来隐蔽桌面的操纵:
      FindWindow(''''Progman'''',Nil);
      ShowWindow(...);
      这里的''''Progman''''便是第三层(本文中j9九游会就以层来称谓它们)的窗口了。在完毕历程“Explorer”时,此窗口消散,阐明此窗口是由“Explorer.exe”创建的。
      上面举行将步伐嵌入到桌面里的操纵。
      这里所必要的只要一个语句:
      FrmMain.ParentWindow:=ParentHandle;此中,ParentHandle是你所要嵌人的控件句柄。
      按此完成,可以创建一个窗体,拖入一个TButton,一个TEdit。在Button的Click事情中写入代码FrmMain.ParentWindow:=StrToInt(EdtHandle.Text);
      上面,先来嵌入“第一层桌面”看一下。用"Spy Window”获得以后桌面句柄,也便是第一层''''SysListView32''''。转为十进制后复制到EdtHandle。点击按钮。
      步伐是不是转为非核心形态了。按一下“Win+D”(表现桌面)。是不是窗口仍停顿在桌面上。
      仿佛文章扫尾的目标曾经完成了。
      细心测试一下以后的窗体,是不是与原来有很大的差别。起首,窗口的题目栏总黑白核心形态。第二窗体上的右击被桌面阻拦了上去。
      第三Edit里表显不出TEdit自己抵消息的呼应。如点击时,拖动时,按键时右击时,Edit短少响应的闪耀输出光标,争光所选字符,笔墨处置,表现上下文菜单等。这是由于窗体得不到核心,而得不到核心关于TEdit控件来说,统统都是有效的。
      静态获得第一层控件句柄的办法是:
      TmpHandle:=FindWindow(''''Progman'''',Nil);
      TmpHandle:=GetWindow(TmpHandle,GW_CHILD);
      TmpHandle:=GetWindow(TmpHandle,GW_CHILD);
      此时TmpHandle便是桌面的句柄了。
      按照此办法,j9九游会可以将窗体嵌入第二层''''SHELLDLL_DefView''''了。当嵌入第二层时,你会发明。所嵌入的步伐窗口不见了。当j9九游会把第一层最小化时,可以看到j9九游会所嵌入的窗口是存在的。只是被第一层所遮住了。以是说,第一层并不是通明的!
      第一层最小化之后,可以看到,桌面上的图标都不见了。再看一下第一层的类名“SysListView32”,可以确定,第一层这个控件的作用次要便是列出体系桌面上的图标。j9九游会在以后第二层中点击一下右键。桌面菜单出来了吧?原来统统的音讯及处置都是在这一层吸收和处置的。这时可以用“新建”下令新建一个文档,之后再规复第一层桌面,可以看到,新建的文档呈现了。
      可以如许了解,第一层是“表现层”,第二层是“功效层”。j9九游会的窗体在这里是表现不出来的。并且异样得不到核心。
      如今,将j9九游会的步伐嵌入到第三层''''Progman'''',嵌入之后,呈现了和第二层相反的后果,按功效来说这一层应该没有什么实践的用处,大概只是给下面两层提供一个容器。如今''''Progman''''中有了两个窗体,一个是原有的''''SHELLDLL_DefView'''',另一个即是这个嵌入窗体。但前者用尽了一切的可视地区,以是才使得嵌入的窗体表现不出来。这种状况好像平常也会遇到,那j9九游会在嵌入时参加一句:BringWindowToTop(FrmMain.Handle);尝尝;
      呵呵,看到了什么?是不是嵌入的窗口呈现了?按一下"Win+D"看一下。怎样?还在吧?假如桌面上有图标的话,此时这个窗体应该是挡遮住了一局部图标的。
    处置的措施便是将上一层窗体减少。如:
      TmpHandle:=FindWindow(''''Progman'''',Nil);
      TmpHandle:=GetWindow(TmpHandle,GW_CHILD);
      MoveWindow(TmpHandle,0,20,1024,740,False);
      如许,在窗体顶部留出了二十象素的高度。可以放一个义务栏式的窗体了。
      如今只剩下最初一层"#32769"了。只需在体系登岸前的启动步伐稳定,此窗口的句柄应该是稳定化的(有大概体系登岸前启动的步伐有变革此句柄也稳定,详细状况没试过)。
      按后面的办法将窗体嵌入到此窗口中。
      窗体又是得不到核心的形态了。可以看出来这和嵌入到第一层差未几。但j9九游会拖动一下窗体看一下。此时窗体并不是及时追随鼠标的。再细心看一下,义务栏上呈现了两个此步伐的按钮。一个是步伐的称号,一个是窗口的称号。这是一种奇异的征象,历来没有见过的。大概j9九游会可以如许表明它。Explorer会将切合要求的窗体表现在义务栏上(非ToolsWindows,而且可见)。本窗体就切合,并且Explorer又会将窗口"#32769"里的一切窗口放就任务栏上而不论它能否复。以是才会失掉此后果。
      总结一下:
      Windows的桌面是分四层的。嵌入的窗体假如嵌入到第三层,并将Z轴次序移到最上的话,步伐就会一个正常的嵌入桌面的步伐。这切合j9九游会的要求。并且可以经过调解第二层的巨细来使窗体不遮住桌面图标。以是,将窗体嵌入到此是很抱负的。
      第一层的嵌入也是可以的。但在这里窗领会得不到核心和利用不了右键。以是这里的窗体受许多限定。
      第二层是一个基本不思索嵌入窗体的地方,由于这里的窗体基本表现不出来。并且与第一层相反的得不到核心。
      第四层是个不测的层。嵌在这里的窗领会表显出异常的状况。独一值得j9九游会嵌入的来由是:它不会随Explorer.exe历程的完毕而封闭。


    用mfc完成便是如许的代码
    HWND hDesktop = ::FindWindow("Progman", NULL);
    hDesktop = ::GetWindow(hDesktop, GW_CHILD);
    CWnd* pWndDesktop = CWnd::FromHandle(hDesktop);
    this->SetParent(pWndDesktop);

    作者:未知 | 文章泉源:未知 | 更新>###44:08

  1. 上一篇文章:

  2. 下一篇文章:

  3. 相干文章:
    j9九游会中项目司理有那些职责
    “七分选型,三分软件”的ERP规则
    C++函数工具count_if
    语法C# 问要害字之:base、this
    优化Ajax 为网站减负
    .Net下的散布式缓存
    复制SQL 数据库时的题目
    了解Java中native办法
    p2p软件怎样穿透内网举行通讯
    软件步伐编写者的思绪必要变革
    软件技能
    · 开辟言语
    · Java技能
    · .Net技能
    · 数据库开辟
    最新文章  
    ·搜集整理的asp.net的验证方
    ·种种FOR循环布局的整理
    ·软件项目开辟中应该思索那
    ·搜集整理的javascript sel
    ·j9九游会中项目司理有那些
    ·学习怎样在Lambda表达式进
    ·C++底子知识:布局体数据的
    ·C#完成短信发送步伐的例子
    ·sun近来修补了一局部java的
    ·rss定制的别的一种完成方法
    ·delphi完成使用arp诈骗来实
    ·底子学习:基于WF的流程框
    ·网络编程中怎样得知一次数
    ·怎样逆序输入单链表?
    ·j9九游会历程中的功能设计
    关于j9九游会 | j9九游会 | 下载试用 | 客服中心 | 联系j9九游会 | 相关单位 | 网站舆图 | 新疆电子舆图 | RSS订阅
    版权一切 © 2016 新疆二域j9九游会网 www.k8w.net All Rights Reserved
    新疆j9九游会>###、4811639.
    ### ;>###华联大厦A-5C 邮编:830000