//WIN32编辑框文本传参到另一个cpp里处理数据,但参数传输错误,代码如下
TCHAR name[] = {0};
TCHAR password[] = {0};
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_LOADBUTTON:
GetWindowText(LoadText,name,MAX_SIZE);//编辑框输入后这里name得到数据正确,例如传入admin
GetWindowText(PassText, password, MAX_SIZE);
if (CheckLoad(name, password)) {//name传到这个方法后name变成a123不知道为什么会不一致,后面附CheckLoad方法
//测试
char *createSystem = "创建学生系统窗口";
WriteConsole(g_hOutput, createSystem, strlen(createSystem), NULL, NULL);
}
else {
MessageBox(hWnd, "infor", "账号或密码错误", MB_OK);
}
break;
}
break;
...
bool CheckLoad(TCHAR *name, TCHAR *password) {
if (*name == L'admin' &&*password == 123) {
return true;
}
return false;
}
在 CheckLoad 方法中比较字符串内容的方式是错误的,应该使用字符串比较函数进行比较。此外,字符串 "admin" 和数字 123 都应该用字符串形式传入,而不是直接使用数字和字符常量。
TCHAR name[MAX_SIZE] = {0};
TCHAR password[MAX_SIZE] = {0};
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_LOADBUTTON:
GetWindowText(LoadText, name, MAX_SIZE);
GetWindowText(PassText, password, MAX_SIZE);
if (CheckLoad(name, password)) {
char *createSystem = "创建学生系统窗口";
WriteConsole(g_hOutput, createSystem, strlen(createSystem), NULL, NULL);
}
else {
MessageBox(hWnd, "账号或密码错误", "infor", MB_OK);
}
break;
}
break;
bool CheckLoad(TCHAR *name, TCHAR *password) {
if (_tcscmp(name, L"admin") == 0 && _tcscmp(password, L"123") == 0) {
return true;
}
return false;
}
注意,我还做了以下更改:
在定义 name 和 password 数组时,为了确保数组中有足够的空间存储编辑框中的文本,使用了 MAX_SIZE 常量。
在 CheckLoad 方法中,使用了 _tcscmp() 函数进行字符串比较。
在 MessageBox 函数中,将 "infor" 和 "账号或密码错误" 的位置颠倒,以符合函数的参数顺序。
因此,你可以将 CheckLoad 函数修改为如下所示:
bool CheckLoad(TCHAR *name, TCHAR *password) {
if (std::wcscmp(name, L"admin") == 0 && std::wcscmp(password, L"123") == 0) {
return true;
}
return false;
}
这个版本的 CheckLoad 函数使用 std::wcscmp 函数来比较两个字符串,并且使用正确的字符串常量来初始化字符串。
不知道你这个问题是否已经解决, 如果还没有解决的话: