繁体   English   中英

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

[英]WinAPI - How to print text to edit control?

修订1:

我对WinAPI的AllocConsole();不太了解AllocConsole(); 功能。 我要么需要选项一,要么就需要选项2。最好同时拥有两者:)。 提前致谢。 这是选项1:

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

选项2:

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

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

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

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调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM