|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
望请各位大佬解答一下问题
我在学习控制台界面的设计的时候,想通过鼠标点击来改变控制台的光标位置,但是同样的代码在VS2017和VC6.0下有不同的效果,VS2017是程序功能无效,但是VC6.0下程序正常运行。
网上百度说是应该关闭控制台的快速编辑功能(win10下)但是无效果。
然后我在WINXP下用VS2010和VC6.0编译,也是只有VC6.0可以使程序正常运行,我想应该和系统和VS版本有关系。
所以请各位大佬帮帮小弟。求助!
代码如下:
int main(void)
{
//?获取标准输入输出设备句柄????
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
INPUT_RECORD mouseRec;
DWORD res;
COORD crPos, crHome = { 0,0 };
cout << "[Cursor Position] X: " << "0" << " Y: 0" << endl;//?初始状态??
while(1)
{
ReadConsoleInput(hIn, &mouseRec, 1, &res);
if(mouseRec.EventType == MOUSE_EVENT)
{
if(mouseRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
{
break; //?左键双击?退出循环??
}
}
crPos= mouseRec.Event.MouseEvent.dwMousePosition;
GetConsoleScreenBufferInfo(hOut, &bInfo);
SetConsoleCursorPosition(hOut, crHome);
cout << "[Cursor Position] X: " << crPos.X << " Y: " << crPos.Y << endl;//?初始状态??
SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition);
switch(mouseRec.Event.MouseEvent.dwButtonState)
{
case FROM_LEFT_1ST_BUTTON_PRESSED: //?左键?输出A?
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), crPos);
cout << 'A';
//FillConsoleOutputCharacter(hOut, 'A', 1, crPos, &res);
break; //?如果使用printf输出,则之前需要先设置光标的位置??
case RIGHTMOST_BUTTON_PRESSED: //?右键?输出a??
FillConsoleOutputCharacter(hOut, 'a', 1, crPos, &res);
break;
default:
break;
}
}
}
CloseHandle(hOut); //?关闭标准输出设备句柄????
CloseHandle(hIn); //?关闭标准输入设备句柄????
return 0;
}
这是在VC6.0下编译,功能实现
这是在VC6.0下编译,功能实现
这是在VS2017下编译,功能不能实现
这是在VS2017下编译,功能不能实现
再次感谢各位大神。
本帖最后由 人造人 于 2018-10-4 23:38 编辑
- #include <iostream>
- #include <windows.h>
- static void HideCursor()
- {
- CONSOLE_CURSOR_INFO cci;
- cci.bVisible = FALSE;
- cci.dwSize = sizeof(cci);
- HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleCursorInfo(handle, &cci);
- }
- int main()
- {
- HideCursor();
- HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
- HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
- INPUT_RECORD ir;
- DWORD cNumRead;
- COORD coord = {0, 0};
- do
- {
- SetConsoleCursorPosition(hStdout, {0, 0});
- std::cout << " ";
- SetConsoleCursorPosition(hStdout, {0, 0});
- std::cout << "[Cursor Position] X: " << coord.X << " Y: " << coord.Y;
- ReadConsoleInput(hStdin, &ir, 1, &cNumRead);
- coord = ir.Event.MouseEvent.dwMousePosition;
- if(ir.EventType == MOUSE_EVENT)
- {
- if(ir.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
- {
- if(ir.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
- break;
- }
- switch(ir.Event.MouseEvent.dwButtonState)
- {
- case FROM_LEFT_1ST_BUTTON_PRESSED:
- FillConsoleOutputCharacter(hStdout, 'A', 1, coord, &cNumRead);
- break;
- case RIGHTMOST_BUTTON_PRESSED:
- FillConsoleOutputCharacter(hStdout, 'a', 1, coord, &cNumRead);
- break;
- }
- }
- }
- while(1);
- CloseHandle(hStdout);
- CloseHandle(hStdin);
- return 0;
- }
复制代码
|
|