知行社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2880|回复: 0
收起左侧

如果想不直接结束程序,输入一个提示,返回主菜单,应该怎么设计呢

[复制链接]
颠三倒四 发表于 2012-1-7 02:54 | 显示全部楼层 |阅读模式
#include <Windows.h>
#include <string>
#include <Console.h>
#include <Menu.h>

using std::wstring;

extern Console console;

// 取菜单项数
size_t Get_Bar_Number(const MENU menu[])
{
    size_t number(0);
    while (!menu[number].Bar.empty())
    {
        ++number;
    }
    return number;
}

// 取菜单键清单
wstring Get_Key_List(const MENU menu[])
{
    wstring key_list;
    size_t index(0);
    while (!menu[index].Bar.empty())
    {
        key_list.push_back(menu[index].key);
        ++index;
    }
    return key_list;
}

int Menu(MENU menu[], COORD pos, const WORD text_attr, const WORD get_attr)
{
    size_t bar_number(Get_Bar_Number(menu));
    wstring key_list(Get_Key_List(menu));

    SMALL_RECT rect;
    rect.Top = 2;
    rect.Left = 2;
    rect.Bottom = rect.Top + bar_number + 3;
    rect.Right = rect.Top + menu[0].Bar.size();

    console.SetTextAttribute(text_attr);
    console.Box(rect);

    pos.X = rect.Left + 2;
    pos.Y = rect.Top + 1;
    for (size_t index = 0; index != bar_number; ++index)
    {
        console.Goto(pos);
        console.WriteText(menu[index].Bar);
        ++pos.Y;
    }

    pos.Y = rect.Bottom - 1;
    console.Goto(pos);
    console.WriteText(L&quot;选择:&quot;);
    console.SetTextAttribute(get_attr);
    console.WriteText(L' ');
    pos.X = console.ScreenInfo.dwCursorPosition.X - 1;
    pos.Y = console.ScreenInfo.dwCursorPosition.Y;
    WCHAR choice;
    BOOL finish(false);
    do
    {
        console.Goto(pos);
        choice = console.ReadKey();
        if (key_list.find(choice) < key_list.size())
        {
            console.WriteText(choice);
            finish = true;
        }
    } while(!finish);
   
    return choice - L'0';
}

QQ|小黑屋|手机版|知行技术社区 ( 湘ICP备11020288号-1 )

GMT+8, 2020-9-26 07:12 , Processed in 0.063925 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表