SetForegroundWindow及类保护

1、列表视图模式

2、SetForegroundWindow

3、类保护

我试图使用C++/MFC自定义文件打开对话框。是否有一种办法能在打开/保存对话 框启动时改变列表视图的类型?启动时默认的是列表视图, 这个视图没什么用 。我希望程序启动对话框时采用详细资料视图,或最好是用户最后一次使用的视 图。您能推荐一种方法吗?

Udi Mishan

当然,在 Windows 中总 是有办法的。当我第一次看你的问题时,我想那很容易。只要在 WM_INITDIALOG 消息处理函数中获取列表视图,然后将其视图模式设置为详细资料即可。但在 Windows 中你经常会碰到逻辑上可行,实际做起来行不通。上述做法有三个问题 。

问题一是获取列表视图。个别读者已经问到过这个问题,因为它显得 有价值了。使用Microsoft Spy++你可以发现,列表控制不是对话框的直接子类 ,它是孙子类。Spy++运行的屏幕截图 Figure 1 显示了文件打开对话框的真实 的窗口层次。你可以看到,主对话框有一个子窗口,类的名字为 SHELLDLL_DefView。接着依次包括文件和文件夹的列表控制。(我第一次提到 SHELLDLL_DefView 是在2002年2月专栏)SHELLDLL_DefView的 ID 是 lst2 (值 为 0x0461, 在 dlgs.h 中定义),但它不是列表框或列表控制。真正的 SysListView32 是 SHELLDLL_DefView 的 孩子,子 ID 为 1。

Figure 1 窗口层次

问题二是当你的对话框获得 WM_INITDIALOG 时,结合列表控制/SHELLDLL_DefView的窗口还不存在。当你得到CDN_INITDONE 时,它依然不存在 ,尽管这个消息的意思是打开对话框已完成初始化。好了, 实验是最好的证明:要想Windows做了什么,唯一的途径是做一个实验,或是阅 读 MSDN 杂志。Figure 2 是我编写的用来说服自己确信列表控制并不存在的测 试对话框。CMyOpenDlg 有一个函数叫 SetListView,顾名思义。此函数也显示 TRACE 诊断信息 ,指示它能否找到列表控制。Figure 3 是 TRACE 流输出的结 果,当 WM_INITDIALOG 或 CDN_INITDONE 到来时列表视图不存在。两种情况下 GetDlgItem 都返回 NULL。那么你该怎么做呢?最简单的 做法是让你的对话框 给自己发个消息:

BOOL CMyOpenDlg::OnInitDialog()
{
  CFileDialog::OnInitDialog();
  PostMessage (MYWM_POSTINIT,0,0);
  return TRUE;
}

Figure 3 Trace

时间: 2024-07-28 21:53:27

SetForegroundWindow及类保护的相关文章

深入分析C++派生类中的保护成员继承_C 语言

protected 与 public 和 private 一样是用来声明成员的访问权限的.由protected声明的成员称为"受保护的成员",或简称"保护成员".从类的用户角度来看,保护成员等价于私有成员.但有一点与私有成员不同,保护成员可以被派生类的成员函数引用. 如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员.如果在一个类中声明了保护成员,就意味着该类可能要用作基类,在它的派生类中会访问这些成员.

浅谈 DotNet 保护中字符串加密的技术

加密|字符串 学习过了名称混淆,最近又看了一些字符串加密方面的东西.在混淆保护和加密壳中都有字符串加密保护功能. 总体上字符串加密可以分为两类, 第一类是混淆保护中的字符串加密技术.主要特征是修改代码执行路径.大部分混淆保护工具的字符串加密都是这一类. 第二类就是加密壳中的字符串加密技术.这种不用修改IL代码,直接对元数据中的字符串加密.这一类以remotesoft,maxtocode为代表. 先看第一类,加密实现大致如下. 加密前: MessageBox.Show("Hellow World!

怎样保护在线交易用户免遭钓鱼的欺诈

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 如今,最火的地方莫过于股市,平均每13个中国人就有1个炒股,说我国已进入"全民皆股"时代似乎一点也不为过.不过,几乎绝大部分人依然习惯去交易所进行股票交易,通过网络炒股的人寥寥无几.网上股票交易特有的"交易方便快捷,信息量大,紧跟行情,辅助分析系统强大"等优势,难道真的比不上交易所里的拥挤和繁杂?大路朝天,股民们为啥偏偏去挤独木桥?事实上,受冷落的不仅仅是网上的股票交易,在线交易.网上银行等几乎所有通过网络进行

PHP 处理图片的类实现代码_php技巧

复制代码 代码如下: <?php /** * author:yagas * email:yagas60@21cn.com */ class Image { /** 类保护变量 */ protected $th_width = 100; protected $th_height = 50; protected $quality = 85; //图片质量 protected $transparent = 50; //水印透明度 protected $background = "255,255,

用验证机制加强神经网络的能力:研究者提出机器学习防御措施

几年前,我们见证了神经网络和学习算法的快速兴起.人工智能时代正在到来,探索过程中也不可避免出现一些失败的尝试,有些失败的项目往往有迹可循,因为算法足够简单,我们可以以管窥豹,做出合理的猜想. 但是,如果涉及到深层神经网络的问题,就很难讲了.比如,早期我们所提的pix2pix技术,很多情况下看起来完全可以零失误完成,但在还是有很多失败案例. Twitter上出现的各种失败案例 这不仅因为神经网络在面对虚假输入时没有鉴别能力,很可能会误读.误识,更因为神经网络没有对抗性,可能随时被颠覆,也就是说,我

测试并发应用 (一)监控Lock接口

声明:本文是< Java 7 Concurrency Cookbook>的第八章, 作者: Javier Fernández González 译者:郑玉婷   校对:方腾飞 监控Lock接口 Lock 接口是Java 并发 API提供的最基本的机制来同步代码块.它允许定义临界区.临界区是代码块可以共享资源,但是不能被多个线程同时执行.此机制是通过Lock 接口和 ReentrantLock 类实现的. 在这个指南,你将学习从Lock对象可以获取的信息和如何获取这些信息. 准备 指南中的例子是

老外揭秘:原来黑客是这么破解MCU的

这篇文章是俄国人Sergei P.Skorobogatov就读英吉利剑桥大学之博士论文,讲解了各种MCU的攻防技术,堪称一部小百科全书.对于志在研究MCU防护的筒子,能给你很多参考思路:但对于想当黑客的人,我们对后果概不负责. 非侵入式攻击不需要对元器件进行初始化.攻击时可以把元器件放在测试电路中分析,也可单独连接元器件.一旦成功,这种攻击很容易普及,并且重新进行攻击不 需要很大的开销.另外,使用这种攻击不会留下痕迹.因此,这被认为是对任意元器件的硬件安全最大的威胁.同时,通常需要很多时间和精力

为啥用List list=new ArrayList()生成

问题描述 一般编写代码,需要用ArrayList对象时,都会像下面一样生成:List list = new ArrayList();这样写主要是符合了java面向对象的思想但有次编写代码时,需要使用到ArrayList的clone方法,而这个方法是在ArrayList中定义的,在List这个接口中并没有这时让我感到很困惑,本来这样生成ArrayList对象是很提倡的,可是却局限了ArrayList的使用方法不知道各位大神,是否能解开小弟困惑,又或者有其他方式使用实现类自己的方法 解决方案 jav

腾讯争夺汽车领域QQ商标基于何种考量?

商标纠纷案件最近几年来数量越来越多,影响越来越大,涉及的争议方也多为业界巨头,因此受社会的关注度也越来越高. 近日,腾讯与奇瑞争夺汽车领域QQ商标一案又成为媒体报道的焦点.因在汽车等商品上注册的"QQ"商标被撤销,腾讯将国家商标评审委员会(以下简称"商评委")告上法庭,奇瑞公司作为第三人参与诉讼,该案于7月16日上午在北京市第一中级人民法院开庭审理. 腾讯凭什么诉商评委 不明缘由的读者可能会纳闷,腾讯与奇瑞争夺"QQ"商标,为何不直接告奇瑞公司而