" GradientFill未在此范围内声明"包含windows.h和wingdi.h时出错

时间:2016-05-15 20:03:07

标签: c++ winapi codeblocks

以下是代码:

#include <windows.h>
#include <wingdi.h>
#include <tchar.h>
#include <string>
#include <iostream>

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) //handling the message; all cases should be in logical order
    {
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc;
            GRADIENT_RECT rc;
            TRIVERTEX vertex[2] ;
            //vertex settings...

            hdc = BeginPaint(hwnd, &ps);
            GradientFill(hdc, vertex, 2, &rc, 1, GRADIENT_FILL_RECT_V);
            EndPaint(hwnd, &ps);
            break;
        }
    }
}

我从标题中获取消息,当我切换wingdi.h和windows.h时,我收到来自wingdi.h文件的错误。 我使用的是代码块。

1 个答案:

答案 0 :(得分:1)

GradientFill的文档告诉您,哪个标头声明了一个符号以及要包含的标头:

  

标题:WinGdi.h(包括Windows.h)

WinGdi.h 中声明GradientFill时,您应该只#include <Windows.h>

<小时/> 注意:如果这不能解决您的问题,您可能需要考虑选择另一个IDE。众所周知,Code :: Blocks很脆弱,存在很多问题,而且对于错误的默认值(例如ANSI / Codepage字符编码与Unicode)有一个软点。 Visual Studio Community 2015是一个功能齐全的IDE,可以免费使用。