WinAPI - 如何打印文本以编辑控件

WinAPI - How to print text to edit control?

本文关键字:文本 编辑 控件 打印 何打印 WinAPI      更新时间:2023-10-16

修订版 1:

我无法很好地掌握WinAPI的AllocConsole();功能。我要么需要选项一,要么需要选项二。虽然:),但最好两者都有。提前谢谢。下面是选项 1:

单击BUTTON_1时从 WinAPI 程序创建控制台窗口。控制台需要能够输出文本(如 cout ),以及不打印睡眠/延迟文本。(类似Sleep()

选项 2:

程序不会像选项 1 那样将文本打印到控制台窗口,而是将文本打印到用户无法访问的编辑框。这还需要能够使用 Sleep() 之类的东西来延迟文本的打印。

假设您要将字符串追加到编辑控件,也许是为了记录一些冗长过程的 TTY 样式输出:

使用EM_SETSEL消息选择最后一个字符后面的范围,然后使用 EM_REPLACESEL 将其替换为要追加的字符串。发生这种情况时,编辑控件将滚动。例如,如果 hEdit 是编辑控件的句柄,并且str追加以 0 结尾的字符串:

int idx=GetWindowTextLength(hEdit);
SendMessage(hEdit,EM_SETSEL,idx,idx);
SendMessage(hEdit,EM_REPLACESEL,0,(LPARAM)str);

这是此知识库文章推荐的过程:http://support.microsoft.com/kb/109550

我的建议是使用

SendMessage(hEditBox,EM_SETSEL,-2,-2);

将插入符号移动到编辑控件中文本的末尾。它为您节省了一次函数调用,并且可以工作。

关于与睡眠相关的部分,我认为最好使用计时器,它应该可以正常工作。

前任。

// somewhere in the code where you decide to make changes to the edit control
...
SetTimer(hWnd,TIMER_ID,1000,0);  // TIMER_ID is arbitrary, the delay is set to 1000 ms
...
// main procedure message 
switch (uMsg) {
   ...
   case WM_TIMER:
      SendMessage(hEditBox,EM_SETSEL,-2,-2);
      SendMessage(hEditBox,EM_REPLACESEL,0,buffer);
      KillTimer(hWnds,TIMER_ID);
   ...
}

您可能希望为此投入更多工作,例如重用 SetTimer 调用。