Применение 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
Поделиться:
Популярные книги
Мастер Разума III
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Часовое имя
4. Часодеи
Детские:
детская фантастика
9.56
рейтинг книги
Печать мастера
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Кротовский, не начинайте
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Эволюция мага
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Прорвемся, опера! Книга 3
3. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Демон
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Прорвемся, опера! Книга 2
2. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Офицер
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Призыватель нулевого ранга. Том 3
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Сделай это со мной снова
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Злыднев Мир. Дилогия
Злыднев мир
Фантастика:
фэнтези
7.67