WINAPI EnumWindowsProc:非标准语法;使用&为成员创建一个点

时间:2017-06-13 17:54:30

标签: c++ windows winapi

当我调用EnumWindows(EnumWindowsProc,0)时,我一直收到错误; 它将我的BOOL CALLBACK selectionWindows :: EnumWindowsProc(HWND hWnd,long lParam)函数转换为参数。

我知道它与类和selectionWindows ::有关,但我无法理解我的生活。

这是.h

#ifndef SELECTIONWINDOWS_H
#define SELECTIONWINDOWS_H

#include <windows.h>
#include "mainwindow.h"

#include <QWidget>
#include <iostream>

class selectionWindows : public QWidget
{
    Q_OBJECT

public:

    selectionWindows(MainWindow * w);
    void selectionWindows::addWindows();
    BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lparam);

    ~selectionWindows();

private:
        char buff[255];
    };

我所遇到的部分的切口:

BOOL CALLBACK selectionWindows::EnumWindowsProc(HWND hWnd, long lParam) {

    if (IsWindowVisible(hWnd))
        GetWindowTextW(hWnd, (LPWSTR) buff, 254);
    return true;

}    

void selectionWindows::addWindows() {

       EnumWindows(EnumWindowsProc, 0); //Here is the error

        for (int i = 0; i  != 254; ++i) {
            qDebug() << buff[i];
        }
    }

我已经包含了windows.h&amp;的iostream

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

EnumWindows需要一个自由函数或静态类成员作为 WindowsEnumProc 。您无法传递非静态类成员。如果您需要从 WindowsEnumProc 中访问类实例,请在调用 <script> if($(document).scrollTop>10){ $("#myDiv).addClass("active"); } else{ $("#myDiv").removeClass("active"); } 时将指针传递给它。 lParam

  

要传递给回调函数的应用程序定义值。

这是一个示例实现:

EnumWindows

以下代码将实例指针传递给class selectionWindows : public QWidget { Q_OBJECT public: selectionWindows(MainWindow * w); void selectionWindows::addWindows(); BOOL CALLBACK EnumWindowsProc(HWND hWnd); static BOOL CALLBACK EnumWindowsProcStatic(HWND hWnd, LPARAM lParam); ~selectionWindows(); private: char buff[255]; }; API:

EnumWindows

void selectionWindows::addWindows() { EnumWindows(selectionWindows::EnumWindowsProcStatic, reinterpret_cast<LPARAM>(this)); // ... } 将调用转发给类实例:

EnumWindowsProcStatic

答案 1 :(得分:3)

您的回调函数必须是static(或自由函数),它不能是非静态类成员方法。