Здравствуйте, гость ( Вход | Регистрация )



Гостевой доступ к форуму из Москвы: Телефоны: +7(495)7859696,7376201,7376233,7868796,7390241 Login: demo Password: demo
 
ОтветитьСоздать новую тему
> C++, Как черз WINAPI сделать дополнительные контролы?
linden
сообщение Apr 22 2006, 23:21
Сообщение #1


Постоянный пользователь
***

Группа: Пользователи
Сообщений: 126
Регистрация: 23-June 05
Из: Москва
Пользователь №: 13
Заходит на форум с полного инета.



Каким образом сделать через WINAPI дополнительные контролы (прогрессбар и т.д.)? Если я не ошибаюсь они запрятаны в сomctl32, как их создавать то? =) А то стандартных(кнопки, статический орган управления, полоса прокрутки, текстбокс, листбокс, комбобокс), иногда нехватает smile.gif


--------------------
Изображение
- Dead angel in a snow... It's beautiful -
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Сукин сын
сообщение Apr 23 2006, 20:31
Сообщение #2


Пользователь
**

Группа: Новички
Сообщений: 105
Регистрация: 25-January 06
Пользователь №: 272
Заходит на форум с гостевика.



Ты сам понял че сказал? :D а что такое WINAPI? :D


--------------------
Гав-гав!
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
vadim
сообщение Apr 24 2006, 14:59
Сообщение #3


Постоянный пользователь
****

Группа: Banned
Сообщений: 295
Регистрация: 23-March 06
Пользователь №: 337
Заходит на форум с гостевика.



ой мля..... у тебя C++ Builder........ из C++ язнаю только Borland C++ ........ так что извини немогу помоч sad.gif


--------------------
Изображение
Зайди непожелеешь.........[/url]
Скажи, зачем тебе жена?
Завел бы лучше, милый, кошку.
Ведь кошка - также, как Она
Мила, нежна - все понемножку.

Жена порой "мышей не ловит"
А кошка ловит и с успехом.
онечно, кошка не готовит,
Зато довольна старым мехом.

Пусть не умеет говорить,
Зато отсутствуют запросы..
Опять же, можно отловить,
И наказать, потыкав носом.

ороче, кошка это круче.
Но уверяю вас, друзья
Что кошку трахать несподручно
И целовать ее нельзя.
По следам кровавых мегачоперов.....................
Изображение
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Noddy
сообщение Apr 24 2006, 15:01
Сообщение #4


Новичок
*

Группа: Новички
Сообщений: 42
Регистрация: 17-April 06
Пользователь №: 358
Заходит на форум с полного инета.



QUOTE(vadim @ Apr 24 2006, 16:59) *

из C++ язнаю только Borland C++


поржал xaxa.gif


--------------------
Read only.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
vadim
сообщение Apr 24 2006, 15:05
Сообщение #5


Постоянный пользователь
****

Группа: Banned
Сообщений: 295
Регистрация: 23-March 06
Пользователь №: 337
Заходит на форум с гостевика.



шо смешного ??


--------------------
Изображение
Зайди непожелеешь.........[/url]
Скажи, зачем тебе жена?
Завел бы лучше, милый, кошку.
Ведь кошка - также, как Она
Мила, нежна - все понемножку.

Жена порой "мышей не ловит"
А кошка ловит и с успехом.
онечно, кошка не готовит,
Зато довольна старым мехом.

Пусть не умеет говорить,
Зато отсутствуют запросы..
Опять же, можно отловить,
И наказать, потыкав носом.

ороче, кошка это круче.
Но уверяю вас, друзья
Что кошку трахать несподручно
И целовать ее нельзя.
По следам кровавых мегачоперов.....................
Изображение
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
linden
сообщение Apr 24 2006, 15:36
Сообщение #6


Постоянный пользователь
***

Группа: Пользователи
Сообщений: 126
Регистрация: 23-June 05
Из: Москва
Пользователь №: 13
Заходит на форум с полного инета.



QUOTE(vadim @ Apr 24 2006, 19:05) *

шо смешного ??

Си стандартен =) проще говоря, если я на MS Visual C++ напишу прогу, она будет у тебя работать на Borland С++ smile.gif


--------------------
Изображение
- Dead angel in a snow... It's beautiful -
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
vadim
сообщение Apr 24 2006, 17:00
Сообщение #7


