EnumDisplayMonitors EnumProc回调

时间:2014-10-17 07:16:57

标签: c++ windows api winapi

如何传递指针并将指针返回dwData中的EnumDisplayMonitors

#include <Windows.h>
#include <stdio.h>

BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {

    dwData = ((LPARAM)&hMonitor);
    return true;
}

void main()
{
    TCHAR* monitorHandle[100];
    EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, (LPARAM)(&monitorHandle));
}

1 个答案:

答案 0 :(得分:2)

您需要将dwData参数强制转换为其预期的指针类型,然后取消引用它以分配给它,如下所示。

#include <Windows.h>
#include <stdio.h>

BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{    
    *reinterpret_cast<HMONITOR*>(dwData) = hMonitor;
    return true;
}

int main()
{
    HMONITOR monitorHandle = NULL;
    EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, reinterpret_cast<LPARAM>(&monitorHandle));
    printf("%p", monitorHandle);
    return 0;
}

在main中,我们传递一个指向HMONITOR(也就是monitorHandle的地址)的指针。然后在回调中,我们将dwData参数转换回HMONITOR指针。我们取消引用它以分配给它,然后将其打印在main中以检查它是否已正确分配或是否仍然是NULL

顺便说一句,main总是返回一个整数!