使用GLUT使OpenGL窗口居中

14

我有一个尺寸为640x480的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)" (?GetSystemMetrics@@$$J14YGHH@Z) referenced in function "int __cdecl main(int,char * *)" (?main@@$$HYAHHPAPAD@Z)
1>Project1.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall GetSystemMetrics(int)" (?GetSystemMetrics@@$$J14YGHH@Z) referenced in function "int __cdecl main(int,char * *)" (?main@@$$HYAHHPAPAD@Z)
1>C:\Users\My Computer\Documents\School Stuff\CS445\Project1\Debug\Project1.exe : fatal error LNK1120: 2 unresolved externals

有人可以帮忙吗?这对我来说非常烦人和沮丧,因为我对OpenGL和GLUT不是很了解。

3个回答

26

另外,你可以只使用glut来链接,而不是链接user32.lib:

glutGet(GLUT_SCREEN_WIDTH) // returns Screen width
并且
glutGet(GLUT_SCREEN_HEIGHT) // returns Screen height

为什么要依赖Windows,当你可以跨平台呢?

因此,您的代码应该是这样的:

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

谢谢!我之前曾尝试过使用这段代码,但是失败得很惨,现在用了你的代码它又能正常工作了。 - Aaron McKellar

1

你需要确保链接到User32.lib,这是定义GetSystemMetrics()的静态库。打开项目设置并确保User32.lib在你链接的所有.lib文件中列出。


Visual C++ 中的项目设置在哪里?除了实际代码之外,我没有乱动任何东西,所以如果这之前可以工作,为什么突然就停止工作了呢? - Aaron McKellar
如果您知道另一种居中OpenGL窗口的方法,我也会很感激。无论哪种方法都可以,只要这个方法有效,而编译器错误超出了我的知识范围。 - Aaron McKellar
好的,我找到了如何进入项目属性和链接器,但是User32.lib在哪里? - Aaron McKellar

0

首先: glutInitWindowSize(720, 720);

其次: glutInitWindowPosition(600, 200);

最后: glutCreateWindow("OpenGL 窗口");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接