我已经学习了两个多星期的c ++而且我正在尝试通过编写一个简单的控制台应用程序来展示X&我的鼠标光标的Y坐标,我已经查看了MSDN Libs并尝试了解,但我所设法做的只是以错误的方式展示合作伙伴。
以下是我现在的代码,它不是很多,但我想确保我以正确的方式做事,所以我不会养成坏习惯;
#include <iostream>
#include <Windows.h>
int main()
{
POINT cursorPos;
GetCursorPos(&cursorPos);
printf("X %d Y %d\n", cursorPos.x, cursorPos.y);
system("PAUSE");
}
这样做的主要目的是让控制台打开(一旦运行)并监听左键单击,然后在控制台中显示该Co-ord,直到再次单击它为止!
如果有任何帮助,我会非常感激,如果在我尝试搜索之前将其发布到某个地方,那就很抱歉了!
此致
克里斯
答案 0 :(得分:3)
尝试这样的事情:
#include <iostream>
#include <Windows.h>
int main()
{
POINT cursorPos;
do
{
GetCursorPos( &cursorPos );
printf("X %d Y %d\n", cursorPos.x, cursorPos.y);
Sleep( 100 );
}
while ( cursorPos.x != 0 || cursorPos.y != 0 );
// just "for fun", as an example,
// you have to set your mouse to X=0, Y=0 to exit!
return 0;
}
事情是:一个程序只是一系列操作,所以&#34;如果它完成了它的作用......它就会死掉!&#34;
当程序保持活动状态时,表示它实际上是在&#34;事件循环中运行的#34;。它意味着一个循环,让程序保持活着状态#34;它有很多名称,具体取决于您正在使用的系统/平台(例如,在OS X中,它被称为RunLoops),但它们的想法完全相同。
这个&#34;事件循环的基本和一般概念&#34;基本上总是一样的:注意用户输入,注意系统输入,并根据输入做一些动作(很多时候,动作只是&#34;睡觉!&#34;)
用这种方法。你的程序将永远活着!直到它响应输入,这意味着&#34;关闭它&#34;。 (例如,在Windows中,当您使用Windows时,它可能是WM_QUIT消息,或者只是一个ESC键,在控制台模式下等...)
上面就是这个例子,我刚刚给出了#34;例如&#34;如果鼠标位置转到(x=0, y=0)
,则退出。
答案 1 :(得分:0)
使用控制台自带的键盘和鼠标事件处理程序 - ReadConsoleInput( )
在此处阅读更多https://msdn.microsoft.com/en-us/library/windows/desktop/ms685035(v=vs.85).aspx
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
void gotoxy(int x, int y);
void setcolor(WORD color);
void setForeGroundAndBackGroundColor(int ForeGroundColor,int BackGroundColor);
void clearscreen();
void drawpixel( unsigned char x, unsigned char y, unsigned char Color);
void drawpixel2( unsigned char x, unsigned char y, unsigned char Color, char character);
void drawcircle(int x, int y, int a, int b, int color);
void drawline(int x0, int y0, int x1, int y1, int color);
void drawfilledrectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char bkcol);
void drawframe(unsigned x,unsigned y,unsigned sx,unsigned sy,unsigned char col,unsigned char col2,char text_[]);
void drawwindow(unsigned x,unsigned y,unsigned sx,unsigned sy,unsigned char col,unsigned char col2,unsigned char bkcol,char text_[]);
int main()
{
gotoxy(1,23);
setcolor(7);
clearscreen();
cout<<"click anywhere in console window to write - hello world -\n\n\n\n\n\n\n\n\n\n\n\n\n"
"Press Ctrl+C to Exit";
HANDLE hout= GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hin = GetStdHandle(STD_INPUT_HANDLE);
INPUT_RECORD InputRecord;
DWORD Events;
COORD coord;
CONSOLE_CURSOR_INFO cci;
cci.dwSize = 25;
cci.bVisible = FALSE;
SetConsoleCursorInfo(hout, &cci);
SetConsoleMode(hin, ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT);
bool EXITGAME = false;
int buttonX=1, buttonY=1;
drawpixel(buttonX,buttonY ,1);
gotoxy(buttonX+2,buttonY);
setcolor(3);
cout<<"<----- a button \n";
while( !EXITGAME )
{
ReadConsoleInput(hin, &InputRecord, 1, &Events);
switch ( InputRecord.EventType ){
case KEY_EVENT: // keyboard input
switch (InputRecord.Event.KeyEvent.wVirtualKeyCode)
{
case VK_ESCAPE:
EXITGAME = TRUE;
break;
case VK_SPACE:
break;
case VK_RETURN:
break;
case VK_LEFT:
// left key move player left
cout<<"VK_LEFT = "<<InputRecord.Event.KeyEvent.wVirtualKeyCode <<" \n";
break;
case VK_RIGHT:
// right key move player right
cout<<"VK_RIGHT = "<<InputRecord.Event.KeyEvent.wVirtualKeyCode <<" \n";
break;
case VK_UP:
// up key move player up
cout<<"VK_UP = "<<InputRecord.Event.KeyEvent.wVirtualKeyCode <<" \n";
break;
case VK_DOWN:
// up key move player down
cout<<"VK_DOWN = "<<InputRecord.Event.KeyEvent.wVirtualKeyCode <<" \n";
break;
}//switch
//---------------------------------------------------------------------------------
break;
case MOUSE_EVENT: // mouse input
if(InputRecord.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
coord.X = InputRecord.Event.MouseEvent.dwMousePosition.X;
coord.Y = InputRecord.Event.MouseEvent.dwMousePosition.Y;
SetConsoleCursorPosition(hout,coord);
SetConsoleTextAttribute(hout,rand() %7+9);
if ( (InputRecord.Event.MouseEvent.dwMousePosition.X == buttonX ) &&
( InputRecord.Event.MouseEvent.dwMousePosition.Y == buttonY) ){
clearscreen();
gotoxy(1,1);
setcolor(7);
drawpixel(buttonX,buttonY ,1);
setcolor(3);
cout<<" mybutton was pressed \n";
setcolor(7);
Sleep(500);
drawpixel(buttonX,buttonY ,1);
gotoxy(buttonX+2,buttonY);
setcolor(3);
cout<<"<----- a button \n";
}
cout<<"Hello world at "<< InputRecord.Event.MouseEvent.dwMousePosition.X <<" x "<< InputRecord.Event.MouseEvent.dwMousePosition.Y<<" ";
}// mouse
break;
case WINDOW_BUFFER_SIZE_EVENT: // scrn buf. resizing
;
break;
case FOCUS_EVENT: // disregard focus events
case MENU_EVENT: // disregard menu events
break;
default:
cout<<"Unknown event type \n";
break;
}
FlushConsoleInputBuffer(hin);
}
gotoxy(1,23);
setcolor(7);
clearscreen();
cout<<"\n";
return 0;
}
void gotoxy(int x, int y){
COORD coord;
coord.X = x; coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
return;
}
//*****************************************************************************
void setcolor(WORD color){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
return;
}
//*****************************************************************************
//
// colors:
// 0 = Black
// 1 = Blue
// 2 = Green
// 3 = Cyan
// 4 = Red
// 5 = Magenta
// 6 = Yellow
// 7 = LightGray
// 8 = DarkGray
// 9 = LightBlue
// 10 = LightGreen
// 11 = LightCyan
// 12 = LightRed
// 13 = LightMagenta
// 14 = LightYellow
// 15 = White
//
//*****************************************************************************
void setForeGroundAndBackGroundColor(int ForeGroundColor,int BackGroundColor){
int color=16*BackGroundColor+ForeGroundColor;
setcolor(color);
}
//*****************************************************************************
void clearscreen(){
COORD coordScreen = { 0, 0 };
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &csbi);
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
GetConsoleScreenBufferInfo(hConsole, &csbi);
FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
SetConsoleCursorPosition(hConsole, coordScreen);
return;
}
//*****************************************************************************
void drawpixel( unsigned char x, unsigned char y, unsigned char Color){
setcolor(Color);
gotoxy(x,y);printf("Û");
}
//*****************************************************************************
void drawpixel2( unsigned char x, unsigned char y, unsigned char Color, char character){
setcolor(Color);
gotoxy(x,y);printf("%c",character);
}
//*****************************************************************************
void drawcircle(int x, int y, int a, int b, int color){
int wx, wy;
int thresh;
int asq = a * a;
int bsq = b * b;
int xa, ya;
drawpixel(x, y+b, color);
drawpixel(x, y-b, color);
wx = 0;
wy = b;
xa = 0;
ya = asq * 2 * b;
thresh = asq / 4 - asq * b;
for (;;) {
thresh += xa + bsq;
if (thresh >= 0) {
ya -= asq * 2;
thresh -= ya;
wy--;
}
xa += bsq * 2;
wx++;
if (xa >= ya)
break;
drawpixel(x+wx, y-wy, color);
drawpixel(x-wx, y-wy, color);
drawpixel(x+wx, y+wy, color);
drawpixel(x-wx, y+wy, color);
}
drawpixel(x+a, y, color);
drawpixel(x-a, y, color);
wx = a;
wy = 0;
xa = bsq * 2 * a;
ya = 0;
thresh = bsq / 4 - bsq * a;
for (;;) {
thresh += ya + asq;
if (thresh >= 0) {
xa -= bsq * 2;
thresh = thresh - xa;
wx--;
}
ya += asq * 2;
wy++;
if (ya > xa)
break;
drawpixel(x+wx, y-wy, color);
drawpixel(x-wx, y-wy, color);
drawpixel(x+wx, y+wy, color);
drawpixel(x-wx, y+wy, color);
}
}
//*****************************************************************************
void drawline(int x0, int y0, int x1, int y1, int color){
int pix = color;
int dy = y1 - y0;
int dx = x1 - x0;
int stepx, stepy;
if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; }
if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; }
dy <<= 1; // dy is now 2*dy
dx <<= 1; // dx is now 2*dx
drawpixel( x0, y0,pix);
if (dx > dy) {
int fraction = dy - (dx >> 1); // same as 2*dy - dx
while (x0 != x1) {
if (fraction >= 0) {
y0 += stepy;
fraction -= dx; // same as fraction -= 2*dx
}
x0 += stepx;
fraction += dy; // same as fraction -= 2*dy
drawpixel( x0, y0,pix);
}
} else {
int fraction = dx - (dy >> 1);
while (y0 != y1) {
if (fraction >= 0) {
x0 += stepx;
fraction -= dy;
}
y0 += stepy;
fraction += dx;
drawpixel( x0, y0,pix);
}
}
}
//*****************************************************************************
void drawframe(unsigned x,unsigned y,unsigned sx,unsigned sy,unsigned char col,unsigned char col2,char text_[]){
unsigned i,j,m;{
m=(sx-x); //differential
j=m/8; //adjust
j=j-1; //more adjustment
gotoxy(x,y);printf("É"); //Top left corner of drawframe
gotoxy(sx,y);printf("»"); //Top right corner of drawframe
gotoxy(x,sy);printf("È"); //Bottom left corner of drawframe
gotoxy(sx,sy);printf("¼"); //Bottom right corner of drawframe
for (i=x+1;i<sx;i++){
gotoxy(i,y);printf("Í"); // Top horizontol line
gotoxy(i,sy);printf("Í"); // Bottom Horizontal line
}
for (i=y+1;i<sy;i++){
gotoxy(x,i);printf("º"); //Left Vertical line
gotoxy(sx,i);printf("º"); //Right Vertical Line
}
gotoxy(x+j,y);printf(text_); //put Title
gotoxy(1,24);
}
}
//*****************************************************************************
void drawfilledrectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char bkcol){
int x,y;
setcolor(bkcol); //Set to color bkcol
for (y=y1;y<y2;y++){ //Fill Y Region Loop
for (x=x1;x<x2;x++) { //Fill X region Loop
gotoxy(x,y);printf(" "); //Draw Solid space
}
}
}
//*****************************************************************************
void drawwindow(unsigned x,unsigned y,unsigned sx,unsigned sy,
unsigned char col, unsigned char col2,unsigned char bkcol,char text_[]){
drawfilledrectangle(x,y,sx,sy,bkcol);
drawframe(x,y,sx,sy,col,col2,text_);
}
//*****************************************************************************
void drawcolorpalette(){
for (int i=0;i<16;i++){
for (int j=0;j<16;j++){
setForeGroundAndBackGroundColor(i,j);
gotoxy(i*4,j);printf("%d",(i*j)+1);
}
}
}
//*****************************************************************************