除了在类中声明静态方法以从类外部调用它之外,还有另一种方法吗?
这是我的代码(请参阅标记为评论的问题)
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
_stdcall BOOL EnumWindowsProc(HWND hw,LPARAM lp)
{
char title[255];
memset(title,0,255);
GetWindowTextA(hw,title,255);
qDebug() << title << endl;
// How can I access class MainWindow from this function ?
return true;
}
void MainWindow::on_pushButton_clicked()
{
EnumWindows(&EnumWindowsProc,0);
}
答案 0 :(得分:2)
在Windows世界中执行此操作的典型方法是将指针传递给Enum函数,如下所示:
void MainWindow::on_pushButton_clicked()
{
EnumWindows(&EnumWindowsProc,reinterpret_cast<void*>(this));
}
...然后将其转回回调:
_stdcall BOOL EnumWindowsProc(HWND hw,LPARAM lp)
{
char title[255];
memset(title,0,255);
GetWindowTextA(hw,title,255);
qDebug() << title << endl;
// How can I access class MainWindow from this function ?
MainWindow* that = reinterpret_cast<MainWindow*>(lp);
return true;
}