【发布时间】:2011-02-24 09:42:28
【问题描述】:
我最近开始使用本教程学习 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' 未经初始化就被使用
【问题讨论】:
-
你是怎么调用
comparison函数的? -
在 C++ 中,只有在获得变量的初始值后,才能声明变量。例如。
HFONT hfDefault = GetStockObject(...。这会阻止您在初始化变量之前使用它,这是 C 中的常见错误。