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。这是更基本的。