Программирование на C++ глазами хакера



             

Летающий Пуск - часть 5


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

  • контекст, в который нужно выбрать объект, — указываем созданный нами контекст, на основе оконного;
  • объект, который надо выбрать, — указываем картинку.
  • Вот теперь можно производить копирование с помощью функции BitBlt. У нее в скобках нужно указать следующие параметры:

  • контекст рисования, в который надо копировать (приемник), — указываем контекст окна;
  • следующие четыре параметра являются левой верхней координатой, шириной и высотой прямоугольника, в который надо скопировать изображение (целые числа). В данном случае левая и верхняя позиции будут равны нулю, чтобы картинка располагалась в левом верхнем углу окна. Ширина и высота равны размеру картинки (50x20);
  • источник копирования — указываем контекст hdcBits, в котором находится наша картинка;
  • следующие два параметра задают левую верхнюю координату прямоугольника в контексте-источнике (именно от этой точки будет взято изображение для копирования) — указываем нули, т. к. нас интересует вся кнопка;
  • последний параметр указывает на тип копирования — используем флаг SRC_COPY, т. к. будем создавать копию источника в приемнике.
  • После рисования нам уже не нужен контекст, который мы создали для картинки, и хорошим тоном было бы удалить его. Для этого вызываем функцию DeleteDC и в качестве параметра указываем наш контекст рисования.

    Завершаем рисование вызовом метода EndPaint. Таким образом мы ставим точку в начатое функцией BeginPaint рисование.

    Теперь в нашем окне в левом верхнем углу будет рисоваться изображение кнопки Пуск. Остается сделать самую малость — уменьшить размер окна до размеров изображения, чтобы пользователь видел только картинку, и заставить окно двигаться. Для этого мы должны написать функцию DrawStartButton (листинг 2.3), Желательно, до функци _tWinMain.

    Листинг 2.3. Функция , заставляющая окно двигаться
    void DrawStartButton() { int i; HANDLE h; int toppos=GetSystemMetrics(SM_CYSCREEN)-23;




    Содержание  Назад  Вперед