Чтение онлайн

на главную - закладки

Жанры

Применение Windows API

Легалов А. И.

Шрифт:

HWND hwndPopup = ::GetLastActivePopup(hwnd);

if (::IsWindow(hwndpopup)) hwnd = hwndPopup;

 } else hwnd = 0;

 return hwnd;

}

class WinClass: public WinSimpleClass {

public:

 WinClass(char const* className, HINSTANCE hInst, WNDPROC wndProc);

 WinClass(int resId, HINSTANCE hInst, WNDPROC wndProc);

 void SetBgSysColor (int sysColor) {

_class.hbrBackground = reinterpret_cast<HBRUSH> (sysColor + 1);

 }

 void SetResIcons(int resId);

 void Register;

protected:

 void SetDefaults;

 WNDCLASSEX _class;

};

WinClass::WinClass(char const * classname, HINSTANCE hInst, WNDPROC wndProc) : WinSimpleClass (className, hInst) {

 _class.lpfnWndProc = wndProc;

 SetDefaults;

}

WinClass::WinClass(int resid, hinstance hinst, wndproc wndproc) : WinSimpleClass (resId, hInst) {

 _class.lpfnWndProc = wndProc;

 SetDefaults;

}

void WinClass::SetDefaults {

 // Provide reasonable default values

 _class.cbSize = sizeof (WNDCLASSEX);

 _class.style = 0;

 _class.lpszClassName = GetName;

 _class.hInstance = GetInstance;

 _class.hIcon = 0;

 _class.hIconSm = 0;

 _class.lpszMenuName = 0;

 _class.cbClsExtra = 0;

 _class.cbWndExtra = 0;

 _class.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1);

 _class.hCursor = ::LoadCursor(0, IDC_ARROW);

}

void WinClass::SetResIcons (int resid) {

 _class.hIcon = reinterpret_cast<HICON>(::LoadImage(_class.hInstance, MAKEINTRESOURCE(resId), IMAGE_ICON, ::GetSystemMetrics(sm_cxicon), ::GetSystemMetrics(sm_cyicon), 0));

 // Small icon can be loaded from the same resource

 _class.hIconSm = reinterpret_cast<HICON>(::LoadImage(_class.hInstance, MAKEINTRESOURCE(resId), IMAGE_ICON, :: GetSystemMetrics(sm_cxsmicon), ::GetSystemMetrics(sm_cysmicon), 0));

}

void WinClass::Register {

 if (::RegisterClassEx(&_class) == 0) throw WinException("Internal error: RegisterClassEx failed.");

}

class TopWinClass: public WinClass {

public:

 TopWinClass(int resId, HINSTANCE hInst, WNDPROC wndProc);

};

TopWinClass::TopWinClass(int resid, HINSTANCE hInst, WNDPROC wndProc) : WinClass (resId, hInst, wndProc) {

 SetResIcons(resId);

 _class.lpszMenuName = MAKEINTRESOURCE(resId);

}

После

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

WinMaker

Класс WinMaker организован аналогично WinClass. Его конструктор устанавливает значения по умолчанию, которые могут быть переустановлены вызовом специфических методов. После завершения всех установок, Вы вызываете метод Create, чтобы создать окно, и метод Show, чтобы отобразить его. Обратите внимание, что в тот момент, когда Вы вызываете Create, ваша оконная процедура вызывается с сообщением WM_CREATE.

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

class WinMaker {

public:

 WinMaker(WinClass& winClass);

 operator HWND { return _hwnd; }

 void AddCaption(char const * caption) {

 _windowName = caption;

 }

 void AddSysMenu { _style |= WS_SYSMENU; }

 void AddVScrollBar { _style |= WS_VSCROLL; }

 void AddHScrollBar { _style |= WS_HSCROLL; }

 void Create;

 void Show(int nCmdShow = SW_SHOWNORMAL);

protected:

 WinClass& _class;

 HWND _hwnd;

 DWORD _exStyle; // extended window style

 char const* _windowName; // pointer to window name

 DWORD _style; // window style

 int _x; // horizontal position of window

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

Метатель. Книга 7

Тарасов Ник
7. Метатель
Фантастика:
боевая фантастика
попаданцы
постапокалипсис
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Метатель. Книга 7

Вернуть Боярство 3

Мамаев Максим
3. Пепел
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Вернуть Боярство 3

Сумеречный Стрелок 3

Карелин Сергей Витальевич
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 3

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Неправильный лекарь. Том 1

Измайлов Сергей
1. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неправильный лекарь. Том 1

Черный дембель. Часть 2

Федин Андрей Анатольевич
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Черный дембель. Часть 2

Развод с генералом драконов

Солт Елена
Фантастика:
фэнтези
5.00
рейтинг книги
Развод с генералом драконов

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Возвышение Меркурия. Книга 15

Кронос Александр
15. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 15

Кодекс Охотника. Книга XXIII

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

Бастард Императора. Том 4

Орлов Андрей Юрьевич
4. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 4

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Своя правда

Шебалин Дмитрий Васильевич
2. Чужие интересы
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Своя правда