2010-10-22 75 views
2

我無法在我的Qt應用程序中使用MonitorFromPoint函數。我有最新的Qt SDL 2010.05使用MinGW在Windows XP在Qt4應用程序中使用user32.dll中的函數

#include <QtCore/QCoreApplication> 
#include<windows.h> 
#include <winuser.h> 
int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    POINT pt; 
    MonitorFromPoint(pt,2); 
    return a.exec(); 
} 

我已將此添加到.pro文件

LIBS+= -luser32 

,其結果是

g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\include\QtCore" -I"..\include" -I"..\include\ActiveQt" -I"tmp\moc\debug_shared" -I"..\testUser32" -I"." -I"..\mkspecs\win32-g++" -o tmp\obj\debug_shared\main.o ..\testUser32\main.cpp 

mingw32-make[1]: Leaving directory `C:/Qt/2010.05/qt/testUser32-build-desktop' 

mingw32-make: Leaving directory `C:/Qt/2010.05/qt/testUser32-build-desktop' 

..\testUser32\main.cpp: In function 'int main(int, char**)': 

..\testUser32\main.cpp:8: error: 'MonitorFromPoint' was not declared in this scope 

mingw32-make[1]: *** [tmp/obj/debug_shared/main.o] Error 1 

mingw32-make: *** [debug-all] Error 2 

The process "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" exited with code %2. 
Error while building project testUser32 (target: Desktop) 
When executing build step 'Make' 

有人在IRC說這是一個mingw prolem,我應該使用visualc編譯器。切換編譯器需要時間,也許我會發現其他問題。我從wingdi.h導入了函數,我沒有問題。 我需要一個更好的解釋關於這個問題,你怎麼弄出來的和解決方案

P.S.我想獲得在多顯示器系統的屏幕geometryes,QDesktopWidget不能正常工作,請參閱Capture multiple screens desktop image using Qt4

+0

我不確定我的評論會有多可笑。但是,您可以手動包含函數signature.LOL,但它不是永久性的補救措施。但它應該工作。 – 2010-10-22 05:47:18

回答

1

我發現這個http://www.mingw.org/wiki/Use_more_recent_defined_functions

我又在擡頭看着被定義函數,我看到了這一點

#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410) 
WINUSERAPI HMONITOR WINAPI MonitorFromPoint(POINT,DWORD); 

這意味着此方法不適用於舊版本的Windows。 解決方案是定義

#include <QtCore/QCoreApplication> 
#define _WIN32_WINNT 0x0500 
#include<windows.h> 
#include <winuser.h> 
int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    POINT pt; 
    MonitorFromPoint(pt,2); 
    return a.exec(); 
} 
+1

最好在你的項目文件中定義這個環境變量。它不應該跨源文件不同;你最終會編譯Windows 2000的一半源代碼,另一半編譯Windows XP。這是特別痛苦的,因爲有些類型添加了新成員,所以他們的'sizeof'變化。 (這就是爲什麼這樣的結構有一個'cb'字段 - Windows檢查它看看你使用了什麼成員) – MSalters 2010-10-22 09:57:27

相關問題