WinAPI - 如何打印文本以编辑控件
WinAPI - How to print text to edit control?
修订版 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 调用。
相关文章:
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 如何使用 c++ 实现并发文件/文本编辑?
- 如何在文本编辑器中处理 [-Wc++11-extensions]
- QT 创建器只会将第一个单词从文本编辑转换为纯文本
- 在C++的“编辑”文本框中禁用文本编辑,同时保持启用滚动
- 如何在Windows中将使用Qt制作的记事本设置为默认文本编辑器
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- 要求文本编辑,文本格式
- 如何将库导入文本编辑器
- 富文本编辑器--创建和维护项目符号列表时的问题
- 使用Strncpy在C++中创建一个简单的文本编辑器
- Qt C++ 如何在文本编辑的开头获取光标
- 在C 中创建简单的文本编辑器
- 在QT中遇到了丰富的文本编辑问题
- 递归功能以创建文本编辑
- 简单的C++文本编辑程序
- std::ifstream 在将文本编辑器从记事本++切换到Sublime Text 2以使用它正在读取的文件后无法读入?
- 使用 C++ 获取默认的 Windows 文本编辑器.exe路径
- 使用文本编辑器打开一个 txt 文件,而它已经被 "fopen()" 打开并正在使用中?