2014-10-17 10 views
-1

Как передать и вернуть указатель на dwData в EnumDisplayMonitors?EnumDisplayMonitors EnumProc Обратный звонок

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

ответ

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

В основном, мы передаем указатель a HMONITOR (он же адрес monitorHandle). Затем в обратном вызове мы возвращаем параметр dwData обратно в указатель HMONITOR. Мы разыскиваем его, чтобы назначить ему, а затем распечатать его в главном, чтобы проверить, правильно ли он назначен или если он все еще NULL.

Btw, main всегда возвращает целое число!

+0

Спасибо! Я легко запутался. –

Смежные вопросы