创建一个图形界面的计算器

在这个示例中,我们将使用Nana库创建一个图形界面的计算器。这个计算器的界面看起来是这样的。

创建一个图形界面的计算器_第1张图片

界面的布局,使用nana::place可以很方便地实现这个界面。

现在我们开始编码。

#include 
#include 
#include 
#include 

using namespace nana;

struct stateinfo
{
    enum class state{init, operated, assigned};

    state   opstate{state::init};
    wchar_t operation{L'+'};
    double oprand{0};
    double outcome{0};
    label & procedure;
    label & result;

    stateinfo(label& proc, label& resl)
        : procedure(proc), result(resl)
    {}
};

//这里省略掉定义.
//完整的定义请查阅calculator.cpp

//处理数字键
void numkey_pressed(stateinfo& state, const arg_mouse& arg);

//处理运算符
void opkey_pressed(stateinfo& state, const arg_mouse& arg);

int main()
{
    form fm;
    fm.caption(STR("Calculator"));

    //使用类place来布局widgets 
    //类place的具体用法参阅 参考手册。
    place place(fm);
    place.div(  "vert"
        "");

    label procedure(fm), result(fm);

    //label的文本向右对齐
    procedure.text_align(nana::align::right);
    result.text_align(nana::align::right);
    result.typeface(nana::paint::font(nullptr, 14, true));

    place.field("procedure")<> op_keys;

    wchar_t keys[] = L"C\261%/789X456-123+0.=";
    nana::paint::font keyfont(nullptr, 10, true);
    for(auto key : keys)
    {
        op_keys.emplace_back(new button(fm));
        op_keys.back()->caption(string(1, key));
        op_keys.back()->typeface(keyfont);

        if('=' == key)
        {
            op_keys.back()->bgcolor(static_cast(0x7ACC));
            op_keys.back()->fgcolor(colors::white);
        }
        place.field("opkeys") << *op_keys.back();

        //设置按键的事件处理函数
        if(('0' <= key && key <= '9') || ('.' == key))
            op_keys.back()->events().click.connect(std::bind(numkey_pressed, std::ref(state), std::placeholders::_1));
        else
            op_keys.back()->events().click.connect(std::bind(opkey_pressed, std::ref(state), std::placeholders::_1));
    }

    place.collocate();
    fm.show();
    exec();
}
 
  
 
  
点击 calculator.cpp查阅计算器完整代码

查阅 参考手册 获取nana::place的具体用法。

你可能感兴趣的:(Nana,C++,Library)