API函数的调用(包含一个大小写的问题)
遇到问题:
今天做的一个程序要调用AnimateWindow()函数来实现窗口的动画效果,参考书上在类的成员函数中直接调用该函数,没有做任何处理。然而实验时发现编译通不过。
解决过程:
查看MSDN后,发现AnimateWindow()函数说明中有以下描述
Function Information
Header Declared in winuser.h, include windows.h
Import library user32.lib
Minimum operating systems Windows 98, Windows 2000
可见:
1.要添加#include"winuser.h"或#include"windows.h"语句;
2.在弹出菜单中选择:项目-"工程名"+属性-链接器-输入-附加依赖项,将user32.lib添加进去
但此时编译时还是认不出AnimateWindow()及其参数,在AnimateWindow()上点击右键选"转到声明",发现在winuser.h文件中对AnimateWindow()的声明如下:
#if(WINVER >= 0x0500)
WINUSERAPI
BOOL
WINAPI
AnimateWindow(
IN HWND hWnd,
IN DWORD dwTime,
IN DWORD dwFlags);
#endif /* WINVER >= 0x0500 */
可见如果WINVER的取值不满足WINVER >= 0x0500的条件的话,AnimateWindow()函数的声明将不被编译,在WINVER上点击右键选"转到定义",发现在stdafx.h文件中对WINVER的定义如下:
#ifndef WINVER // 允许使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0400 //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
这样问题就出来了,由于WINVER的值不满足WINVER >= 0x0500的条件,导致AnimateWindow()函数的声明不被编译,将#define WINVER 0x0400语句改成#define WINVER 0x0500,再编译,就发现AnimateWindow()函数已经可以识别了。
但是AnimateWindow()函数的一个参数宏仍然不能识别,而其它的参数宏却可以,经过检查发现由于参数宏都是大写字母,是自己一时粗心看错了拼写导致的,改成正确的拼写后程序编译通过!
心得体会:
1.“转到定义“的解决问题的方法十分重要。
2.对于宏等全大写字母的标志要注意拼写。
3.MSDN要仔细的阅读。