You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Win32获取文本框输入传入MessageBox及表达式错误修复

问题根源

你遇到的expression cannot be used as a function编译错误,直接触发原因是MessageBox调用里的字符串参数写法不符合C++语法:

"I am" ()textSaved "and i am Beautiful!"

C++仅支持相邻的字符串字面量自动拼接,字符数组变量不能直接和字面量靠在一起拼接。你写的空括号()会让编译器认为你要把"I am"这个const char*当作函数调用、传入textSaved作为参数,自然会报“表达式不能作为函数使用”的错误。

除此之外你的代码还有两处逻辑问题会导致运行/编译异常:

  • WM_COMMAND分支写法完全错误:你是在switch (message)结构下写分支,case 1:对应的是消息码值为1的系统消息,和ID为1的按钮完全无关,按钮点击的逻辑永远不会被触发;且两个case之间没有break,会导致分支穿透。
  • case分支内直接定义局部变量,不加块作用域大括号会触发变量重定义/作用域相关的编译错误。

修正方案
  1. 修复WM_COMMAND分支判断逻辑:收到WM_COMMAND消息时,先判断低16位wParam是不是按钮ID 1,高16位wParam是不是按钮点击通知BN_CLICKED,再执行后续逻辑。
  2. 提前定义足够长度的输出缓冲区,用字符串拷贝/拼接函数把前缀、输入内容、后缀拼到缓冲区里,再传给MessageBox。
  3. 给每个case内的逻辑块加上大括号明确作用域,避免变量作用域编译错误。

修正后的核心消息处理逻辑参考:

switch (message)
{
    case WM_CREATE:
    {
        TextBox = CreateWindowA("EDIT",
            "",
            WS_VISIBLE|WS_CHILD|WS_BORDER,
            10,10,80,20,
            hwnd,NULL,NULL,NULL);

        CreateWindowA("BUTTON",
            "GO",  
            WS_VISIBLE|WS_CHILD|WS_BORDER,
            100,10,70,20,
            hwnd,(HMENU)1,NULL,NULL);
        break;
    }
    case WM_COMMAND:
    {
        // 判断是否为ID=1的按钮触发的点击事件
        if (LOWORD(wParam) == 1 && HIWORD(wParam) == BN_CLICKED)
        {
            char textSaved[50] = {0};
            char msgBuf[256] = {0};
            GetWindowTextA(TextBox, textSaved, sizeof(textSaved));
            // 拼接待展示的字符串
            strcpy(msgBuf, "I am ");
            strcat(msgBuf, textSaved);
            strcat(msgBuf, " and i am Beautiful!");
            
            MessageBoxA(
                    hwnd,
                    msgBuf,
                    "smile",
                    MB_YESNO);
        }
        break;
    }
    // 其余原有消息分支保持不变
}

注:如果你项目配置的是Unicode字符集,把上述代码里的char替换为wchar_t,strcpy/strcat替换为wcscpy/wcscat,CreateWindowA/GetWindowTextA/MessageBoxA替换为不带A后缀的默认宏版本即可。


内容的提问来源于stack exchange,提问作者Keldroph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:51:22