Форум программистов, компьютерный форум CyberForum.ru

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
infobos
Строитель
310 / 45 / 1
Регистрация: 18.06.2010
Сообщений: 457
#1

Как переместить уже созданный объект в окне? - C++ WinAPI

07.01.2017, 17:13. Просмотров 260. Ответов 6
Метки нет (Все метки)

Например, создал я кнопку и потом ее нужно переместить. Как это сделать. Какими командами через WinAPI

Требуется постоянный консультант по WinAPI С++.
Вопросов много. Заплачу щедро!


Добавлено через 21 минуту
Единственное что в голову приходит уничтожить объект командой DestroyWindow(hwnd);
И создать по новой с другими координатами.
На сколько это производительно?

Есть еще задача изменить цвет и шрифт не прибегая к рисованию. Ведь там по умолчанию уже что-то установлено.
Как добраться до настроек по умолчанию. За эту информацию щедро заплачу!

Добавлено через 1 минуту
Как у названия кнопки изменить шрифт размер и цвета, не прибегая к рисованию?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2017, 17:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как переместить уже созданный объект в окне? (C++ WinAPI):

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? - C++
Это можно : Array a(10); a.set(0,5); Array b(a); А это нельзя : Array a(10); Array b(20); a = b;

Как запаролить уже созданный архив WinRaR? - Программы архиваторы
Или это невозможно? Я знаю как запаролить архив который собираешься создать. Но как запаролить уже готовый архив я не знаю. Или это...

Как открыть уже созданный файл Excel? - C#
Кто знает как через С# открыть уже созданный файл excel?

Как открыть уже созданный проект в ADT? - Программирование Android
После новой установки ADT хотел открыть созданный ранее проект. Однако опция Open project в пункте меню Project не работает (неактивна). В...

Как добавить новый диск в уже созданный том? - Администрирование Windows
Здравствуйте. Помогите, у меня проблема. На работе стоит видеонаблюдение к ней присоединены 32 камеры OS Windows XP на нем установлено...

Как уничтожить объект созданный CreateOleObject - Delphi
Как уничтожить объект созданный CreateOleObject

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rao
853 / 406 / 119
Регистрация: 02.04.2014
Сообщений: 1,171
07.01.2017, 17:48 #2
для двигания окон существуют функции MoveWindow и SetWindowPos

Цвет кнопки меняется сообщением WM_CTLCOLORBTN

Шрифт меняется сообщением WM_SETFONT

Пользуйся гуглом! или деньгам в кошельке тесно?
infobos
Строитель
310 / 45 / 1
Регистрация: 18.06.2010
Сообщений: 457
07.01.2017, 18:08  [ТС] #3
Цитата Сообщение от rao Посмотреть сообщение
для двигания окон существуют функции MoveWindow и SetWindowPos
Цвет кнопки меняется сообщением WM_CTLCOLORBTN
Шрифт меняется сообщением WM_SETFONT
Пользуйся гуглом! или деньгам в кошельке тесно?
Пользуюсь, видимо плохо выбираю слова.
Можно кодом отобразить, чтобы видно было куда что вводить?
Бесплатно не помогают. Видать надо платить за помощь. Также лучше купить конультацию, чем тратить дни и часы на пролет. И настроение себе портить.
Уже были мысли обратится в бюро по разработке программ за консультацией.
Может Вы возьметесь мне помогать? Вопросов много и их надо решать.

Добавлено через 13 минут
Цитата Сообщение от rao Посмотреть сообщение
для двигания окон существуют функции MoveWindow и SetWindowPos
Цвет кнопки меняется сообщением WM_CTLCOLORBTN
Шрифт меняется сообщением WM_SETFONT
Пользуйся гуглом! или деньгам в кошельке тесно?
Нужен пример кода. Мне это одна фраза ни о чем не говорит я должен видеть связи. Эту инфу, которую кидаете она понятна только для опытных программистов в winApi. А новичкам без полного кода не понять.
rao
853 / 406 / 119
Регистрация: 02.04.2014
Сообщений: 1,171
07.01.2017, 18:44 #4
А что если купить/скачать почитать книжку? Так бы в голове всё более связанно улеглось.
Я бы помог, но свободного времени совсем мало.

Пара примеров кода. Передвигание окна:
C++
1
2
3
    HWND hMainWnd = ...
    HWND hButton = ::GetDlgItem(hMainWnd, IDC_BUTTON1);
    ::MoveWindow( hButton, 10, 10, 150, 50, TRUE);
Изменение шрифта:
C++
1
2
3
4
5
6
7
8
    HWND hMainWnd = ...
    HWND hButton = ::GetDlgItem(hMainWnd, IDC_BUTTON1);
    HFONT font = CreateFont(-14, 0, 0, 0, 
        FW_BOLD, // FW_NORMAL,
        FALSE, FALSE, FALSE, DEFAULT_CHARSET,
        OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
        FF_DONTCARE|DEFAULT_PITCH, L"Arial");
    ::SendMessage(hButton, WM_SETFONT, (WPARAM)font, TRUE );
