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要仔细的阅读。

原文地址:https://www.cnblogs.com/toosuo/p/979957.html