如何在单击时显示X,Y co-ords并在控制台中显示

时间:2013-10-22 21:22:09

标签: c++ c++11

我已经学习了两个多星期的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,直到再次单击它为止!

如果有任何帮助,我会非常感激,如果在我尝试搜索之前将其发布到某个地方,那就很抱歉了!

此致

克里斯

2 个答案:

答案 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)

enter image description here

使用控制台自带的键盘和鼠标事件处理程序 - 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);


        }

    }

}


//*****************************************************************************