2012-10-11 39 views
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); 
} 

回答

2

在Windows世界这样做的典型方法是将指针传递给枚举函数,就像这样:

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; 
}