| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1327 人关注过本帖
标题:一个文本界面的效果测试
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:6 
一个文本界面的效果测试
程序代码:
#include <cstdio>
#include <cstdlib>
#include "MyConsole.h"
#include "StatusBar.h"
#include "PopMenu.h"

int main(void)
{
    MyConsole::Init(160, 50);                    // 設置50行160列的文本窗口
    MyConsole::SetTitle(L"MyConsole 測試程序");  // 設置窗口標題文字
    MyConsole::Clear(MyConsole::CombineAttribute(MyConsole::WHITE, MyConsole::BLUE));

    //StatusBar statusBar(MyConsole::GetRows() - 2, MyConsole::WHITE | MyConsole::INTENSITY, MyConsole::GREEN);
    StatusBar statusBar;
    statusBar.Say("Esc: 結束程序");

    // 放置一段文字測試陰影效果,觀察半個漢字的情形,背景文字高亮的部分在阴影区被变暗
    COORD pos = { 13, 12 };
    MyConsole::WriteString(L"歡迎進入編程論壇", pos, MyConsole::CombineAttribute(MyConsole::GREEN | MyConsole::INTENSITY, MyConsole::BLUE));

    // 放置一個彈出式菜單,菜單收回後恢復底部畫面
    const wchar_t* menu[] = {
        L"1.新建日程",
        L"2.查看當前日程",
        L"3.瀏覽所有日程",
        L"4.刪除日程",
        L"5.退出登錄"
    };
    PopMenu popMenu(menu, _countof(menu), 5, 5);
    popMenu.SetNormalAttribute(MyConsole::WHITE | MyConsole::INTENSITY, MyConsole::GREEN);
    popMenu.SetHighlightAttribute(MyConsole::YELLOW | MyConsole::INTENSITY, MyConsole::MAGENTA);
    popMenu.Show();
    int choice;
    do
    {
        choice = popMenu.Choice();
    } while ((choice != _countof(menu) - 1) && (choice != -1));
    popMenu.Hide();

    while (MyConsole::ReadKeypress() != MyConsole::K_ESC)
    {
        ;
    }

    return EXIT_SUCCESS;
}

弹出菜单的画面:
图片附件: 游客没有浏览图片的权限,请 登录注册


收回菜单后的画面:
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 TonyDeng 于 2014-7-8 13:48 编辑 ]
搜索更多相关主题的帖子: color 
2014-07-08 13:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
经测试,这个用本地代码写的模块可以用于VC++托管程序中,即本地与托管联合开发(据说这是VC++编译器独有的)。

授人以渔,不授人以鱼。
2014-07-08 14:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用魑魅魍魉!在2014-7-8 18:41:17的发言:

其实,我更想说的是   
#include "MyConsole.h"
#include "StatusBar.h"
#include "PopMenu.h"
 这写东西,目前,还没碰过


这是我自己写的,你当然没碰过。

授人以渔,不授人以鱼。
2014-07-09 02:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wssy213在2014-7-8 17:25:47的发言:

我在想  什么时候我也能做出个界面


这个只是cmd“黑窗口”下的界面,亦即是纯文本的,以前DOS时代就是这种界面,并不算复杂。

授人以渔,不授人以鱼。
2014-07-10 21:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
4楼说没碰过那些头文件,就给你看一个~
程序代码:
#pragma once

#include <Windows.h>

class MyConsole
{
public:

    // 文本顏色枚舉常數
    static const enum TextColor : BYTE
    {
        BLACK = 0,                // 黑色
        BLUE = 1,                // 藍色
        GREEN = 2,                // 綠色
        CYAN = 3,                // 青色
        RED = 4,                // 紅色
        MAGENTA = 5,            // 洋紅色
        YELLOW = 6,                // 黃色
        WHITE = 7,                // 白色
        INTENSITY = 8            // 高亮
    };

