首先,说下我已经设置了的选项:
TOOLS—>Options—>directories 里:
Executable Files 设置了安装好的bin和bin\winnt路径,并提到了最前。
Include 设置了安装好的SDK中的include路径,并提到了最前。
Lib 设置了安装好的SDK中的Lib路径,并提到了最前。程序示例,调用SetLayeredWindowAttributes(this->GetSafeHwnd(),0,205,2);编译不通过。注释掉,随便选了个winuser.h里面的函数SetParent调用。
//SetLayeredWindowAttributes(this->GetSafeHwnd(),0,205,2);
SetParent(0);编译通过并完成。
用右键Go to Definition Of SetParent.
转到了winuser.h搜索SetLayeredWindowAttributes,找到了SetLayeredWindowAttributes的定义如下:
WINUSERAPI
BOOL
WINAPI
SetLayeredWindowAttributes(
    HWND hwnd,
    COLORREF crKey,
    BYTE bAlpha,
    DWORD dwFlags);返回到自己的CPP,Go to Definition Of SetLayeredWindowAttributes 提示未定义。我就奇怪了,这函数明明和SetParent在一个头文件,为什么SetParent都行,它就不行呢?哪位大大解释下,说下解决方法。下载SDK就是为了调用一些比较新的函数的时候方便点。不想却出现这事。注意:SetLayeredWindowAttributes只是个测试例子,并不是我的目的。请别说用GetModuleHandle然后GetProcAddress之类的调用函数方法。

解决方案 »

  1.   

    最新的SDK不直接支持VC6.0
    要手动将所需的链接库和头文件加到工具里
      

  2.   

    不是最新的SDK,是最后一个支持6.0的SDK,安装的时候选择的全部安装。主要的是,那函数明明定义在了winuser.h里面了,还提示未定义。
      

  3.   

    Visual C++ 6.0 支持的最新 SDK 是 Windows Server 2003 Platform SDK。
    之后的SDK是不提供支持的。
      

  4.   

    用VC6建议不要用新的SDK了,虽然可能也行,但是VC6的C++编译器确实是老了,
    写出来的代码不符合C++标准,将来复用要麻烦了。
      

  5.   

    #define _WIN32_WINNT  0x0501
    晕,定义个这个就解决了的,早就该想到的擦
      

  6.   

    以SetLayeredWindowAttributes为例,这个API只能工作在Windows 2000以上,实现窗口半透明等效果。定义之后你的程序就不能支持Win9X和NT4了。
      

  7.   

    还不如用LoadLibrary动态加载,之前判断,使得之前的系统也能运行。
      

  8.   


    SetLayeredWindowAttributes是Windows 2000提供的一个新函数,Win9x/NT 4.0不支持。
    系统都不支持,程序就不用说了,怎么调用都不行。