⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ns_messagebox.cpp

📁 需要clanlib 库 这个改进版的 在linux 很好玩 但是一定要有clanlib
💻 CPP
字号:
// NS_MessageBox.cpp: implementation of the NS_MessageBox class.////////////////////////////////////////////////////////////////////////#include "NS_MessageBox.h"#include <ClanLib/signals.h>#include <ClanLib/signals.h>#include <ClanLib/display.h>#include <ClanLib/display.h>#include <ClanLib/core.h>#include <ClanLib/core.h>//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////NS_MessageBox::NS_MessageBox(CL_Component * parent,        std::string const & title,        std::string const & text,        std::string const & button1,        std::string const & button2,        std::string const & button3)    : CL_Window(parent, parent->get_style_manager()),    result(-1),    title(title),    text(text),    button1_text(button1),    button2_text(button2),    button3_text(button3),	font(0){    font = new CL_Font("my_fnt_4", get_style_manager()->get_resources());    int width = 400;    int height = 50 + 40 + font->get_height(text, CL_Size(width - 15, 0));    // Calc dialog position    set_position(CL_Rect(        CL_Display::get_width()  / 2 - width / 2,        CL_Display::get_height() / 2 - height / 2,        CL_Display::get_width()  / 2 + width / 2,        CL_Display::get_height() / 2 + height / 2));        set_title(title);    int num_buttons = 1;    if (!button2_text.empty())        num_buttons = 2;    if (!button3_text.empty())        num_buttons = 3;        int btn_pos_y = height - 40;    switch(num_buttons) {    case 1:        {            CL_Button * btn_1 = new CL_Button(CL_Point(width / 2, btn_pos_y), button1_text, get_client_area());            btn_1->set_position(width / 2 - btn_1->get_width() / 2, btn_pos_y);            slots.connect(btn_1->sig_clicked(), this, &NS_MessageBox::on_button1);            btn_1->find_preferred_size();            components["btn_1"] = btn_1;        }    	break;    case 2:        {            CL_Button * btn_1 = new CL_Button(CL_Point(width / 2, btn_pos_y), button1_text, get_client_area());            CL_Button * btn_2 = new CL_Button(CL_Point(width / 2, btn_pos_y), button2_text, get_client_area());            btn_1->find_preferred_size();            btn_2->find_preferred_size();            {                int const total_size = btn_1->get_width() + 20 + btn_2->get_width();                btn_1->set_position(width / 2 - total_size / 2, btn_pos_y);                btn_2->set_position(width / 2 - total_size / 2 + btn_1->get_width() + 20, btn_pos_y);            }            slots.connect(btn_1->sig_clicked(), this, &NS_MessageBox::on_button1);            slots.connect(btn_2->sig_clicked(), this, &NS_MessageBox::on_button2);            components["btn_1"] = btn_1;            components["btn_2"] = btn_2;        }    	break;    case 3:        {            CL_Button * btn_1 = new CL_Button(CL_Point(width / 2, btn_pos_y), button1_text, get_client_area());            CL_Button * btn_2 = new CL_Button(CL_Point(width / 2, btn_pos_y), button2_text, get_client_area());            CL_Button * btn_3 = new CL_Button(CL_Point(width / 2, btn_pos_y), button3_text, get_client_area());            btn_1->find_preferred_size();            btn_2->find_preferred_size();            btn_3->find_preferred_size();            {                int const total_size = btn_1->get_width() + 20 +                    btn_2->get_width() + 20 + btn_3->get_width();                btn_1->set_position(width / 2 - total_size / 2, btn_pos_y);                btn_2->set_position(width / 2 - total_size / 2 +                    btn_1->get_width() + 20, btn_pos_y);                btn_3->set_position(width / 2 - total_size / 2 +                    btn_1->get_width() + 20 +                    btn_2->get_width() + 20, btn_pos_y);            }            slots.connect(btn_1->sig_clicked(), this, &NS_MessageBox::on_button1);            slots.connect(btn_2->sig_clicked(), this, &NS_MessageBox::on_button2);            slots.connect(btn_3->sig_clicked(), this, &NS_MessageBox::on_button3);            components["btn_1"] = btn_1;            components["btn_2"] = btn_2;            components["btn_3"] = btn_3;        }    	break;    }    // Connect signals    slots.connect(CL_Keyboard::sig_key_down(), this,        &NS_MessageBox::on_key_down);    slots.connect(this->sig_end_paint(), this, &NS_MessageBox::on_end_paint);}NS_MessageBox::~NS_MessageBox(){	std::map<std::string, CL_Component * >::iterator it = components.begin();	for(; it != components.end(); ++it)		delete it->second;	delete font;}void NS_MessageBox::on_key_down(CL_InputEvent const & key){    if (key.id == CL_KEY_ESCAPE)    {        result = -1;        quit();    }    else        if (key.id == CL_KEY_RETURN)        {            result = 1;            quit();        }}int NS_MessageBox::info(CL_Component * parent,        std::string const & title,        std::string const & text,        std::string const & button1,        std::string const & button2,        std::string const & button3){    NS_MessageBox dlg(parent,        title,        text,        button1,        button2,        button3);    dlg.run();    return dlg.get_result();}int NS_MessageBox::get_result() const{    return result;}void NS_MessageBox::on_button1(){    result = 1;    quit();}void NS_MessageBox::on_button2(){    result = 2;    quit();}void NS_MessageBox::on_button3(){    result = 3;    quit();}void NS_MessageBox::on_end_paint(){    CL_Rect rect = get_position();    rect.left   += 15 + 15;    rect.right  -= 15;    rect.top    += 50;    rect.bottom -= 40;    font->draw(rect, text);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -