初始化全局变量的问题

时间:2011-02-24 09:42:28

标签: c++ windows window

我最近开始使用本教程学习Win32 API:

http://www.winprog.org/tutorial/(虽然我正在使用C ++,而不是教程中的C) 我正在尝试使用“编辑框”功能,我正在尝试将编辑框中写入的文本与另一行字符进行比较。 代码:

#define IDC_MAIN_EDIT   101

代码:

case WM_CREATE:
{
    HFONT hfDefault;
    HWND hEdit;

    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
        WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 
        0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);
    if(hEdit == NULL)
        MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR);

    hfDefault = GetStockObject(DEFAULT_GUI_FONT);
    SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
}
break;
case WM_SIZE:
{
    HWND hEdit;
    RECT rcClient;

    GetClientRect(hwnd, &rcClient);

    hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
    SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
}
break;

代码:

bool comparison (HWND hEdit) {
LPWSTR pszText;
DWORD dwTextLength;
DWORD dwBufferSize;

dwTextLength = GetWindowTextLength(hEdit);
dwBufferSize = dwTextLength + 1;

GetWindowText(hEdit, pszText, dwBufferSize);

if(pszText == TEXT("3")) {
    return true;
}
else {
    return false;
}
}

当我调用“比较”函数时,问题是pszText和hEdit没有被初始化。我明白为什么pszText没有,我已经尝试使用new / delete来修复它,但我没有让它工作。我对hEdit一无所知。我可能使用GetWindowText函数错了吗? 警告 代码:

警告C4700:使用未初始化的局部变量'pszText' 警告C4700:未初始化的局部变量'hEdit'使用

运行时检查失败(当我使用该功能时出现,这只是其中之一) 代码:

运行时检查失败#3 - 正在使用变量'hEdit'而不是初始化

3 个答案:

答案 0 :(得分:1)

pszText是指针类型。因此,在使用它之前,需要为它分配内存。

这样做:

wchar_t *pszText = new wchar_t[size]; //calculate or guess `size`

答案 1 :(得分:1)

是的,您必须为GetWindowText()分配一个缓冲区来存储其数据。 LPWSTR中的“LP”表示该变量实际上是指针而不是已分配的对象。

这种风格被称为“匈牙利符号”,在我个人看来,它唯一的用途是隐藏程序员的基本C语法,以便创造更多的错误。

答案 2 :(得分:0)

研究范围这个非常重要的概念。请参阅此页面http://www.cplusplus.com/doc/tutorial/variables/

c ++代码:

  case WM_CREATE:

  {

          HFONT hfDefault;

          HWND hEdit;



          hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",

              WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,

              0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);

          if(hEdit == NULL)

              MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR);



          hfDefault = GetStockObject(DEFAULT_GUI_FONT);

          SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));

      } 

变量hEdit仅在声明它的块的持续时间内存在,这在WM_CREATE情况的{}内。