首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我在消息框中看到象形文字

为什么我在消息框中看到象形文字
EN

Stack Overflow用户
提问于 2020-11-24 13:07:23
回答 1查看 100关注 0票数 1

我正在使用C++在我的Win32桌面应用程序上创建一个按钮,当按下该按钮时,将显示一个消息框,该消息框打印出文本框中的用户输入以及一些附加文本。但是,消息框显示象形文字,并给出错误C6054:字符串'buff‘可能不是以零结尾。我不确定为什么文本不能正确显示在消息框中。

代码语言:javascript
运行
复制
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
    
#define ENTER_BUTTON                2345

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR heading[] = _T("CD ROM READER");
    TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");

    switch (message)
    {
    case WM_CREATE:
    {
        TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
            WS_VISIBLE | WS_CHILD | WS_BORDER,
            150, 140, 250, 25,
            hWnd, NULL, NULL, NULL); 

        HWND hwndButton_Enter = CreateWindow(
            L"BUTTON", L"ENTER", 
            WS_VISIBLE | WS_CHILD | WS_BORDER,  //Styles
            405, 140, 70, 25,
            hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
      return 0;
    }

     case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
         case ENTER_BUTTON:
              
            int gwtstat = 0;
            TCHAR title[] = _T("CSCI_NO");
            gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);
            
            TCHAR buff[100];
            TCHAR name[] = _T("CSCI_NO");
            _tprintf(buff, L"The CSCI No you entered is: %s", &CSCI_NO[0]);
            MessageBox(hWnd, buff, title, MB_OK);
            break;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 13:39:59

首先需要初始化数组buff,否则会有未初始化的字符在输出时乱码。

然后,您应该使用swprintf而不是_tprintf (wprintf)将字符串输出到buff数组

我对代码做了如下修改,你可以参考一下:

代码语言:javascript
运行
复制
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR heading[] = _T("CD ROM READER");
    TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");
    TCHAR CSCI_NO[60] = L"";
    switch (message)
    {
    case WM_CREATE:
    {
        TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
            WS_VISIBLE | WS_CHILD | WS_BORDER,
            150, 140, 250, 25,
            hWnd, NULL, NULL, NULL);

        HWND hwndButton_Enter = CreateWindow(
            L"BUTTON", L"ENTER",
            WS_VISIBLE | WS_CHILD | WS_BORDER,  //Styles
            405, 140, 70, 25,
            hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
        return 0;
    }

    case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
        case ENTER_BUTTON:

            int gwtstat = 0;
            TCHAR title[] = _T("CSCI_NO");
            gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);

            TCHAR buff[100] = L"";
            TCHAR name[] = _T("CSCI_NO");
            wsprintf(buff, L"The CSCI No you entered is: %s", CSCI_NO);
            MessageBox(hWnd, buff, title, MB_OK);
            break;
        }
        return 0;
    }
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

这对我来说很管用:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64980557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档