| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1753 人关注过本帖
标题:关于用键盘控制菜单
只看楼主 加入收藏
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:7 
关于用键盘控制菜单
如何实现用键盘的上下和回车键选择菜单。
比如有存款,取款,转账等菜单选项,然后用上下健移动,用回车进入其中一个子函数
2017-03-14 08:18
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
需要用windows API来操作吧

Code is my life.
2017-03-14 15:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 2楼 bjut_Allen
哇~现在正在自学windows API 要记的东西很多~做游戏要用啊~~~~~~~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-14 15:55
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
Windows环境试试:
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>
#include <windows.h>

HANDLE hStd = 0;

void _Say(SHORT x, SHORT y, char *s, WORD Color)
{
    SetConsoleTextAttribute(hStd, Color);
    COORD pos = {x, y};
    SetConsoleCursorPosition(hStd, pos);
    printf(s);
}

void _menu(char *menu[], int count, int sele)
{
    WORD selecolor = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED;
    WORD forecolor = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
    int i;
    for (i=0; i<count; i++)
        if (i == sele)
            _Say(i*10+2, 3, menu[i], selecolor);
        else
            _Say(i*10+2, 3, menu[i], forecolor);
}

main()
{
    hStd = GetStdHandle(STD_OUTPUT_HANDLE);
    char *menu[]={"菜单1","菜单2","菜单3"};
    int k, sele=0, menucount=3;
    printf("\n用上下左右方向键选择,回车确定\n");
    _menu(menu, menucount, sele);
    while ((k=getch()) != '\r')
    {
        if (k==72 || k==75 || k==77 || k==80)
        {
            sele = (k==72 || k==75) ? --sele : ++sele;
            if (sele == menucount)
                sele = 0;
            else if (sele < 0)
                sele = menucount - 1;
            _menu(menu, menucount, sele);
        }
    }
    SetConsoleTextAttribute(hStd, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);   
    printf("\n\n选择:%s\n", menu[sele]);
}
2017-03-14 16:12
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:20 
改一下:
#include<stdio.h>
#include<windows.h>

HANDLE hStd = 0;

void _Say(SHORT x, SHORT y, char *s, WORD Color)
{
    SetConsoleTextAttribute(hStd, Color);
    COORD pos = {x, y};
    SetConsoleCursorPosition(hStd, pos);
    printf(s);
}

void _menu(char *menu[], int count, WORD color)
{
    int i;
    for (i=0; i<count; i++)
        _Say(i*10+2, 3, menu[i], color);
}

main()
{
    hStd = GetStdHandle(STD_OUTPUT_HANDLE);
    WORD selecolor = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED;
    WORD forecolor = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
    char *menu[]={"菜单1","菜单2","菜单3"};
    int k, sele=0, menucount=3;
    printf("\n用上下左右方向键选择,回车确定\n");
    _menu(menu, menucount, forecolor);
    _Say(sele*10+2, 3, menu[sele], selecolor);
    while ((k=getch()) != '\r')
    {
        if (k==72 || k==75 || k==77 || k==80)
        {
            _Say(sele*10+2, 3, menu[sele], forecolor);
            sele = (k==72 || k==75) ? --sele : ++sele;
            if (sele == menucount)
                sele = 0;
            else if (sele < 0)
                sele = menucount - 1;
            _Say(sele*10+2, 3, menu[sele], selecolor);
        }
    }
    SetConsoleTextAttribute(hStd, forecolor);
    printf("\n\n选择:%s\n", menu[sele]);
}
2017-03-14 16:30
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 5楼 吹水佬
改写您的回答。
有个不情之请,您能否把程序的每条语句解释一下好吗?
如果可以的话。

育帝
2017-03-14 18:11
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
回复 6楼 育帝
就几个简单的API函数,随便搜搜都有料。
2017-03-14 21:11
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 7楼 吹水佬
好。

育帝
2017-03-14 23:25
快速回复:关于用键盘控制菜单
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.179589 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved