2013-12-20 3 views
1

Я пытаюсь использовать API Windows, и у меня возникло множество проблем. Самое последнее: я включил Windows.h и временно Winuser.h, но MonitorFromWindow (и связанные с ним поля, такие как MONITOR_DEFAULTTONEAREST) ​​отсутствуют. В частности,Почему MonitorFromWindow отсутствует/не объявлен? (C++/WINAPI)

...'MONITOR_DEFAULTTONEAREST' was not declared in this scope 

и

...'MonitorFromWindow' was not declared in this scope. 

Другие методы показывают, просто отлично, как LoadImage и CreateWindow. Есть ли какое-то включение, которое мне не хватает? Я не думаю, что это способ, которым я назвал методы, или даже способ включения заголовочных файлов, но если вы спросите, я все равно могу опубликовать свой код. Там не так много.

Редактировать: когда я проверяю, что определено в области видимости, ближайшими методами являются ModifyWorldTransform (...) и MonikerCommonPrefixWith (...); ближайшие поля начинаются с MONITOR_INFO, за исключением MONITOR_ENUMPROC. Нет MONITOR_DEFAULTTONEAREST/NULL/etc.

Edit 2:

#define UNICODE 
#define _WIN32_WINNT 0x0500 
#include <iostream> 
#include <process.h> 
#include <windows.h> 
#include <winuser.h> 

...

HMONITOR monitor = NULL; 
HWND CreateFullScreenWindow(HWND hwnd){ 
    if(monitor==NULL){ 
     monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); 
    } 
    return hwnd; 
} 
+0

Какой компилятор/версия вы используете? Можете ли вы привести короткий полный пример? –

+1

Доступен с Windows 2000, вы должны установить _WIN32_WINNT как минимум на 0x500. –

+0

Я думал, что знаю точно, но я использую Eclipse и перечисляет несколько компиляторов в разных местах. Итак, MinGW или GCC C++. –

ответ

5
#define UNICODE 
#define _WIN32_WINNT 0x0500  // Windows 2000 
#include <windows.h> 

auto main() -> int 
{ 
    (void) MonitorFromWindow; 
} 

Это только проблема, если поддерживает ОС Windows набора инструментов 2000 или более ранних версий, так как очевидно, MinGW г ++ компилятор делает.


Соответствующий заголовок раздела с MinGW г ++ 4.7.2 <winuser.h>:

#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410) 
WINUSERAPI HMONITOR WINAPI MonitorFromPoint(POINT,DWORD); 
WINUSERAPI HMONITOR WINAPI MonitorFromRect(LPCRECT,DWORD); 
WINUSERAPI HMONITOR WINAPI MonitorFromWindow(HWND,DWORD); 
#endif 
+0

Возможно, я сделал это неправильно, но я использовал те же определения и включения, что и вы - плюс winuser.h - и он по-прежнему не работает. Должен ли я использовать другой компилятор? Редактировать: Eclipse по-прежнему блокирует вызовы, но компилятор счастлив. Я вернусь, когда выясню, все ли поведение или нет. –

1

docs говорят

Minimum supported client 
    Windows 2000 Professional [desktop apps only] 

Я подозреваю, что вам нужно установить WINVER в 0x500 или больше.

+3

Это то, что он говорит для * всех * из них, например CreateWindow –

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