• 【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. 如果用于替换窗体过程函数需要同一个进程中(见后序章节)

    演示代码

  • 相关阅读:
    Fatal error: Maximum execution time of 30 seconds exceeded in
    常见变量命名规则
    Rust使用国内镜像安装依赖
    flutter使用国内镜像源
    7个每天晚上应该坚持的好习惯
    网络数据传输格式的思考
    Deepin安装 ruby 包管理工具 RVM(适用于 Debian 系列)
    C语言数据类型关键字
    win10 powershell禁止运行脚本解决
    Linux 查看系统相关信息(系统发型版本及内核版本等)
  • 原文地址:https://www.cnblogs.com/ztercel/p/2145169.html
Copyright © 2020-2023  润新知