当我调用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
感谢您的帮助!
答案 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
(或自由函数),它不能是非静态类成员方法。