PDA

View Full Version : کلید های جهت نما



www.ilampro.com
پنج شنبه 28 شهریور 1387, 23:13 عصر
سلام
لطفا در باره کلیدهای جهت نما در سی پلاس پلاس راهنمایی کنید(مفصل)
با تشکر

SMRAH1
جمعه 29 شهریور 1387, 00:36 صبح
سلام

کلید های جهت بر از جمله کلید های توسعه یافته (دو بایتی) است.در واقع هر کلید صفحه کلید،یک بایت بر می گردونه، الا چند کلید خاص مثل کلید های جهت بر،F ها و .... که توسعه یافته اند و دو بایت بر می گردونند.برای تشخیص کلید های توسعه یافته باید ابتدا مقدار grtch را بگیری از مقدار اون برابر صفر بود یعنی کلید توسعه یافته است و بایت بعدی، یعنی بایت دوم،نوع دقیق کلید توسعه یافته است و حالا اون بایت رو (بایت دوم رو) باید به شکل توسعه یافته تفسیر کنی.برای نمونه در کد زیر :

char ch;
while(1)
{
ch = getch();
if(ch == 0)
{
//Extended key
ch = getch();
switch(ch)
{
....
}
}
else
{
//Normal key
switch(ch)
{
....
}
}
} حالا با توجه به اینکه کد کلید جهت بالا برابر 0075 است و کد کاراکتر K هم 75 است یک مثال می زنم.برای تشخیص این دو از هم، اگر getch مقدار 75 رو برگرداند یعنی کلید K فشرده شده،ولی اگر getch ابتدا مقدار صفر را داد،اول دوباره getch می کنی و این مقدار اگر 75 بود یعنی کلید جهت بر بالا رو زده ایم.
کد کامل کلید های توسعه یافته رو می تونی از کتب و منابع برنامه نویسی بدست بیاری (من برای این کار یک برنامه نوشتم که هر وقت کلیدی رو فشردم، مقدار getch شده اون رو نشون بده تا بفهمم کد کلید چیست)
نکته مهم اینکه اگر در حالت consol در ویژوال استودیو کار می کنی (برنامه می نویسی) کد تشخیص کلید های توسعه یافته به جای صفر ،0xE0 است.
برنامه پایین هم رو قبلا تحت TC نوشتم که یک بازی قدیمه و البته خیلی ساده و از کلید های جهت بر هم در اون استفاده شده (به همراه کمی توضیحات).

موفق باشید

emad_67
جمعه 29 شهریور 1387, 18:37 عصر
علاوه بر صحبت های جناب SMRAH1 برای اینکه با کد های کلید ها سرکار نداشته باشی می تونی از virual key های کیبرد استفاده کنی.
لیست virtual key ها رو می تونی اینجا ببینی:
http://msdn.microsoft.com/en-us/library/ms927178.aspx

و بعد با توجه به کاری که می خوای بکنی و با استفاده از این virtual key ها از تابع مورد نظر استفاده کنی.
مثلا فرض کن می خوایم چک کنیم بینیم که کلید جهت نما بالا فشار داده شده یا نه. در این حالات از تابع GetAsyncKeyState در هدر فایل windows.h استفاده می کنیم و VK_UP که کلید مجازی دکمه جهت نما بالا هست رو بهش پاس میدیم:


if(GetAsyncKeyState(VK_UP))
.....
این تابع در حالتی که اون کلید فشار داده شده باشه مقدار 1 رو بر می گردونه.

www.ilampro.com
یک شنبه 28 مهر 1387, 14:03 عصر
بسم الله الرحمن الرحیم
سلام بر دوستان عزیز
حالتون چطوره یا نه؟
باز هم با کوله باری از سوال اومدم. انشا الله همیشه از راهنمایی شما بهره مند باشیم
دوستان عزیز , لطفا برنامه زیر رو چک کنید و در تکمیل آن کمکم کنید. هدف این برنامه
استفاده از کلیدهای جهت نماست . به طور نصف ونیمه کار می کند ولی اگر ملاحظه کنید
می بینید که در خروجی ایراداتی دارد وحتما در کد نویسی نیز ایراد دارد
موفق باشید
ممنون
<<اعتقاد به علی دایی , اعتقاد به فوتبال حرفه ایست>> این حدیث از اینجانب

saeid99
یک شنبه 22 دی 1387, 21:55 عصر
کدهای اسکی جهت نما و اینتر بصورت زیر هستش..
بالا=>72
پایین=>80
چپ=>75
راست=>77
اینتر=>13

emad_67
یک شنبه 22 دی 1387, 23:25 عصر
کدهای اسکی جهت نما و اینتر بصورت زیر هستش..
بالا=>72
پایین=>80
چپ=>75
راست=>77
اینتر=>13
تاپیک های قدیمی رو بیخودی بالا نیار.
ضمنا کدهایی که گفتی به ترتیب برای حروف H و P و K و M هست نه کلید ها جهت نما.

saeid99
دوشنبه 23 دی 1387, 23:47 عصر
راستش من دیدم که در یه ادیتور از این کدا استفاده کرده و گذاشتمش..
اگه اشتباهه با کمال میل حرفتون رو میپذیرم....
موفق باشی

mp495495
جمعه 23 دی 1390, 07:52 صبح
از توضیحات خوبتون ممنونم همونطور که گفتید کلیدهای جهت نما یک عدد دوبایتی یا به عبارتی دو عدد یک بایتی بر می گردانند من برای بدست آوردن عددی که با فشردن کلید های جهت نما بدست می آید از برنامه ساده زیر استفاده کردم ولی نمی دانم چرا بایت اول 00 برنگرداند بلکه 224 به دست آمد؟؟؟:متعجب:
بعد از اجرای برنامه زیر در مورد کامپیوتر من با ویندوز سون و کامپایلر dev این اعدد مثلا برای کلید جهت نمای بالا بدست آمد:
224
72

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
for(int i=0;i<20;i++)
{int c=(int)getch();
cout<<"\n"<<c;}
getch();
}