    // 按鍵掃描碼枚舉常數
    static const enum KeyCode : wint_t
    {
        K_BACKSPACE = 0x0008,
        K_TAB = 0x0009,
        K_ENTER = 0x000D,
        K_ESC = 0x001B,
        K_F1 = 0x003B,
        K_F2 = 0x003C,
        K_F3 = 0x003D,
        K_F4 = 0x003E,
        K_F5 = 0x003F,
        K_F6 = 0x0040,
        K_F7 = 0x0041,
        K_F8 = 0x0042,
        K_F9 = 0x0043,
        K_F10 = 0x0044,
        K_F11 = 0x0405,
        K_F12 = 0x0406,
        K_ALT_F1 = 0x0068,
        K_ALT_F2 = 0x0069,
        K_ALT_F3 = 0x006A,
        K_ALT_F4 = 0x006B,
        K_ALT_F5 = 0x006C,
        K_ALT_F6 = 0x006D,
        K_ALT_F7 = 0x006E,
        K_ALT_F8 = 0x006F,
        K_ALT_F9 = 0x0070,
        K_ALT_F10 = 0x0071,
        K_ALT_F11 = 0x040B,
        K_ALT_F12 = 0x040C,
        K_CTRL_F1 = 0x005E,
        K_CTRL_F2 = 0x005F,
        K_CTRL_F3 = 0x0060,
        K_CTRL_F4 = 0x0061,
        K_CTRL_F5 = 0x0062,
        K_CTRL_F6 = 0x0063,
        K_CTRL_F7 = 0x0064,
        K_CTRL_F8 = 0x0065,
        K_CTRL_F9 = 0x0066,
        K_CTRL_F10 = 0x0067,
        K_CTRL_F11 = 0x0409,
        K_CTRL_F12 = 0x0003,
        K_INS = 0x03D2,
        K_DEL = 0x03D3,
        K_HOME = 0x03C7,
        K_END = 0x00CF,
        K_PGUP = 0x03C9,
        K_PGDN = 0x03D1,
        K_CTRL_HOME = 0x03F7,
        K_CTRL_END = 0x03F5,
        K_CTRL_PGUP = 0x0406,
        K_CTRL_PGDN = 0x03F6,
        K_LEFT = 0x03CB,
        K_RIGHT = 0x03CD,
        K_UP = 0x03C8,
        K_DOWN = 0x03D0,
        K_CTRL_LEFT = 0x03F3,
        K_CTRL_RIGHT = 0x03F4,
        K_CTRL_UP = 0x040D,
        K_CTRL_DOWN = 0x0411
    };

    // 初始化控制臺窗口爲指定寬度和高度
    static void Init(SHORT width, SHORT height);

    // 取控制臺窗口的行數
    static SHORT GetRows(void);

    // 取控制臺窗口的列數
    static SHORT GetColumns(void);

    // 將前景色和背景色構造成文本屬性
    static WORD CombineAttribute(BYTE fore, BYTE back);

    // 將文本屬性拆分出前景色和背景色
    static void SplitAttribute(WORD attr, BYTE* fore, BYTE* back);

    // 設置控制臺文本顏色返回新屬性値
    static WORD SetTextColor(BYTE fore, BYTE back);

    // 獲取控制臺當前文本顏色屬性
    static WORD GetTextColor(void);

    // 設置控制臺窗口標題
    static void SetTitle(const char* title);

    // 設置控制臺窗口標題
    static void SetTitle(const wchar_t* title);

    // 獲取控制臺窗口標題
    static void GetTitle(char* title);

    // 獲取控制臺窗口標題
    static void GetTitle(wchar_t* title);

    // 將文本光標定位到指定位置
    static void GotoXY(SHORT row, SHORT column);

    // 將文本光標定位到指定位置
    static void GotoXY(COORD pos);

    // 設置文本光標的可見性
    static void SetCursorVisible(bool visible);

    // 獲取文本光標的可見性
    static bool GetCursorVisible(void);

    // 設置文本光標的大小
    static void SetCursorSize(DWORD size);

    // 獲取當前文本光標的大小
    static DWORD GetCursorSize(void);

    // 用指定顏色屬性清屛
    static void Clear(WORD attr = GetTextColor());

    // 用指定顏色屬性清空一塊範圍
    static void Clear(SMALL_RECT rect, WORD attr = GetTextColor());

    // 用指定顏色屬性從一行指定列開始清空到結尾
    static void ClearLine(COORD pos, WORD attr = GetTextColor());

    // 用指定顏色屬性畫一個矩形
    static void Box(SMALL_RECT rect, WORD attr = GetTextColor());

    // 不影響內容改變一塊區域的背景色
    static void FillBackColor(SMALL_RECT rect, BYTE back = BLACK);

    // 用指定文本顏色在指定位置輸出字符串
    static void WriteString(const wchar_t* str, COORD pos, WORD attr = GetTextColor());

    // 用指定文本顏色在指定位置輸出字符串
    static void WriteString(const char* str, COORD pos, WORD attr = GetTextColor());

    static const CHAR_INFO* SaveScreen(void);
    static bool LoadScreen(const CHAR_INFO* buffer);

    // 讀取一個鍵盤按鍵並返回其掃描碼
    static KeyCode ReadKeypress(void);
};

授人以渔,不授人以鱼。
2014-07-10 22:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实看8楼的头文件就知道了,这是纯粹的C代码,但为了打包方便(最主要是回避C那种带前缀标识归类的函数命名法),就封装在一个静态类中,里面写的全部都是C代码,连引用(&)都没用,还是用传统的指针和数组。

授人以渔,不授人以鱼。
2014-07-10 23:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 10 楼 zhu224039
这个不用opengl

授人以渔,不授人以鱼。
2014-07-11 21:33
快速回复:一个文本界面的效果测试
数据加载中...
 
   



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

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