zoukankan      html  css  js  c++  java
  • 如何用钩子自定义PickIconDlg

    Sample Image - PickIconDlg2.jpg 介绍 你可以看到我以前的文章显示选择图标对话框。我不只是更新了那篇文章,因为对于那些只想显示这个对话框的人来说,这是一个简单的解决方案。在本文中,我将定制这个对话框。实际上,这一切都始于我在一个项目上的工作,这需要我安装一个钩子DLL。因此,作为了解钩子如何工作的一个简单方法的开始,我创建了这个,它工作了。 变化 我所做的第一个改变是,现在它是一个简单的类,它封装了所有调用API、生成Unicode字符串并将其转换回来和挂钩。 连接的对话框 我想做的是在对话框中显示当前选择的图标的索引。为此,我想在对话框中放置另一个静态控件。但是我把静态控件放在哪里呢?首先,我试图缩小图标列表框,但没有成功。有关简短讨论,请参阅我的博客。然后我使实际对话框更高,并将按钮向下移动。对于所有这些,我设置了一个类型为WH_CALLWNDPROC的SetWindowsHookEx()钩子。在这个钩子的过程中,我进行了更改。我处理了两条消息WM_INITDIALOG和WM_COMMAND。 为什么钩 正如大多数人所见,大多数窗口对话框和其他类似的api都为我们提供了回调工具。这些是什么?回调是我们应用程序(DLL)中的一个函数,由Windows操作系统调用。为什么叫它?当为对话框设置回调时,在对话框的文档中会说明回调的目的。什么时候叫?这里也会提到。例如,SHBrowseForFolder对话框还提供了一种通过在BROWSEINFO中设置回调来点击它的方法。lpfn成员。设置这个回调之后,你就可以很容易地知道对话框中发生了什么。但是在PickIconDlg()的情况下,我没有这样的选项,这意味着这个对话框没有提供正确的方法来了解它的事件。这就是我钩住它的原因。 钩是如何工作的 钩子进程的工作并不是很困难,只要设置一个钩子,然后显示你想要钩住的对话框,记得在你完成后解除钩子,通常在对话框被解除后。在设置了一个钩子之后,它就像你为那个对话框设置了一个回调一样。在这个对话框的生命周期中,你可以看到这个对话框从创建到销毁的每一个事件。在那个被告知的钩子函数中,钩子被设置(这里CallWndProc()是将要被调用的函数)。 隐藏,复制Code

    mhHook = SetWindowsHookEx(WH_CALLWNDPROC ,CallWndProc, NULL, AfxGetApp()->m_nThreadID);

    您将收到该对话框的所有消息。现在,您需要处理哪些消息和忽略哪些消息。 消息处理 WM_INITDIALOG消息是我对对话框进行所有视觉改变的地方,我使对话框更高,然后移动按钮(有三个按钮,不是两个)。一个是隐藏的)下来,并把我新创建的静态列表框和按钮之间。 隐藏,复制Code

    LRESULT CALLBACK CPickIconDialog::CallWndProc(int nCode,WPARAM wParam, LPARAM lParam)
    {
    	if (nCode < 0) // do not process message 
    		return CallNextHookEx(mhHook, nCode, wParam, lParam);
    	CWPSTRUCT *msg = (CWPSTRUCT *)lParam;
    	switch(msg->message)
    	{
    	case WM_INITDIALOG:
    	{
    	// handle message here 

    WM_COMMAND消息实际上只处理一个通知LBN_SELCHANGE,它在每次列表框中选择发生变化时发送。这里我更新了我的静态控件。 历史 2006年9月18日:最后更新 本文转载于:http://www.diyabc.com/frontweb/news10832.html

  • 相关阅读:
    poj 2488 DFS
    畅通工程 并查集模版
    KMP 模板
    poj 1426 DFS
    poj 2528 线段数
    poj 3468 线段数 修改区间(点)
    CVPR2012文章阅读(2)A Unified Approach to Salient Object Detection via Low Rank Matrix Recovery
    如何制定目标
    Saliency Map 最新综述
    计算机视觉模式识别重要会议杂志
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473264.html
Copyright © 2011-2022 走看看