Постоянный пользователь
****

Группа: Banned
Сообщений: 295
Регистрация: 23-March 06
Пользователь №: 337
Заходит на форум с гостевика.



ну это я знаю.... просто borland С++ он на вид как turbo Pascal и там некаких компонентов нет(такие как Delphi или C++Builder они к стате схожи) мне просто неприходилось программировать в Buildere и поэтому тебе помоч немогу...........


--------------------
Изображение
Зайди непожелеешь.........[/url]
Скажи, зачем тебе жена?
Завел бы лучше, милый, кошку.
Ведь кошка - также, как Она
Мила, нежна - все понемножку.

Жена порой "мышей не ловит"
А кошка ловит и с успехом.
онечно, кошка не готовит,
Зато довольна старым мехом.

Пусть не умеет говорить,
Зато отсутствуют запросы..
Опять же, можно отловить,
И наказать, потыкав носом.

ороче, кошка это круче.
Но уверяю вас, друзья
Что кошку трахать несподручно
И целовать ее нельзя.
По следам кровавых мегачоперов.....................
Изображение
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Tassadar
сообщение Apr 25 2006, 18:57
Сообщение #8


Гиперактивный пользователь
Group Icon

Группа: Advanced
Сообщений: 2 524
Регистрация: 24-August 05
Из: Белые столбы
Пользователь №: 91
Заходит на форум с гостевика или полного инета.



QUOTE
Си стандартен =) проще говоря, если я на MS Visual C++ напишу прогу, она будет у тебя работать на Borland С++
да тока ты не учел, что библиотеки у разных компиляторов- разные... и ОЧЕНЬ не факт что она у него будет работать....ну ессна если говорить о прогах использующих больше чем stdio.h и пр.


--------------------
ОуКС
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
linden
сообщение Apr 25 2006, 19:22
Сообщение #9


Постоянный пользователь
***

Группа: Пользователи
Сообщений: 126
Регистрация: 23-June 05
Из: Москва
Пользователь №: 13
Заходит на форум с полного инета.



QUOTE(Tassadar @ Apr 25 2006, 22:57) *

да тока ты не учел, что библиотеки у разных компиляторов- разные... и ОЧЕНЬ не факт что она у него будет работать....ну ессна если говорить о прогах использующих больше чем stdio.h и пр.

Ну это все проверять надо =)
Короче возвращаемся к теме! Создание контролов через WINAPI =)


--------------------
Изображение
- Dead angel in a snow... It's beautiful -
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
proton
сообщение Apr 25 2006, 19:46
Сообщение #10


Постоянный пользователь
Group Icon

Группа: Advanced
Сообщений: 537
Регистрация: 30-September 05
Пользователь №: 125
Заходит на форум с полного инета.



Borland C++ рулит !
ЗЫ: зде msvcr80d.dll достать ?


--------------------
Изображение
proT0N, ты добрый и днев у тебя душевно-домашне-концептуальный... ©FallaxDaemon, 2006
Если кто назовёт меня пиарщиком, то протон в 999 раз более лучший пиарщик, да и вообще очень редко встретишь таких позитивных людей. Человек, который реально может нагенерировать 1 млн. идей в секунду и не поленится их воплотить. Знаю его в оффлайне более года. Что ещё сказать, EX-пользователь OPENWWW, админстратор Альфы в июне-сентябре 2005 года, VIP пользователь K2, ReliZ, да и вообще классный чел. ©ALEXRUS, 2006
Вроде ты неглупый, но баянишь много всякой общеинетской х*йни... Смотри еще больше не запопти, а то бить начнут. Ибо Зло всегда должно быть наказанным. ©chop is dish, 2006
proT0N, я почитал твои посты. ты оказываетца клёвый пацан ;) ©Нагатинчик, 2006
ПроТон, отдельный минус )))))))) сначала ломался дескать не пью, дескать так просто тут вешалку подержать, а потом бокалами гад пить начал ))))))))))))))), весь запас сожрал, зелень прожорливая... ©deyka, 2007
До чего ты талантливый, я поражаюсь =) ©fiancee, 2007
Ты страшно поумнел в последнее время... это плохо :) ©Dante, 2007
Блин хотел бы я сечь во всем этом как ты... ©nikolayKo, 2008
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Tassadar
сообщение Apr 27 2006, 19:56
Сообщение #11


Гиперактивный пользователь
Group Icon

Группа: Advanced
Сообщений: 2 524
Регистрация: 24-August 05
Из: Белые столбы
Пользователь №: 91
Заходит на форум с гостевика или полного инета.



QUOTE
Ну это все проверять надо =)
Короче возвращаемся к теме! Создание контролов через WINAPI =)
странный ты... я тока СИ учить начинаю, про WINAPI ессна ещё не думаю, но основы хоть знаю... а ты наоборот...хммммммм


--------------------
ОуКС
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
linden
сообщение Apr 28 2006, 13:36
Сообщение #12


Постоянный пользователь
***

Группа: Пользователи
Сообщений: 126
Регистрация: 23-June 05
Из: Москва
Пользователь №: 13
Заходит на форум с полного инета.



QUOTE(Tassadar @ Apr 27 2006, 23:56) *

странный ты... я тока СИ учить начинаю, про WINAPI ессна ещё не думаю, но основы хоть знаю... а ты наоборот...хммммммм

ну и что? huh.gif я же не начал свою ось писать laugh.gif
в VB я тоже с WINAPI начинал =)


--------------------
Изображение
- Dead angel in a snow... It's beautiful -
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
drusha
сообщение Jul 12 2006, 23:05
Сообщение #13


Постоянный пользователь
*****

Группа: Новички
Сообщений: 520
Регистрация: 16-June 06
Пользователь №: 431
Заходит на форум с гостевика.



А зачем на WINAPI?
Можно, конечно, извратиться...
WINAPI - это просто куча функций, даже без намёка на ООП (эти функции едины для всех языков, они паскале-подобны (параметры размещаются с стеке задом наперёд, количество параметров фиксировано, каждая функция сама чистит за собой стек от параметров), но чисто паскалевские извращения не используются (локальные функции, передача массивов по значению, и возврат массивов и структур по значению). К WINAPI могут обращаться программы, которые написаны на языках, не поддерживающих ООП (классы, полиморфизм, наследование, инкапсуляцию, не говоря уже о компонентах и свойствах).

По идее, первым делом для каждого окна, которое у Вас есть, надо зарегистрировать "оконный класс" - это такая структура (не класс, а просто структура), где описываются основные параметры окна. Там окромя всего прочего указывается адрес своей "оконной процедуры" - то есть, CALLBACK-функции, которая вызывается автоматически. Все события Windows адресуются какому-то окну, которое должно быть зарегистрировано. Потом его надо будет разрегистрировать. По идее, всё это относится к окну (экранной форме), а не отдельным элементам управления. Хотя, по идее, интерфейс может быть многооконным, и для регистрируемого окна можно указать его "родительское окно" (хендл или NULL, если оно главное). При регистрации окна (оконного класса) возвращается хендл, который нужно помнить, а потом - закрыть (разрегистрировать окно при его закрытии).

По идее, должен быть сделан главный цикл программы, в котором вызывается APIшная функция PeekMessage или GetMessage. Там ловятся сообщения Windows - то есть, по указателю заполняется структурка MSG (GetMessage ждёт сообщение, а PeekMessage всегда возвращает управление сразу, и отдаёт признак, есть ли сообщение, а если его нет, то можно выполнить свой холостой цикл). Сообщение надо обработать (для этого нужен большой switch (с С/С++) или CASE (в Паскале), либо с помошью макросов строится таблица диспетчеризации обработки...). У каждого сообщения (это такая структурка данных) есть код и два параметра (они используются и ммеют смысл в зависимомти от кода).

Некоторые сообщения требуют трансляции Для них выполняется стандартная функция TranslateMessage. Так из WM_MouseUp и WM_MouseDown получается WM_MouseClick, WM_MouseDblClick... А из WM_KeyDown и WM_KeyUp получается WM_KeyPress... Но если ловить и по-особому обрабатывать некоторые нажатия, не вызывая для них TranslateMessage, то они не будут порождать вторичные сообщения вроде WM_KeyPress. Так можно делать "горячие клавиши" и т.п.

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

Если Вы не пользуетесь библиотеками классами MFC или компонентов VCL (это уже не WINAPI, а библиотеки, поставляемые с MS Developer Studio (Visual C++, VB...) или Borland C++ Builder / Delphi), то можете сами для себя придумать понятие "элемент управления". Обычно это объект (т.е. экземпляр некого класса), который основан на классе "Прямоугольник" (TRect), то есть, унаследован от него. Прямоугольник ловит события от мыши. Как - это ваше дело. Обычно все такие объекты (элементы управления) заносятся в единый список (как вы его реализуете - ваше дело, но в MFC и VCL они реализованы по-своему), который относится к "окну" (тому классу, который реализует окно или экранную форму). С помошью этого списка определяется, на какой объект (элемент управления в окне) попало данное мышиное событие (хоть бы и последовательным перебором, с учётом приоритета или порядка расположения в списке). Для клавишных событий некоторому объекту (элементу управления) присваивается "фокус ввода". В собственной реализации это может быть просто указатель на объект (элемент управления), который сейчас считается "текущий". Если вы сами обрабатываете сообщения, то должны как-то определять, к какому объекту (элементу управления) они относятся, и относятся ли вообще.

Хоть это и не обязательно, но очень удобно (и так сделано в VCL) у каждого элемента управления (который есть объект некого класса) есть множество указателей на функции - "обработчиков событий". Если там для некого типа события сидит NULL (пустой указатель), то он не вызывается, иначе считается указателем на функцию (метод), который вызывается. Методы класса описываются как функции с модификатором __closure (в отличие от "обычной" функции метод класса имеет невидимый параметр this, что должно быть учтено при передаче параметров, когда он вызывается по указателю). У каждого "события" (которое может быть или не быть связано с сообщением Windows некоторого типа) могут быть свои параметры. Вызовы таких обработчиков (по указателям) реализуются в своём же главном цикле, где ловятся и обрабатываются сообщения от Windows (например, вызывается PeekMessage, а если сообщения нет, то это считается "событием" IdleAction, для которого тоже есть свой обработчик). То есть, это всего лишь такой приём организации программы, такой подход, который можно рекомендовать, и который используется, например, в VCL. Но если Вы пишите сами только на основе API, то никто его за Вас делать не будет, и Вы вольны поступать как-то по-другому.

Так что, не надо путать "сообщения" Windows (это базовое понятие) и "события" в собственных понятиях для внутреннего упртребления (иногда связанных с ситуациями, возникающими при обработке сообщений). Управление событиями, как и ООП, классы, компоненты, СОМ, ActiveX и т.п. - это всё относится к конкретной реализации, иногда имеющей языковую поддержку (C++, Object Pascal), иногда - библиотечную (MFC, VCL), либо собственную реализацию. Это - стиль, парадигма, привычка, дело вкуса, короче говоря. Но к Windows API отношения не имеет. API не идёт дальше понятия "окно" ("оконный класс" - но это не класс в понятиях ООП) и "сообщение" (Windows Message). В каком стиле вы собираетесь их обрабатывать - Ваше личное дело. Так или иначе, весь интерфейс основан на сообщениях: приложение (окно) их получает и обрабатывает. Иногда оно порождает другие события для себя или других окон.

Самое страшное - это событие WM_Paint для окна. Получив его, окно должно себя полностью перерисовать. Для этого надо сначала получить контекст графического устройства (дисплея), открыть его, и тогда там можно будет выполнять "рисовальные" функции - выводить буковки, рисовать точки, линии, закрашивать области, пользоваться кистями, перьями... После чего нужно закрыть (освободить) контекст графического устройства. Пока контекст графического устройства не закрыт, другие окна не могут получить события типа WM_Paint. Понятие контекста графического устройства - это одно из основных у Windows (GDI). Открывая его, программа указывает хендл окна, который получен при регистрации оконного класса, а Windows знает его текущее состояние (нормально, свёрнуто, развёрнуто, скрыто), координаты углов, какими другими окнами оно перекрыто (самому об этом заботиться не надо, т.к. Windows будет реально отображать только те участки окна, которые должны быть в данный момент видимы).

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

К чему я это всё? Да к тому, что работать с оконным интерфейсом через Windows API - это такая мутотень, что и в страшном сне не приснится. Но всё это уже реализовано в библиотеках вроде MFC, VCL и иже с ними. Там определены классы, компоненты... Вот и юзайте их!


--------------------
Теперь всё, я сюда больше не приду. Никогда.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение

ОтветитьСоздать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия Сейчас: 27th November 2020 - 01:49
 
     
Rambler's Top100 службы мониторинга серверов
Gentoo Powered Lighttpd Powered