View Full Version : سوال: استفاده از موس در ++T C
  
Keyhan Clever
جمعه 18 اردیبهشت 1388, 22:34 عصر
از مهندسین گرامی کسی میتونه در باره کارکرد موس در توربو سی پلاس پلاس توضیح بده ؟
Keyhan Clever
جمعه 18 اردیبهشت 1388, 22:35 عصر
اگه تو ویژوال سی پلاس پلاس و در بخش کنسول هم کسی بلده بگه ممنون میشم
shs_night
شنبه 19 اردیبهشت 1388, 01:20 صبح
با عرض سلام
دوست عزیز شما یه سری به اینجا بزنید:
http://cplusplus.blogsky.com/1388/01/14/post-25/
Nima_NF
یک شنبه 20 اردیبهشت 1388, 02:26 صبح
اگه تو ویژوال سی پلاس پلاس و در بخش کنسول هم کسی بلده بگه ممنون میشم
در کامپایلرهای تحت ویندور مانند ++VC باید در یک حلقه و تابع ReadConsoleInput اطلاعات ورودی کنسول را دریافت کنید. در مثال زیر محتویات EventType در InRec مشخص می کند که از کیبرد در حال خواند هستیم (KEY_EVENT) یا از موس (MOUSE_EVENT).
InRec  یک ساختار از INPUT_RECORD هست که می توانید در MSDN موارد دیگر ان را مشاهده کنید، InRec.Event.MouseEvent.dwMousePosition مقدار x و Y موس را می دهد.
تابع SetConsoleCursorPosition فقط برای این هست که مکان نما در هنگام چاپ مقدادیر در همان نقطه 0 و 0 باقی بماند.
تذکر:این حلقه همیشه اجاره نمی شود، فقط زمانی که پیامی از ورودی (مانند موس و کیبرد) ارسال شود تابع ReadConsoleInput مقدار بر می گرداند و حلقه دور بعدی خود را می پیماید.
#include <iostream>
#include <windows.h>
#include <conio.h>
 using namespace std;
 int main(int argc, char* argv[])
{
    HANDLE hIn;
    HANDLE hOut;
    COORD MouseWhere;
    COORD EndWhere;
    bool loopMe = TRUE;
    INPUT_RECORD InRec;
    DWORD NumRead;
    hIn = GetStdHandle(STD_INPUT_HANDLE);
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    MouseWhere.X = 0;
    MouseWhere.Y = 0;
    while ( loopMe )
    {
        ReadConsoleInput(hIn, &InRec, 1, &NumRead);
        switch (InRec.EventType)
        {
        case KEY_EVENT:
            if (InRec.Event.KeyEvent.bKeyDown)
            {
                   // If Enter key was pressed
                if (InRec.Event.KeyEvent.wVirtualKeyCode == VK_RETURN)
                    cout << endl;
                else    // If it is a character
                    cout << InRec.Event.KeyEvent.uChar.AsciiChar;
            }
            break;
        case MOUSE_EVENT:
            COORD MousePos = InRec.Event.MouseEvent.dwMousePosition;
            
              // always set the mouse cursor in pos x,y = 0,3
            SetConsoleCursorPosition(hOut, MouseWhere); 
            cout << "x:"<< MousePos.X << endl;
            cout << "y:"<< MousePos.Y << endl;
            break;
        }
    }
    getch();
    return 0;
}
 برای مثال های بیشتر به این سایت مراجعه کنید. (http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles5.html)
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.