0

修订版 1:

我无法很好地掌握 WinAPI 的AllocConsole();功能。我要么需要选项一,要么需要选项 2。不过最好两者都有:)。提前致谢。这是选项1:

单击 BUTTON_1 时,从 WinAPI 程序创建一个控制台窗口。控制台需要能够输出文本(如cout),以及休眠/延迟打印文本。(有点像Sleep()

选项 2:

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

4

2 回答 2

0

我的建议是使用

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

于 2012-12-16T10:37:11.603 回答
0

假设您将字符串附加到编辑控件,也许是为了记录一些冗长过程的 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

于 2012-12-15T18:24:59.183 回答