FreeBASIC в России

   

 Главная   Исходники   Русскоязычный форум   Полезные файлы   Пользователи   Поиск

 

 FB Wiki   Уроки   Скачать FreeBASIC   Проекты   Ссылки   Загрузить   Каталог ссылок

 
 

 Замечания и предложения по работе сайта оставляйте здесь.

Сейчас на сайте:

Вы вошли как: Guest   Регистрация   

Логин:     Пароль:     

Создай бесплатно WebMoney кошелёк на своём мобильном всего за 5 минут

 

Делаем dll своими руками

Хэндл окна

Графические средства языка

Точка пересечения отрезков

Окна без рамки

Физика поведения ядра

Win32 API Введение

►Урок 1 Win32 API

►Урок 2 Win32 API

►Урок 3 Win32 API

►Урок 4 Win32 API

►Урок 5 Win32 API

►Урок 6 Win32 API

►Урок 7 Win32 API

►Урок 8 Win32 API

►Урок 9 Win32 API

►Урок 10 Win32 API

►Урок 11 Win32 API

►Урок 12 Win32 API

►Урок 13 Win32 API

►Урок 14 Win32 API

►Урок 15 Win32 API

►Урок 16 Win32 API

►Урок 17 Win32 API

►Урок 18 Win32 API

►Урок 19 Win32 API

►Урок 20 Win32 API

►Урок 21 Win32 API

►Урок 22 Win32 API

►Урок 23 Win32 API

►Урок 24 Win32 API

Ассоциация файлов

Определить OS

Выводит имя компьютера

 

 

 

Win32 API. Урок 2. MessageBox.

Опытом поделился и оптимизировал под FreeBASIC:   15.01.2011

 

Реклама:

Купить свидетельство о рождении у нас;кредиты и банки сравнить кредит Нордеа Банк заявка онлайн

 

В этом Уроке мы создадим полнофункциональную Windows программу, которое выводит сообщение "Win32 FreeBasic is great!".

Теория:

Windows предоставляет огромное количество ресурсов Windows-программам через Windows API (Application programming Interface). Windows API - это большая коллекция
очень полезных функций, располагающихся непосредственно в операционной системе, готовые для использования программами. Эти функции находятся в нескольких
динамически подгружаемых библиотек (DLLs), таких как kernel32.dll, user32.dll и gdi32.dll. Kernel32.dll содержит API функции, взаимодействующие с памятью
и управляющие процессами. User32.dll контролирует пользовательский интерфейс. Gdi32.dll ответственен за графические операции. Кроме этих трех "основных", существуют также другие dll, которые вы можете использовать, при условии, что вы обладаете достаточным количеством информации о нужных API функциях.
Windows программы динамически подсоединяются к этим библиотекам, то есть код API функций не включается в исполняемый файл. Информация находится в библиотеках импорта.
Вы должны слинковать ваши программы с правильными библиотеками импорта, иначе они не смогут найти эти функции. Когда Windows программа загружается в память, Windows читает информацию, сохраненную в программе. Эта информация включает имена функций, которые программа использует и DLL-ей, в которых эти функции располагаются. Когда Windows находит подобную информацию в программе, она вызывает библиотеки и исправляет в программе вызовы этих функций, так что контроль
всегда будет передаваться по правильному адресу. Существует две категории API функций: одна для ANSI и другая для Unicode. На конце имен API функций для
ANSI стоит "A", например, MessageBox. В конце имен функций для Unicode находится "W". Windows 95 от природы поддерживает ANSI и Windows NT Unicode. Мы
обычно имеем дело с ANSI строками (массивы символов, оканчивающиеся NULL-ом. размер ANSI-символа - 1 байт. В то время как ANSI достаточна для европейских языков, она не поддерживает некоторые восточные языки, в которых есть несколько тысяч уникальных символов. Вот в этих случаях в дело вступает UniCode.
размер символа UNICODE - 2 байта, и поэтому может поддерживать 65536 уникальных символов. но по большей части, вы будете использовать include-файл, который может определить и выбрать подходящую для вашей платформы функцию. Просто обращайтесь к именам API функций без постфикса.

Большинство прототипов для WindowsAPI-функций содержатся в include-файлах, находящихся в директории
"FreeBasic/inc/win"
Файлы подключения имеют расширение .bi.
Связующий файл windowsApi "windows.bi", находиться в директории
"FreeBasic/inc"

пример:
#include "windows.bi"

Вы также можете создать прототипы для ваших собственных функций.

Отметьте новую препроцессор команду "#include". После нее в кавычках следует имя файла, который вы хотите вставить в то место, где эта команда располагается. В примере выше, когда FreeBasic обрабатывает строку
#include "windows.bi"
он открывает windows.bi, находящийся в директории
"FreeBasic/inc"
и далее анализирует содержимое windows.bi
так, как будто вы "вклеили" подключаемый файл.

Теперь мы готовы создать окно с сообщением. функция, которая нам для этого необходима следующая:
function MessageBox (byval as HWND, byval lрText as LPCSTR, byval lpCaption as LPCSTR, byval uType as UINT) as integer

первый параметр, hwnd - это хэндл родительского окна. Вы можете считать хэндл числом, представляющим окно, к которому вы обращаетесь. Его значение для вас не важно. Вы
только должны знать, что оно представляет окно. Когда вы захотите сделать что-нибудь с окном, вы должны обратиться к нему, используя его хэндл.
второй параметр, lрText- это указатель на текст, который вы хотите отобразить в клиентской части окна сообщения. Указатель - это адрес чего-либо. Указатель на текстовую строку == адрес этой строки.
третий параметр, lpCaption- - это указатель на заголовок окна сообщения.
четвертый параметр, uType- устанавливает иконку, число и вид кнопок окна.

Давайте создадим msgbox.bas для отображения сообщения.

Скопировать данный код в буфер обмена

компилировать:
fbc -s gui msgbox.bas
ключь -s - указывает компилятору, какую подсистему мы используем. поскольку мы создаем win32 графическое(gui) приложение, после ключа -s, мы пишем gui.

также, этот пример можно переписать проще:

Скопировать данный код в буфер обмена

еще один вариант. предположим мне влом объявлять переменную, и расчитывать ее длину, а один и тот-же текст дублировать не охото, да и зачем бинарник засорять. можно воспользоваться препроцессор командой #define.

Скопировать данный код в буфер обмена

небойтесь так объявлять ваши неизменяемые строки фиксированной длины, команда #define, ненапихает кучу одинаковых строк в бинарник, она просто в файл кинет одну копию строки. так проще, ненадо расчитывать длину строки. можно воспользоваться типом string, там ничего расчитывать не надо, но я вам не рекомендую, слишком много перезаписей в памяти, короче за все хорошее надо платить. да и мы ведь хотим быстрые и маленькие програмки? если хотим будем писать их на более низком уровне. не пугайтесь, все в туториалах написано доступно, а излишние комментарии в исходниках, помогут вам понять магию win32.
[C] Iczelion, пер. Aquila.

 

 

Прокомментировать

Ваше имя:  

Ваш e-mail:  

Сообщение:



Введите код: 

 

 

   Спасибо можно сказать, посетив любую ссылку:

 

 

© 2010-2012

DEPOzit (Попов Денис Владимирович)

WebMoney кошелёк: WMID#302963000004

ICQ:279786014 или R549103331586   Z116647355686