我是一名学生,正在寻求帮助,因此我可以处理要通过的项目。 我不是母语人士,我不会说流利的英语,但相信我,我会尽力而为。
我的教授希望我仅使用控制台中的Windows.h来用C ++编写“文本编辑器”。首先,最简单的情况是最多获取6个字母,然后在屏幕上打印出来。第二,半大写字母最多可输入6个字母,但每个字母都必须按Enter键后才能输入。第三-最难的是最多获取6个字母,但如果会有更多的字母,则文字应被覆盖。
示例:E X A M P L E S-> E S A M P L E S
因此,我首先需要一些线索或想法。其次,我需要一些帮助来理解Windows.h。我读了很多文档,但是在这里,我说WriteConsole函数对我来说是个黑魔法:
lpNumberOfCharsWritten [输出] 指向一个变量的指针,该变量接收实际写入的字符数。
我一点也不明白。我只需要将选定的键写入缓冲区,然后将其打印出来即可。 我被卡住了。
谢谢您的每一个回答。 //编辑
有了您的两个答案,我终于继续前进了,谢谢您的宝贵时间。
但是我现在在打印特定密钥到控制台时遇到问题。
**
while (counter++ <= 100)
{
// Wait for the events.
for (i = 0; i < cNumRead; i++)
{
switch (irInBuf[i].EventType)
{
case KEY_EVENT: // keyboard input
++dwWriteCoord.X;
KeyEventProc(irInBuf[i].Event.KeyEvent);
WriteConsoleOutputCharacter(hStdout,
irInBuf[i].Event.KeyEvent.uChar, // this line is wrong
1,
dwWriteCoord,
&cNumRead);
break;
default:
break;
}
}
}
** 我继续进行文档编制,但我不知道如何打印特定密钥。
此刻,我将KeyEventProc保留为空。
所以我只想按f并在屏幕上打印'f',然后按o并在屏幕上打印'o'。
答案 0 :(得分:2)
让我们复制文档以供参考
from
lpNumberOfCharsWritten [out]指向接收变量的变量的指针 实际书写的字符数。
因此,我们知道第四个参数必须是指向变量的指针。什么类型的变量?好吧,指针是to
。用微软的话来说,0
是指向X的指针,所以valid_to
是BOOL WINAPI WriteConsole(
_In_ HANDLE hConsoleOutput,
_In_ const VOID *lpBuffer,
_In_ DWORD nNumberOfCharsToWrite,
_Out_ LPDWORD lpNumberOfCharsWritten,
_Reserved_ LPVOID lpReserved
);
。 LPDWORD
是一些未指定的32位类型。可能是LP-X
,可能是LPDWORD
。您不需要关心。
无论哪种方式,您都应该非常了解C ++,知道DWORD*
是地址运算符,因此DWORD
是指向std::unit32_t
的指针。
答案 1 :(得分:0)
以下内容将反向写入一个字符串。因此,这是WriteConsoleOutputCharacter函数的示例。它获取当前光标位置,然后将X值增加字符串的长度。然后,它会写出每个字符,从第一个字符开始,然后递减每个字符的光标位置。
int main()
{
HANDLE hStdOut;
wchar_t s[] = L"reverse";
CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
COORD dwWriteCoord;
DWORD NumberOfCharsWritten;
std::wcout << s << '\n';
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut, &ConsoleScreenBufferInfo);
dwWriteCoord = ConsoleScreenBufferInfo.dwCursorPosition;
dwWriteCoord.X += wcslen(s);
for (int i = 0; i < wcslen(s); ++i) {
--dwWriteCoord.X;
WriteConsoleOutputCharacter(hStdOut, s+i, 1, dwWriteCoord, &NumberOfCharsWritten);
}
return 0;
}
名称WriteConsoleOutputCharacter似乎令人困惑。它写的是字符 s (复数,因此是字符串),而不是字符。