【问题标题】:How to add text to existing text in static control in win32如何在win32中的静态控件中将文本添加到现有文本
【发布时间】:2012-07-27 06:02:10
【问题描述】:

我正在使用visual studio rc 在win32 c 中制作一个程序,但我不知道如何完成这个看似简单的任务。我有一个静态文本控件、一个编辑控件和一个按钮。当用户单击按钮时,我不希望程序获取编辑控件中的文本并将其添加到静态文本框中的任何内容中。经过很多头痛和各种尝试,我仍然无法让它工作。我可以很好地从编辑控件中检索文本,但是任何将其添加到静态控件的尝试都会崩溃。好吧,实际上只是为了澄清,我可以很好地设置文本;它只是添加到使程序崩溃的现有文本中。有人可以发布一些代码,让我可以使用 GetWindowText() 和 SetWindowText() 来执行此操作,(或者如果它更可取的话)。这是我所拥有的:

SendMessage(hwndEditControl, WM_GETTEXT,255,(LPARAM)editbuffer);
GetWindowText(hwndTextControl, (LPWSTR)allText, GetWindowTextLength(hwndTextControl));
//function to add data, please create on
SetWindowText(hwndTextControl, (LPCWSTR)allText);}
//where
static TCHAR*       editbuffer = new TCHAR; //feel free to change these declarations
static TCHAR*       allText    = new TCHAR;

非常感谢任何帮助!谢谢!

【问题讨论】:

  • 你的缓冲区只有一个字符长...为什么不只是一个普通数组?
  • 如果你想考虑实际长度,你必须这样做,因为new 不是 C。
  • 您的缓冲区是 TCHAR 并且您在调用函数时将它们转换为 WCHAR。如果您使用的是 TCHAR,那么如果函数需要它们,它们就已经是 WCHAR。
  • 您应该为一个缓冲区中编辑框中的文本长度分配足够的内存,再加上一个用于 null 的内存,以及将两者放在一起(加一个)在另一个缓冲区中的长度。您还应该使用适当的 (TCHAR) 版本的 strcat
  • 如果你有 C99,你可以使用 VLA,否则更像TCHAR *editBuffer = malloc (sizeof(TCHAR) * (editboxTextLength + 1)); TCHAR *all = malloc (sizeof(TCHAR) * (editboxTextLength + staticTextLength + 1)); copyEditToEditBuffer(); copyStaticToAllBuffer(); appendEditBufferToAllBuffer();

标签: c winapi textbox win32gui


【解决方案1】:

您只为字符串缓冲区保留一个字符。所以不是

static TCHAR*       editbuffer = new TCHAR;
static TCHAR*       allText    = new TCHAR;

你必须保留更多的内存,例如:

static TCHAR*       editbuffer = new TCHAR[255];
static TCHAR*       allText    = new TCHAR[255];

这将为您提供可以容纳 254 个字符和终止空字符的字符串缓冲区。

不过,我建议您只在函数内部的堆栈中保留内存:

void OnButtonClick()
{
    TCHAR editbuffer[255] = {0};
    TCHAR allText[255] = {0};
    ...
}

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多