全局范围中定义的HWND变量会中断编译

时间:2011-08-26 04:33:57

标签: c++ winapi

出于某种原因,当我在全局范围内声明我的控件时,我的应用程序将无法编译。当我声明变量内联时,一切都很好。以下内容无法编译:

 //Global
    HWND hEdit;

    ...

    case WM_CREATE:
            {
                // Create an edit box
                 hEdit= CreateWindowEx(WS_EX_CLIENTEDGE,
                    "EDIT",
                    "",
                    WS_CHILD|WS_VISIBLE|
                    ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
                    50,
                    100,
                    200,
                    100,
                    hwnd,
                    (HMENU)IDC_MAIN_EDIT,
                    GetModuleHandle(NULL),
                    NULL);
                HGDIOBJ hfDefault = GetStockObject(DEFAULT_GUI_FONT);

...

}
break;

以下内容无法编译。错误是:

  

'HGDIOBJ':非法使用此类型作为表达式

但是,如果我在我的交换机内定义hEdit内联,则此错误会消失。

所以这将编译:

 case WM_CREATE:
        {
            // Create an edit box
            HWND hEdit= CreateWindowEx(WS_EX_CLIENTEDGE,
                "EDIT",
                "",
                WS_CHILD|WS_VISIBLE|
                ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
                50,
                100,
                200,
                100,
                hwnd,
                (HMENU)IDC_MAIN_EDIT,
                GetModuleHandle(NULL),
                NULL);
            HGDIOBJ hfDefault = GetStockObject(DEFAULT_GUI_FONT);
...

} break;

我必须忽略一些简单但我找不到的东西。有人能告诉我我在忽视什么吗?

由于

2 个答案:

答案 0 :(得分:1)

Argg ...我用.c而不是.cpp

命名了这个文件

不确定为什么他们会导致我看到的问题,但我注意到我也收到了“未声明的标识符”错误。重命名文件就可以了。我想我会称之为晚上:)

感谢您的评论和回复。

答案 1 :(得分:0)

你的全局变量是否在#include之前声明了?