0

クラス内で静的メソッドを宣言して、クラス外から呼び出す以外に別の方法はありますか?

これが私のコードです(コメントとしてマークされた質問を参照してください)

#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);
}
4

1 に答える 1

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;
}
于 2012-10-11T18:57:37.447 に答える