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

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

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

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

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

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

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

namespace Splitter{

void RegisterClass(HINSTANCE hInst);

void MakeWindow(HWnd& hwndSplitter /* out */, HWnd hwndParent, int childId);

};

Ниже приводится реализация этих функций.

LRESULT CALLBACK WndProcSplitter(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

void Splitter::RegisterClass(HINSTANCE hInst) {

WinClassMaker splitterClass(WndProcSplitter, "RsSplitterClass", hInst);

splitterClass.SetSysCursor(IDC_SIZEWE);

splitterClass.SetBgSysColor(COLOR_3DFACE);

splitterClass.Register();

}

void Splitter::MakeWindow(HWnd& hwndSplitter, HWnd hwndParent, int childId) {

ChildWinMaker splitterMaker("RsSplitterClass", hwndParent, childId);

splitterMaker.Create(); hwndSplitter.Init(splitterMaker);

splitterMaker.Show();

}

Курсор мыши IDC_SIZEWE мы связываем с классом расщепителя — это стандартная, «направленная с запада на восток», двунаправленная стрелка. Мы также устанавливаем фоновую кисть к COLOR_3DFACE.

Оконная процедура расщепителя имеет дело с созданием/разрушением расщепителя, прорисовкой и перемещением мыши.

LRESULT CALLBACK WndProcSplitter(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

SplitController* pCtrl = GetWinLong(hwnd);

switch (message) {

case WM_CREATE:

try {

pCtrl = new SplitController(hwnd, reinterpret_cast(lParam));

SetWinLong(hwnd, pCtrl);

} catch (char const * msg) {

MessageBox(hwnd, msg, "Initialization", MB_ICONEXCLAMATION | MB_OK);

return -1;

} catch (...) {

MessageBox(hwnd, "Unknown Error", "Initialization", MB_ICONEXCLAMATION | MB_OK);

return -1;

}

return 0;

case WM_SIZE:

pCtrl->Size(LOWORD(lParam), HIWORD(lParam));

return 0;

case WM_PAINT:

pCtrl->Paint();

return 0;

case WM_LBUTTONDOWN:

pCtrl->LButtonDown(MAKEPOINTS(lParam));

return 0;

case WM_LBUTTONUP:

pCtrl->LButtonUp(MAKEPOINTS(lParam));

return 0;

case WM_MOUSEMOVE:

if (wParam & MK_LBUTTON) pCtrl->LButtonDrag(MAKEPOINTS(lParam));

return 0;

case WM_CAPTURECHANGED:

pCtrl->CaptureChanged();

return 0;

case WM_DESTROY:

SetWinLong(hwnd, 0);

delete pCtrl;

return 0;

}

return ::DefWindowProc(hwnd, message, wParam, lParam);

}

Это, в значительной степени, стандартный код. Подробности, как обычно, находятся в методах контроллера. Конструктор очень прост.

SplitController::SplitController(HWND hwnd, CREATESTRUCT * pCreat) : _hwnd (hwnd), _hwndParent (pCreat->hwndParent) {}

Прорисовка более интересна. Мы должны имитировать эффекты 2.5-размерности Windows. Мы делаем это путем тщательного отбора перьев.

class Pens3d {

public:

Pens3d();

Pen& Hilight() { return _penHilight; }

Pen& Light() { return _penLight; }

Pen& Shadow() { return _penShadow; }

Pen& DkShadow() { return _penDkShadow; }

private:

Pen _penHilight;

Pen _penLight;

Pen _penShadow;

Pen _penDkShadow;

};

Pens3d::Pens3d() : _penLight( GetSysColor(COLOR_3DLIGHT)), _penHilight( GetSysColor(COLOR_3DHILIGHT)), _penShadow( GetSysColor(COLOR_3DSHADOW)), _penDkShadow( GetSysColor(COLOR_3DDKSHADOW)) {}

void SplitController::Paint() {

PaintCanvas canvas(_hwnd);

{

PenHolder pen(canvas, _pens.Light());

canvas.Line(0, 0, 0, _cy - 1);

}

{

PenHolder pen(canvas, _pens.Hilight());

canvas.Line(1, 0, 1, _cy - 1);

}

{

PenHolder pen(canvas, _pens.Shadow());

canvas.Line(_cx - 2, 0, _cx - 2, _cy - 1);

}

{

PenHolder pen(canvas, _pens.DkShadow());

canvas.Line(_cx - 1, 0, _cx - 1, _cy - 1);

}

}

Более сложной является обработка сообщений от мыши, хотя значительная часть этого кода довольно стандартна. Мы должны обработать перемещение мыши и нажатие кнопки.

void SplitController::LButtonDown(POINTS pt) {

_hwnd.CaptureMouse();

// Find x offset of splitter

// with respect to parent client area POINT

ptOrg = {0, 0};

_hwndParent.ClientToScreen(ptOrg);

int xParent = ptOrg.x;

ptOrg.x = 0;

_hwnd.ClientToScreen(ptOrg);

int xChild = ptOrg.x;

_dragStart = xChild - xParent + _cx / 2 - pt.x;

_dragX = _dragStart + pt.x;

// Draw a divider using XOR mode

UpdateCanvas canvas(_hwndParent);

ModeSetter mode(canvas, R2_NOTXORPEN);

canvas.Line (_dragX, 0, _dragX, _cy - 1);

}

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

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


libcat.ru: книга без обложки
Неизвестный Автор
Отзывы о книге «Применение Windows API»

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

x