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



             

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


  • экземпляр приложения — переменная hInstance, которую мы получили в качестве первого параметра нашей функции _tWinMain, именно она содержит необходимое значение экземпляра;
  • имя ресурса — наша картинка сохранена под именем IDB_BITMAP1;
  • тип изображения — в нашем случае растровая картинка — IMAGE_BITMAP;
  • размеры (следующие два параметра) — мы указали значение 0, чтобы использовать текущие размеры картинки;
  • флаги — здесь указано LR_DEFAULTCOLOR, что означает использование цветов по умолчанию.
  • Больше в этой функции мы пока ничего изменять не будем. Чуть позже мы еще сюда вернемся и добавим пару строчек, а сейчас переходим в функцию Initlnstance. Она будет выглядеть как в листинге 2.1.

    Листинг 2.1. Обновленная функция InitInstance
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // Store instance handle in our global variable

    hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

    if (!hWnd) { return FALSE; } // Следующие строки добавлены нами int Style; Style = GetWindowLong(hWnd, GWL_STYLE); Style=Style || WS_CAPTION; Style=Style || WS_SYSMENU; SetWindowLong(hWnd, GWL_STYLE, Style);

    return TRUE; }

    Код, добавленный нами, начинается с объявления переменной Style, которая будет иметь тип int (целое число). В следующей строке этой переменной присваивается результат выполнения функции GetWindowLong. Она возвращает настройки окна и в скобках нужно передать два значения:

  • окно, параметры которого необходимо узнать — мы указываем только что созданное нами окно;
  • тип параметров — нас будет интересовать стиль окна, поэтому указана константа GWL_STYLE.
  • Зачем нам нужен стиль? Просто окно по умолчанию имеет заголовок, кнопки максимизации и минимизации, а нам все это не нужно. Для этого из полученного стиля в следующих двух строках удаляется заголовок окна и системное меню, которое содержит кнопки.

    Теперь выполняем функцию SetWindowLong, которая записывает значения обратно в настройки окна. Если сейчас запустить программу, то вы увидите только клиентскую часть — серый квадрат без заголовка, кнопок и обрамления.




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