Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

#include "../GUI.h"

using namespace Graph_lib;

class W7 : public Window {

// четыре способа продемонстрировать, что кнопка может

// передвигаться:

// показать/скрыть, изменить местоположение, создать новую

// и присоединить/отсоединить

public:

W7(int n, int n, const string& t);

Button* p1; // показать/скрыть

Button* p2;

bool sh_left;

Button* mvp; // переместить

bool mv_left;

Button* cdp; // создать/уничтожить

bool cd_left;

Button* adp1; // активировать/деактивировать

Button* adp2;

bool ad_left;

void sh; // действия

void mv;

void cd;

void ad;

static void cb_sh(Address, Address addr) // обратные вызовы

{ reference_to<W7>(addr).sh; }

static void cb_mv(Address, Address addr)

{ reference_to<W7>(addr).mv; }

static void cb_cd(Address, Address addr)

{ reference_to<W7>(addr).cd; }

static void cb_ad(Address, Address addr)

{ reference_to<W7>(addr).ad; }

};

Однако объект класса

W7
(эксперимент с объектом класса
Window
номер
7
) на самом деле содержит шесть кнопок: просто две из них он скрывает.

W7::W7(int w, int h, const string& t)

:Window(w,h,t),

sh_left(true),mv_left(true),cd_left(true),ad_left(true)

{

p1 = new Button(Point(100,100),50,20,"show",cb_sh);

p2 = new Button(Point(200,100),50,20,"hide",cb_sh);

mvp = new Button(Point(100,200),50,20,"move",cb_mv);

cdp = new Button(Point(100,300),50,20,"create",cb_cd);

adp1 = new Button(Point(100,400),50,20,"activate",cb_ad);

adp2 = new Button(Point(200,400),80,20,"deactivate",cb_ad);

attach(*p1);

attach(*p2);

attach(*mvp);

attach(*cdp);

p2–>hide;

attach(*adp1);

}

В этом классе существуют четыре обратных вызова. Каждый из них проявляется в том, что нажатая кнопка исчезает и вместо нее появляется новая. Однако это достигается четырьмя разными способами.

voidW7::sh // скрывает кнопку, показывает следующую

{

if (sh_left) {

p1–>hide;

p2–>show;

}

else {

p1–>show;

p2–>hide;

}

sh_left = !sh_left;

}

void W7::mv // перемещает кнопку

{

if (mv_left) {

mvp–>move(100,0);

}

else {

mvp–>move(–100,0);

}

mv_left = !mv_left;

}

void W7::cd // удаляет кнопку и создает новую

{

cdp–>hide;

delete cdp;

string lab = "create";

int x = 100;

if (cd_left) {

lab = "delete";

  • Читать дальше
  • 1
  • ...
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: