Читаем Developing a GUI in C++ and DirectX полностью

5) Finally, after all of my controls were complete, I coded up a simple Resource Editor, a program that allows someone to graphically place controls and layout dialog boxes. The resource editor took me a good month to do, but I highly suggest doing it (instead of just using text files to position stuff) - it’s much easier to create dialog boxes graphically, and it was a good exercise: during development I uncovered several bugs in my controls’ code, things that would have proven very difficult to catch in the actual game.

I toyed, for a very long time, with the idea of creating a program that would convert an MSVC++ resource (.RC) file into a custom resource file useable by my GUI. In the end, I decided such a program would be more trouble than what it would be worth. The whole reason I was writing a GUI was to get away from the confines of Windows, and to truly do that, I needed my own editor, tied to my own resource file format and my own way of doing things. I decided to implement a WYSIWYG Resource Editor in MFC from the ground up. My needs, my decision; your needs may be different. If anyone out there tries to write a converter, I’d love to hear about it.

So… let’s start with step one: basic window management functions.

<p>The Implementation</p>

Here we go. Here’s a good start for our base-class window definition:

class gui_window {

public:

 gui_window(); // boring

 virtual ~gui_window(); // boring

 virtual void init(void); // boring

 gui_window *getparent(void) { return(m_pParent); }

 /////////////

 // section I: window management controls

 /////////////

 int addwindow(gui_window *w);

 int removewindow(gui_window *w);

 void show(void) { m_bIsShown = true; }

 void hide(void) { m_bIsShown = false; }

 bool isshown(void) { return(m_bIsShown); }

 void bringtotop(void);

 bool isactive(void);

 /////////////

 // Section II: coordinates

 /////////////

 void setpos(coord x1, coord y1); // boring

 void setsize(coord width, coord height); // boring

 void screentoclient(coord& x, coord& y);

 int virtxtopixels(coord virtx); // convert GUI units to actual pixels

 int virtytopixels(coord virty); // ditto

 virtual gui_window *findchildatcoord(coord x, coord y, int flags = 0);

 /////////////

 // Section III: Drawing Code

 /////////////

 // renders this window + all children recursively

 int renderall(coord x, coord y, int drawme = 1);

 gui_wincolor& getcurrentcolorset(void) { return(isactive() ? m_activecolors : m_inactivecolors); }

 /////////////

 // Messaging stuff to be discussed in later Parts

 /////////////

 int calcall(void);

 virtual int wm_paint(coord x, coord y);

 virtual int wm_rendermouse(coord x, coord y);

 virtual int wm_lbuttondown(coord x, coord y);

 virtual int wm_lbuttonup(coord x, coord y);

 virtual int wm_ldrag(coord x, coord y);

 virtual int wm_lclick(coord x, coord y);

 virtual int wm_keydown(int key);

 virtual int wm_command(gui_window *win, int cmd, int param) { return(0); };

 virtual int wm_cansize(coord x, coord y);

 virtual int wm_size(coord x, coord y, int cansize);

 virtual int wm_sizechanged(void) { return(0); }

 virtual int wm_update(int msdelta) { return(0); }

protected:

 virtual void copy(gui_window& r); // deep copies one window to another

 gui_window *m_pParent;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных