Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Visual C++ (MFC, платформа .NET)


Информационный Канал Subscribe.Ru

Уроки по Visual C++.NET. Рассылки сайта progs.biz
Выпуск № 88
 
Начало > Visual C++ 6 > ATL > Урок 16

Разработка WEB-сервисов XML и серверных компонентов на Visual Basic.NET и Visual C#.NET.
Разработка WEB-сервисов XML и серверных компонентов на Visual Basic.NET и Visual C#.NET
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 16.

Visual C++. ATL
Урок 16. Composite control - реагируем на изменение размера

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

Возмите за основу созданный на прошлом уроке компонент. Сейчас если вы будете менять его размер (например, на форме Visual Basic'а), то текстовые поля свой размер не меняют. Это не очень красиво, так что исправим это.

Нам следует добавить обработчик для сообщения Windows WM_SIZE. Для этого в контекстном меню компонента в окне Class View выбираем Add Windows Message Handler.

В появившемся диалоговом окне выбирайте WM_SIZE, двойным щелчком перекидывайте его в правое окно и двойным же щелчком на перекинутом WM_SIZE открываем окно кода для редактирования. Обратите внимание, что этот обработчик имеет в том числе параметры типа WPARAM и LPARAM (именно в них передаются дополнительная информация о сообщениях Windows).

В заготовку для обработчика внесите следующий код:

    LRESULT OnSize(UINT uMsg, WPARAM wParam,
      LPARAM lParam, BOOL& bHandled)
    {
        // TODO : Add Code for message handler. Call DefWindowProc if necessary.
        // Получаем HWND наших текстовый полей.
      HWND edit1 = GetDlgItem(IDC_EDIT1);
      HWND edit2 = GetDlgItem(IDC_EDIT2);
      // Изменяем их расположение в соответствии с шириной компонента.
      ::SetWindowPos(edit1, NULL, 0, 0, LOWORD(lParam)-30, 25, SWP_NOMOVE);
      ::SetWindowPos(edit2, NULL, 0, 0, LOWORD(lParam)-30, 25, SWP_NOMOVE);
        return 0;
    }

Обратите внимание, как мы используем API-функцию SetWindowPos. Во-первых, мы последний параметр устновили в SWP_NOMOVE. Это означает, что третий и четвертый параметры (которые задают координаты левого верхнего угла) будут игнорироваться и наше текстовое поле не будет менять своего положения - а бедет менять только размер. И во-вторых, обратите внимание, как мы изменяем ширину нашего текстового поля - мы пишем LOWORD(lParam)-30. Тут LOWORD(lParam) - это ширина нашего компонента, из которой мы вычитаем 30 на поля - 15 с одной стороны и 15 с другой. То, что LOWORD(lParam) - это ширина нашего компонента, мы узнаем из справки на сообщение Windows WM_SIZE, которое мы и обрабатывали.

Теперь наши текстовые поля будут изменяться по ширине, если мы будм менять размеры нашего компонента.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2005 сайт progs.biz
© 2002-2005 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.lessonsfromai
Отписаться

В избранное