zoukankan      html  css  js  c++  java
  • 【Demo 0028】获取窗体信息

    作为一个窗体,除了具有窗体类信息外还有其自身的一些信息如风格,扩展风格,窗体处理函数外还包括一个用户信息, 我们可以通过信息空间将我们要公共信息置入其中实现信息共享. 接下来我们看看它的功能.

    (一)  函数声明

          LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex );

          获取指定窗体特定标识信息, 此函数支持32位和64位

         

          LONG GetWindowLong(HWND hWnd, int nIndex );

          功能同GetWindowLongPtr一致, 但其仅支持32位

         

          nIndex 值可参考           

    GWL_EXSTYLE
         Retrieves the extended window styles. For more information, see CreateWindowEx.
    GWL_STYLE
         Retrieves the window styles.
    GWL_WNDPROC
         Retrieves the address of the window procedure, or a handle representing the address of the window procedure.
         You must use the CallWindowProc function to call the window procedure.
    GWL_HINSTANCE
         Retrieves a handle to the application instance.
    GWL_HWNDPARENT
         Retrieves a handle to the parent window, if any.
    GWL_ID
         Retrieves the identifier of the window.
    GWL_USERDATA
         Retrieves the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.
         The following values are also available when the hWnd parameter identifies a dialog box.
    DWL_DLGPROC
         Retrieves the address of the dialog box procedure, or a handle representing the address of the dialog box procedure.
         You must use the CallWindowProc function to call the dialog box procedure.
    DWL_MSGRESULT
         Retrieves the return value of a message processed in the dialog box procedure.
    DWL_USER
         Retrieves extra information private to the application, such as handles or pointers.

     

         Code1:

         1.  找到NotePad窗体句柄

         2.  将100 置入NotePad主窗体UserData中

         


    HWND hWndNotePad = FindWindowEx(NULL, NULL, _T("Notepad"), NULL);
    SetWindowLongPtr(hWndNotePad, GWLP_USERDATA, 100);

         Code2:

         1.  获取NotePad窗体句柄

         2.  获取NotePad窗体信息并显示

       


    HWND hWndNotePad = FindWindowEx(NULL, NULL, _T("Notepad"), NULL);
    if (NULL != hWndNotePad && IsWindow(hWndNotePad))
    {
        int        nIndexList[]    = { GWL_EXSTYLE, GWL_STYLE, GWLP_WNDPROC, GWLP_HINSTANCE, GWLP_HWNDPARENT,
                                    GWLP_ID, GWLP_USERDATA, DWLP_DLGPROC, DWLP_MSGRESULT, DWLP_USER };
        int*    nValueList        = new int[sizeof(nIndexList) / sizeof(*nIndexList)];
        const TCHAR* szInfo[]    = { _T("Extend Style:\t    0x%06X\n"),
                                    _T("Style:\t        0x%06X\n"),
                                    _T("WndProc:        0x%06X\n"),   
                                    _T("hInstance:        0x%06X\n"),
                                    _T("hParent:\t        0x%06X\n"),
                                    _T("ID:            0x%06X\n"),
                                    _T("UserData:        0x%06X\n"),
                                    _T("DlgProc:\t        0x%06X\n"),
                                    _T("MsgResult:        0x%06X\n"),
                                    _T("User:            0x%06X\n")};
        assert((sizeof(nIndexList) / sizeof(*nIndexList)) == (sizeof(szInfo) / sizeof(*szInfo)));
        
        TCHAR szClassInfo[1024] = {0};
        TCHAR szTemp[256];
        for (int ii = 0; ii < sizeof(nIndexList) / sizeof(*nIndexList); ii++)
        {
            nValueList[ii] = GetWindowLongPtr(hWndNotePad, nIndexList[ii]);

            TCHAR szTemp[256];
            _stprintf_s(szTemp, szInfo[ii], nValueList[ii]);
            _tcscat(szClassInfo, szTemp);
        }
        SetWindowText(GetDlgItem(hWnd, ID_LABINFO), szClassInfo);
        OutputDebugString(szClassInfo);
        delete[] nValueList;
    }

      
        我们可以看到从Demo0028置入100UserData信息

        image

       此函数我们使用比较多, 通常与SetWindowLongPtr配合使用于,用于设置用户信息、读取窗体风格,以及读取同一进程窗体过程函数以便恢复.

    (二) 特别说明

       1. 如果用于替换窗体过程函数需要同一个进程中(见后序章节)

    演示代码

  • 相关阅读:
    centos 查看硬盘使用情况
    查看centos内存命令
    VS2008编译运行时出现“外部组件发生异常”错误的解决方法
    20170307-1
    20170307
    centos7安装配置git
    Git理解笔记3
    Git理解笔记2
    Git理解笔记1
    php-设计模式
  • 原文地址:https://www.cnblogs.com/ztercel/p/2145169.html
Copyright © 2011-2022 走看看