2010-02-02 40 views
8

我有一個640x480的openGL窗口,我需要居中在屏幕中間。我以前用過:居中使用GLUT的OpenGL窗口

glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN)-640)/2, 
         (GetSystemMetrics(SM_CYSCREEN)-480)/2); 

哪個有問題。

但現在突然當我編譯的...

Linking... 
1>Project1.obj : error LNK2028: unresolved token (0A000372) "extern "C" int __stdcall GetSystemMetrics(int)" ([email protected]@[email protected]) referenced in function "int __cdecl main(int,char * *)" ([email protected]@[email protected]) 
1>Project1.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall GetSystemMetrics(int)" ([email protected]@[email protected]) referenced in function "int __cdecl main(int,char * *)" ([email protected]@[email protected]) 
1>C:\Users\My Computer\Documents\School Stuff\CS445\Project1\Debug\Project1.exe : fatal error LNK1120: 2 unresolved externals 

有人請幫助。這對我來說非常煩人和令人沮喪,因爲我對OpenGL和GLUT瞭解不多。

回答

19

此外,而不是鏈接USER32.LIB可以單獨使用過剩做到這一點:

glutGet(GLUT_SCREEN_WIDTH) // returns Screen width 

glutGet(GLUT_SCREEN_HEIGHT) // returns Screen height 

爲什麼取決於窗口時,你可以跨平臺?

因此,你的代碼看起來:

glutInitWindowPosition((glutGet(GLUT_SCREEN_WIDTH)-640)/2, 
         (glutGet(GLUT_SCREEN_HEIGHT)-480)/2); 
+0

謝謝!我以前曾嘗試過使用過這種軟件,但不幸失敗了,但是由於您的原因,此代碼再次運行。 – 2010-02-02 05:18:26

1

您需要確保鏈接到User32.lib,這是定義GetSystemMetrics()的靜態庫。打開您的項目設置並確保User32.lib已列在您鏈接的所有.lib中。

+0

哪裏是在Visual C項目設置++?除了實際的代碼之外,我沒有搗亂任何東西,所以如果在這之前突然停止工作,它會如何工作? – 2010-02-02 04:53:45

+0

如果你知道一個以OpenGL窗口爲中心的替代方法,我也會很感激。無論哪種方式工作都可以,但這確實奏效,編譯器錯誤超出了我的理解。 – 2010-02-02 04:55:17

+0

好吧,我發現如何獲得項目屬性和鏈接器,但User32.lib位於何處? – 2010-02-02 05:04:53