gpt4 book ai didi

c - 单击后如何删除文本?

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:54 29 4
gpt4 key购买 nike

我正在为我自己的视觉小说游戏引擎制作原型(prototype)。

while (i < 5)
{
switch (iMessage)
{
case WM_LBUTTONDOWN:
{
//InvalidateRect(hWnd, NULL, TRUE);
HDC hdc;
hdc = GetDC(hWnd);
_wsetlocale(LC_ALL, L"Korean");
ReadScn(buf);
//MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, char, strlen(buf), buf3, 256);
CharToWChar(buf, buf2);
TextOut(hdc, 320, 300, buf2, lstrlen(buf2)); //읽어들여서 출력함.
//TCHAR*str = TEXT("beautiful korea");
//TextOut(hdc, 320, 240, str, lstrlen(str));
ReleaseDC(hWnd, hdc);
i++;
return 0;
}
}

我向 scn.txt 写入了 5 行文本。然后程序将文本打印到窗口,但文本行重叠。

如何在点击后删除之前的文本并打印新的文本行?

最佳答案

处理此问题的正确方法是根本不要从WM_LBUTTONDOWN 消息处理程序内部在窗口上绘制任何内容。该逻辑属于 WM_PAINT 消息处理程序。让 WM_LBUTTONDOWN 处理程序将当前文本行保存到一个变量,然后 InvalidateRect() 窗口触发重绘。 WM_PAINT 处理程序可以在需要绘制窗口时绘制当前行(在单击按钮之间可能发生不止一次)。

试试这个:

case WM_LBUTTONDOWN:
{
_wsetlocale(LC_ALL, L"Korean");
ReadScn(buf); //read text from scn.txt and keep it in buf line by line.
CharToWChar(buf, buf2); //convert char into wChar.
InvalidateRect(hwnd, NULL, TRUE); //trigger a repaint
return 0;
}

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 320, 300, buf2, lstrlen(buf2));
EndPaint(hwnd, &ps);
return 0;
}

关于c - 单击后如何删除文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38494204/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com