2010-02-02 72 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