А вот со сменой цвета сложнее. В MSDN'е написано, что кнопки используют несколько цветов (для освещенной кромки, для тени и для лицевой поверхности), поэтому их нужно перерисовывать вручную. . довольно скушное занятие.
Если нужен красивый интерфейс, то лучше с WinAPI перейти на что-нибудь более удобное: в дотнетовском WPF с элементами можно вытворять всё что душе угодно.
infobos
Строитель
310 / 45 / 1
Регистрация: 18.06.2010
Сообщений: 457
08.01.2017, 08:09  [ТС] #5
Цитата Сообщение от rao Посмотреть сообщение
А что если купить/скачать почитать книжку?
По накачал книг всего 2-3 штуки + статьи.
Книги плохие для новичков.
MSDN английский сайт плохо разбираюсь.
Много бесполезного чтения получается.
Быстрее проконсультироваться и посмотреть код.
А то что они пишут не клеется с пониманием. Больше на готовых кодах понимаешь.

Добавлено через 3 минуты
Спасибо! Завтра протестирую ваши коды. Очень помогли.
С меня оплата.
Киньте кошелек в личку и свой Email.
Буду признателен за продолжения решения моих вопросов.
Уже завтра. Ушел спать!

Добавлено через 11 часов 39 минут
Все таки этого кода не достаточно. Добавьте полный код. Потому что у меняя не работает. Что нужно еще добавить. Для перерисовки экрана?

Добавлено через 16 минут
С передвижение разобрался! Заработало!

Добавлено через 11 минут
Цитата Сообщение от rao Посмотреть сообщение
Если нужен красивый интерфейс, то лучше с WinAPI перейти на что-нибудь более удобное: в дотнетовском WPF с элементами можно вытворять всё что душе угодно.
Дело в том, что мне нужна графика directx. А в WPF на directx не выйдешь.
Ваши коды заработали. Вы заработали с меня денюжку. Закину Вам 5 тыс. руб. Дайте кошелек Webmoney или яндекс деньги. Напишите в личку.
Вы случаем не знаете может в конструкторах можно получить WinApi Код? Это бы сильно облегчила задачу.

Добавлено через 38 минут
По теме вопрос решен!

Добавлено через 32 минуты
Я так понял метод GetDlgItem находит дескриптор кнопки по идентификатору для обработчика события. И присваивает дескриптор новой переменной?
Что-то я не догнал этот метод.
SEGNET
64 / 64 / 9
Регистрация: 28.12.2012
Сообщений: 492
08.01.2017, 08:18 #6
Петцольд Ч. Программирование для Windows 95 - на русском и с примерами. Необязательно ее читать с начала. Можно по содержанию пробежаться. Если у вас не стоит цель обучится Winapi, тогда действительно не имеет смысла тратить столько времени.
infobos
Строитель
310 / 45 / 1
Регистрация: 18.06.2010
Сообщений: 457
08.01.2017, 08:26  [ТС] #7
Цитата Сообщение от SEGNET Посмотреть сообщение
Петцольд Ч. Программирование для Windows 95 - на русском и с примерами. Необязательно ее читать с начала. Можно по содержанию пробежаться. Если у вас не стоит цель обучится Winapi, тогда действительно не имеет смысла тратить столько времени.
Есть такая книга. Только вот по названию тем не можешь найти то, что тебе нужно. Когда узнал про коды. Тогда просто в поиске находишь эти коды и становится понятно. Там нет тем про позиционирование объектов. Альтернативной настройки шрифтов, цветов и размеров. Как на примерах вставлять кнопки. Может быть эта книга становится понятна только опытным специалистам в виде справочника. А новичкам приходится даже над книгами потеть. В общем книги это не для новичков. Нужны просто примеры с кодами. Но чтоб примеры были жизненные, а не для спецов в виде справочника.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2017, 08:26
Привет! Вот еще темы с ответами:

Как возвратить указатель на объект, созданный в методе? - C++
A* B::ReturnPtrA(){ A a; a.Method1(a.Method2()); //... return &a; } Говорит, что нельзя возвращать указатель...

Как добавить событие на программно созданный объект - Visual Basic
Есть такой код: For i=1 to 10 Set labelx = Me.Controls.Add('VB.Label', 'label' & i, Me) next iКак на такой объект добавить событие...

Как правильно вернуть объект созданный в функции? - C++
Допустим у нас есть функция, которая динамически создает объект и должна его вернуть. К примеру, возьмем динамическое создание массива. ...

Как программно связать созданный объект ADO с DataGrid? - Visual Basic
Dim d As ADODB.Connection Dim r As ADODB.Recordset Set d = New ADODB.Connection d.ConnectionString = 'Microsoft.Jet.OLEDB.3.51;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.01.2017, 08:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru