• Пожаловаться

А. Легалов: Применение Windows API

Здесь есть возможность читать онлайн «А. Легалов: Применение Windows API» весь текст электронной книги совершенно бесплатно (целиком полную версию). В некоторых случаях присутствует краткое содержание. Город: Красноярск, год выпуска: 2002, категория: Программирование / на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале. Библиотека «Либ Кат» — LibCat.ru создана для любителей полистать хорошую книжку и предлагает широкий выбор жанров:

любовные романы фантастика и фэнтези приключения детективы и триллеры эротика документальные научные юмористические анекдоты о бизнесе проза детские сказки о религиии новинки православные старинные про компьютеры программирование на английском домоводство поэзия

Выбрав категорию по душе Вы сможете найти действительно стоящие книги и насладиться погружением в мир воображения, прочувствовать переживания героев или узнать для себя что-то новое, совершить внутреннее открытие. Подробная информация для ознакомления по текущему запросу представлена ниже:

libcat.ru: книга без обложки

Применение Windows API: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Применение Windows API»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

А. Легалов: другие книги автора


Кто написал Применение Windows API? Узнайте фамилию, как зовут автора книги и список всех его произведений по сериям.

Применение Windows API — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Применение Windows API», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

_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(COLOR_WINDOW + 1);

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

}

void WinClass::SetResIcons(int resid) {

_class.hIcon = reinterpret_cast(:: 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(:: 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

int _y; // vertical position of window

int _width; // window width

int _height; // window height

HWND _hWndParent; // handle to parent or owner window

HMENU _hMenu; // handle to menu, or child-window id

void * _data; // pointer to window-creation data

};

WinMaker::WinMaker(WinClass& winclass) : _hwnd(0), _class(winClass), _exStyle(0), // extended window style

_windowName (0), // pointer to window name

_style(WS_OVERLAPPED), // window style

_x(CW_USEDEFAULT), // horizontal position of window

_y(0), // vertical position of window

_width(CW_USEDEFAULT), // window width

_height(0), // window height

_hWndParent(0), // handle to parent or owner window

_hMenu(0), // handle to menu, or child-window id

_data(0) // pointer to window-creation data

{ }

void WinMaker::Create() {

_hwnd = :: CreateWindowEx(_exStyle, _class.GetName(), _windowName, _style, _x, _y, _width, _height, _hWndParent, _hMenu, _class.GetInstance(), _data);

if (_hwnd == 0) throw WinException ("Internal error: Window Creation Failed.");

}

void WinMaker::Show(int nCmdShow) {

::ShowWindow(_hwnd, nCmdShow);

::UpdateWindow(_hwnd);

}

// Makes top overlapped window with caption

TopWinMaker::TopWinMaker((WinClass& winclass, char const* caption) : WinMaker(winClass) {

_style = WS_OVERLAPPEDWINDOW | WS_VISIBLE;

_windowName = caption;

}

Классы общего назначения

Прежде, чем идти дальше, рассмотрим некоторые простые классы общего назначения. WinException — нечто, что мы хотим использовать для исключений во время сбоев Windows API. Он заботится о восстановлении кода ошибки Windows. (Между прочим, имеется простой способ преобразовать код ошибки в строку функцией API FormatMessage.)

Класс ResStringпросто инкапсулирует строку, хранимую в строковых ресурсах вашего приложения.

// The exception class: stores the message and the error code class

WinException{

public:

WinException(char* msg) : _err(:: GetLastError()), _msg(msg) {}

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Применение Windows API»

Представляем Вашему вниманию похожие книги на «Применение Windows API» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё не прочитанные произведения.


Отзывы о книге «Применение Windows API»

Обсуждение, отзывы о книге «Применение Windows API» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.