Платформа Win32 - Окна
Участников: 4
Страница 1 из 1
Платформа Win32 - Окна
Windows
Окно в приложении, написанном для операционных систем Microsoft® Windows® или ReactOS® — это прямоугольная область экрана, выводящее информацию на дисплей и получающее ввод от пользователя. Окно совместно использует экран с другими окнами, включая те от других приложений. Только одно окно одновременно может получить ввод от пользователя. Пользователь может использовать мышь, клавиатуру, или другое устройство ввода данных, чтобы взаимодействовать с этим окном и приложением.
Почти каждый объект в Windows — это окно. Все кнопки, флажки, раскрывающиеся списки, меню, кнопка пуск, даже рабочий стол — это всё окно. Каждое окно имеет определённый класс, который может быть встроенным в Windows, а может быть созданный пользователем.
Создание класса окна
Подключаем заголовочный файл:
И объявляем две функции, которые нам понадобятся:
Функция WinMain нужна для регистрации и создания нашего окна, а функция WndProc будет принимать сообщения, посылаемые операционной системой.
Для создания окна нам необходимо зарегистрировать собственный класс окна, например, функцией RegisterClass. Эта функция принимает структуру типа WNDCLASS, которую необходимо инициализировать.
Теперь можно создать окно зарегистрированного класса функцией CreateWindow:
Функция возвращает идентификатор, с помощью которого можно манипулировать окном. Теперь нам необходимо показать созданное окно и обновить его:
Запускаем цикл получения сообщений от окна
Для того, чтобы принимать сообщения от окна нам необходима функция с именем WndProc.
Теперь осталось самое основное — запуск программы
(Оператор End закрывает программу с кодом завершения, обычно 0, если нет ошибок.)
Окно в приложении, написанном для операционных систем Microsoft® Windows® или ReactOS® — это прямоугольная область экрана, выводящее информацию на дисплей и получающее ввод от пользователя. Окно совместно использует экран с другими окнами, включая те от других приложений. Только одно окно одновременно может получить ввод от пользователя. Пользователь может использовать мышь, клавиатуру, или другое устройство ввода данных, чтобы взаимодействовать с этим окном и приложением.
Почти каждый объект в Windows — это окно. Все кнопки, флажки, раскрывающиеся списки, меню, кнопка пуск, даже рабочий стол — это всё окно. Каждое окно имеет определённый класс, который может быть встроенным в Windows, а может быть созданный пользователем.
Создание класса окна
Подключаем заголовочный файл:
- Код:
#Include "windows.bi"
И объявляем две функции, которые нам понадобятся:
- Код:
Declare Function WinMain(ByVal hInstance As HINSTANCE, ByVal hPrevInstance As HINSTANCE, ByVal szCmdLine As String, ByVal iCmdShow As Integer) As Integer
Declare Function WndProc(ByVal hWnd As HWND, ByVal wMsg As UINT, ByVal wParam As WPARAM, ByVal lParam As LPARAM) As LRESULT
Функция WinMain нужна для регистрации и создания нашего окна, а функция WndProc будет принимать сообщения, посылаемые операционной системой.
Для создания окна нам необходимо зарегистрировать собственный класс окна, например, функцией RegisterClass. Эта функция принимает структуру типа WNDCLASS, которую необходимо инициализировать.
- Код:
Function WinMain (ByVal hInst As HINSTANCE, _
ByVal hPrevInstance As HINSTANCE, _
ByVal szCmdLine As String, _
ByVal iCmdShow As Integer) As Integer
Dim wMsg As MSG ' Сообщение, полученное от окна
Dim wc As WNDCLASS ' Структура для регистрации класса окна
Dim hWnd As HWND ' Идентификатор создаваемого окна
With wc
.style = CS_HREDRAW Or CS_VREDRAW ' стиль прорисовки окна
.lpfnWndProc = @WndProc ' Адрес функции, которая будет принимать сообщения от опрерационной системы
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = hInst ' Идентификатор процесса
.hIcon = LoadIcon(NULL, IDI_APPLICATION) ' Значок по умолчанию
.hCursor = LoadCursor(NULL, IDC_ARROW) ' Курсор по умолчанию
.hbrBackground = Cast(HBRUSH, COLOR_BTNFACE + 1) ' Кисть фона окна
.lpszMenuName = NULL ' Идентификатор меню, так как у нас нет такового, оставляем пустое значение
.lpszClassName = @"FreeBASIC Window" ' Адрес строки с именем нашего класса
End With
' Регистрируем класс окна
' Если у нас есть ошибки, то RegisterClass возвращает нулевое значение
RegisterClass(@wc)
Теперь можно создать окно зарегистрированного класса функцией CreateWindow:
- Код:
hWnd = CreateWindow(@"FreeBASIC Window", _ /' Адрес строки с именем только что созданного класса '/
"Пример простого окна", _ /' Заголовок окна '/
WS_OVERLAPPEDWINDOW, _ /' '/
CW_USEDEFAULT, _ /' Координата X верхнего левого угла окна, но в данном случае используется значение по умолчанию '/
CW_USEDEFAULT, _ /' Координата Y верхнего левого угла окна, но в данном случае используется значение по умолчанию '/
320, _ /' Ширина окна '/
240, _ /' Высота окна '/
NULL, _ /' Идентификатор родительского окна, используется если создаваемое окно является дочерним '/
NULL, _ /' Идентификатор меню из ресурсов программы, у нас его нет '/
hInst, _ /' Идентификатор процесса, создающего окно '/
NULL) /' Дополнительные данные, у нас их нет '/
Функция возвращает идентификатор, с помощью которого можно манипулировать окном. Теперь нам необходимо показать созданное окно и обновить его:
- Код:
ShowWindow(hWnd, iCmdShow)
UpdateWindow(hWnd)
Запускаем цикл получения сообщений от окна
- Код:
Do While GetMessage(@wMsg, NULL, 0, 0) <> 0
TranslateMessage(@wMsg)
DispatchMessage(@wMsg)
Loop
Return wMsg.wParam
End Function
Для того, чтобы принимать сообщения от окна нам необходима функция с именем WndProc.
- Код:
Function WndProc(ByVal hWnd As HWND, _
ByVal wMsg As UINT, _
ByVal wParam As WPARAM, _
ByVal lParam As LPARAM) As LRESULT
' Выбираем сообщение, которое мы получили
Select Case(wMsg)
Case WM_CLOSE
' Сообщение о закрытии окна
' Уничтожаем окно
DestroyWindow(hWnd)
Case WM_DESTROY
' Окно уничтожается
PostQuitMessage(0)
Return 0
Case Else
' Отправляем сообщение обработчику
' по умолчанию
Return DefWindowProc(hWnd, wMsg, wParam, lParam)
End Select
End Function
Теперь осталось самое основное — запуск программы
(Оператор End закрывает программу с кодом завершения, обычно 0, если нет ошибок.)
- Код:
End WinMain(GetModuleHandle(NULL), NULL, Command(), SW_NORMAL)
Re: Платформа Win32 - Окна
О, наши ряды пополняются))
Хорошая статья, основы создания ГУИ под винду есть. К чему особо придраться мона я не нашел
Хорошая статья, основы создания ГУИ под винду есть. К чему особо придраться мона я не нашел
Re: Платформа Win32 - Окна
Классно!
Очень похоже на соответствующую главу Iczeliona "создание окна на asm32"
Но именно про freebasic.
Теперь бы ещё про хотябы основные элементы, кнопки, поля, менюшки...
И про диалоговые окна dialogbox, к ним про стандартные окна открытия и сохранения файла.
Но по любому, zamabuvaraeu, мой респект и уважуха!
Всем же остальным, возбуждённым, но неудовлетворённым, читать Уроки Iczelion'а
Очень похоже на соответствующую главу Iczeliona "создание окна на asm32"
Но именно про freebasic.
Теперь бы ещё про хотябы основные элементы, кнопки, поля, менюшки...
И про диалоговые окна dialogbox, к ним про стандартные окна открытия и сохранения файла.
Но по любому, zamabuvaraeu, мой респект и уважуха!
Всем же остальным, возбуждённым, но неудовлетворённым, читать Уроки Iczelion'а
Re: Платформа Win32 - Окна
Вообще, я планирую писать по платформе Win32 много статей, каждая будет постепенно переходить от простого к сложному. Как раз будет и про элементы управления, про меню, ресурсы программы, GDI Plus, многое другое.
Re: Платформа Win32 - Окна
Отличненько! Будем с нетерпением ждать. Для меня это вообще крайне интересно.
Re: Платформа Win32 - Окна
Пара слов для начинающих разбираться с winApi и окнами.
Это всё кажеться таким странным, внушительным. Вызываеться куча функций с множеством непонятных параметров.
Но вы не пугайтесь, а начните разбираться с этим.
Функций не так уж и много, да и параметров, кстати тоже.
Если что-то выкидывать или упрощать, то пострадает гибкость или функционал.
Комментарии, которых много в примерах, увеличивают код.
А потом, вы не обязаны это писать каждый раз. Возьмите, сделайте себе несколько заготовок, которые будите брать за основу новых проектов.
Да, визуальная разработка облекчает жизнь, особенно дилетантам.
Возьмите в руки весь процесс и вперёд. У вас выйдет намного лучше, чем у них!
zamabuvaraeu, и небольшое замечание. Пожалуйста, после каждого тега открытия кода "code" переводи строчку, так будет удобнее копировать код.
Это всё кажеться таким странным, внушительным. Вызываеться куча функций с множеством непонятных параметров.
Но вы не пугайтесь, а начните разбираться с этим.
Функций не так уж и много, да и параметров, кстати тоже.
Если что-то выкидывать или упрощать, то пострадает гибкость или функционал.
Комментарии, которых много в примерах, увеличивают код.
А потом, вы не обязаны это писать каждый раз. Возьмите, сделайте себе несколько заготовок, которые будите брать за основу новых проектов.
Да, визуальная разработка облекчает жизнь, особенно дилетантам.
Возьмите в руки весь процесс и вперёд. У вас выйдет намного лучше, чем у них!
zamabuvaraeu, и небольшое замечание. Пожалуйста, после каждого тега открытия кода "code" переводи строчку, так будет удобнее копировать код.
Re: Платформа Win32 - Окна
Вот интересная статья. Хотя это статеищя, или даже мини справочник.
http://dims.karelia.ru/win32/
В статье рассказываеться про программирования win32api и в первую очередь окон.
Про окна, элементы взаимодействие и управления ими очень много инфы.
Кратенько затронуты многие важные темы.
Причём на русском и очень внятно.
Минусом может быть, что речь идёт о borland comand line compilerили просто bcc. Но по сути различий очень мало.
http://dims.karelia.ru/win32/
В статье рассказываеться про программирования win32api и в первую очередь окон.
Про окна, элементы взаимодействие и управления ими очень много инфы.
Кратенько затронуты многие важные темы.
Причём на русском и очень внятно.
Минусом может быть, что речь идёт о borland comand line compilerили просто bcc. Но по сути различий очень мало.
Re: Платформа Win32 - Окна
Спасибо за советы по оформлению, все пожелания по оформлению кода и статей учту. Говорите мне это всё сразу, иначе ошибки будут множиться и дальше, с каждой новой статьёй.
Re: Платформа Win32 - Окна
ну вот и я пополняю данный раздел ссылкой
http://dmtsoft.ru/bn/312/as/oneaticleshablon/
там рассказывается про win32 окна, меню, ресурсы, диалоговые окна. данная статья будет интересна тем, кому хочется узнать про устройство rc файлов. к сожалению код программ расчитан под c, но файлы с ресурсами везде одинаковы, заисключением delphi и vb.
кстати, кто-то задавал вопрос про окно ввода(текстовое окно), там есть програмка с окном ввода и списком, но к сожалению на c.
http://dmtsoft.ru/bn/312/as/oneaticleshablon/
там рассказывается про win32 окна, меню, ресурсы, диалоговые окна. данная статья будет интересна тем, кому хочется узнать про устройство rc файлов. к сожалению код программ расчитан под c, но файлы с ресурсами везде одинаковы, заисключением delphi и vb.
кстати, кто-то задавал вопрос про окно ввода(текстовое окно), там есть програмка с окном ввода и списком, но к сожалению на c.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения