C++ h-GUI作为CMD

C++ h-GUI作为CMD,c++,C++,我是一名学生,我正在寻求帮助,所以我可以处理通过的项目。 我不会说一口流利的英语,因为我不是本地人,但相信我,我会尽力的 int main() { HANDLE hStdOut; wchar_t s[] = L"reverse"; CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo; COORD dwWriteCoord; DWORD NumberOfCharsWritten; std::wcou

我是一名学生,我正在寻求帮助,所以我可以处理通过的项目。 我不会说一口流利的英语,因为我不是本地人,但相信我,我会尽力的

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;
}
我的教授希望我用C++中的“Windows编辑器”来制作“文本编辑器”,即控制台。首先,最简单的方法是最多打印6个字母,然后在屏幕上打印出来。第二,半格是最多6个字母,但每个字母在按下回车按钮后。第三,最难的是最多获得6个字母,但如果有更多的字母,文本应该被覆盖

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;
}
示例:E X A M p L E S->E S A M p L E S

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;
}
所以我首先需要一些线索或想法。其次,我需要一些帮助来理解Windows.h。我读了很多文档,但假设WriteConsole函数对我来说是一种黑魔法:

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;
}
LPNumberOfCharsWrited[输出] 指向接收实际写入字符数的变量的指针

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;
}
我一点也不明白。我只需要将所选的键写入缓冲区,然后打印出来。 我卡住了

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;
}
谢谢你的回答。 //编辑

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;
}
有了你的两个答案,我终于离开了,谢谢你抽出时间

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;
}
但我现在无法将特定密钥打印到控制台

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;
}
**

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;
}

while(counter++让我们复制文档以供参考

BOOL WINAPI WriteConsole(
  _In_             HANDLE  hConsoleOutput,
  _In_       const VOID    *lpBuffer,
  _In_             DWORD   nNumberOfCharsToWrite,
  _Out_            LPDWORD lpNumberOfCharsWritten,
  _Reserved_       LPVOID  lpReserved
);
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;
}
LPNumberOfChars写入[输出]指向接收 实际写入的字符数

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;
}
所以我们知道第四个参数必须是指向变量的指针。什么类型的变量?指针是
LPDWORD
。在微软,LP-X
是指向X的指针,因此
LPDWORD
DWORD*
。而
DWORD
是一些未指定的32位类型。可能是
std::unit32\t
,也可能是
unsigned long
。你不必在意

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;
}

任一种方式,您应该知道C++足够好,知道<代码>和>代码>是地址运算符,所以<代码>变量>代码>是指向“代码>变量的指针。

< P>下面将写一个反向字符串。因此它是Wrand EndoSeOutPutter字符函数的一个例子。它得到当前的光标位置,然后用T来推进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;
}
intmain()
{
处理HST输出;
wchar_t s[]=L“反向”;
控制台屏幕缓冲区信息控制台屏幕缓冲区信息;
库德·德维特科德;
德沃德数字签名;

STD::听起来,你需要抓取Charles Petzold的一本古著作,它涵盖了如何使用裸Windows API编写应用程序。此后,所有其他的文章都讨论了使用各种Windows C++库的C++方法,而不是<代码> Windows .H</代码>。哇,现在已经20年了。但是这本书本身也无济于事。这是一个逻辑思考的问题。Petzold假设你可以编程,特别是在C语言中,但你不熟悉Windows。这是更基本的。