Страница 1 из 2

Visaual studio и диалоговые окна

Добавлено: 16 фев 2017, 00:37
Skwoogey
Я пытался что-то диалоговое сделать с переменным успехом. У меня есть несколько вопросов.

1) в callback функции окна, как я понял, при UINT переменной == WM_COMMAND, низкое слово wparam всегда название которое мы дали элементу. Есть ли таблица, в которой можно узнать об остальных параметрах элемента, и в какой из переменных они присылаются?
2) Я пытался создать группу элементов и вроде как все, что надо сделал (последовательность табуляции и первый элемент с группой) но мастер добавления переменной не открывается. Что я делаю не так? Или как это сделать ручками? Или может есть еще другой способ?
3) Есть ли что-нибудь в STL удобнее и понятнее для диалоговых окон чем синтаксис винды с его корявыми переменными? Или может есть туториал нормальный для относительных чайников.
4) Как менять строки у элементов, например у радио кнопки?
5) Есть ли в VS инструменты для выравнивания элементов окна (кроме выравнивания по левой/верхней границе), или надо лезть в файл и манипулировать цифорки?

не вижу смысла здесь кидать код, так как вопросы общие.

Буду рад любой помощи.

Re: Visaual studio и диалоговые окна

Добавлено: 16 фев 2017, 01:36
Romeo
Видно, что очень плохо ориентируешься в области, из-за чего порой не понятно даже, о чём спрашиваешь. Попробую ответить на то, что понял.

1) WM_COMMAND приходит в том случае, если элемент управления посылает команду оконной процедуре диалогового окна. Младшее слово wParam содержит идентификатор контрола, который сгенерировал сообщение, причём под контролом чаще всего подразумевается просто кнопка либо пункт меню. Любые свойства контрола ты можешь получить через его HWND, который можно получить с помощью вызова GetDlgItem.

2) Что подразумевается под мастером добавления переменной? Ты ожидаешь увидеть что-то наподобие MFC-шного мастера, который был в 6-ой студии и который связывал контрол с переменной соответствующего типа, а так же генерировал код класса для диалога? Насколько я знаю, MFC уже давно не поддерживается студией, так что можешь даже не пытаться добиться увидеть этот мастер. Такое ощущение что ты 15 лет в спячке был :)

3) Не путай тёплое с мягким. STL - это библиотека стандартных классов независимых от платформы, а WinAPI - это платформозависимый интерфейс. Естественно, они знать друг о друге не знают и знать не должны. В природе есть некоторые объектно-ориентированные библиотеки, оборачивающие WinAPI, например возможна связка библиотек ATL+WTL для вполне удобной работы. Либо ещё один вариант - это QT. Эта GUI библиотека вообще кросплатформенная (на каждой платформе использует своё API для прорисовки примитивов интерфейса).

4) Текст любого контрола можно поменять с помощью SetWindowText (если у тебя есть его HWND), либо с помощью SetDlgItemText (если у тебя есть только ресурсный идентификатор).

5) Специальных инструментов нет. Да, наиболее точно и без нервных срывов, действительно можно отредактировать открыв ресурсный файл, и поправив координаты.

Re: Visaual studio и диалоговые окна

Добавлено: 16 фев 2017, 03:29
Skwoogey
Это первый раз, когда я пытался что-то сделать диалоговое и до этого нормально я не работал с WinAPI, поэтому я действительно очень плохо ориентируюсь в области.

У меня ощущение, что несколько способов все это организовать. Вот я нашел такой метод.

объединить в группу я пытался по этой статье. В ней говорится о мастере добавления переменных, который у меня не появляется.

Есть ли какой-то сокральный смысл у виндосовских аналогичных переменных, ведь по сути LSPWSTR то же самое, что и строка char. И зачем?

еще такой вопрос в STL есть класс потоков. В винде потоки настраиваются через WinAPI (через линусковые команды он у меня не хотел работать), так ведь? и получается, что STL заменил непонятный виндовый си или как это работает?

Re: Visaual studio и диалоговые окна

Добавлено: 16 фев 2017, 08:57
Romeo
Всё верно. Это статья по MFC. Всё-таки, видимо, пытаются ещё поддерживать. Чтобы появился пункт меню Add Variable, нужно было создать проект MFC, а не просто Win32 API Aplication. В этом проблема.

Смысл переменных, добавленных через визард в том, что студия тут же генерирует код синхронизации такой переменной с элементом управления через DDX. Там вообще очень много кода генерируется, и весь этот код использует библиотеку MFC.

По потокам. Само понятие поток - кроссплатформенное. Поэтому классы для работы с потоками есть в STL, но на каждой платформе они реализованы через своё API операционной системы. Однако понятие пользовательского интерфейса не является кроссплатформенным (потому как есть операционные системы вооще без GUI), так что оно не может быть частью языка.

Re: Visaual studio и диалоговые окна

Добавлено: 27 фев 2017, 13:47
WinMain
MFC в Visual Studio 2015 поддерживается опционально, т.е. в виде дополнительного расширения, которое при необходимости легко устанавливается в основной пакет Visual C++.

Re: Visaual studio и диалоговые окна

Добавлено: 27 фев 2017, 21:32
Skwoogey
Я сделал что-то работающее. Это что-то наподобие анкеты. Хотелось бы услышать насколько у меня кривой код и как надо по феншую. Буду весьма признателен.

Еще пара вопросов

Я хотел добавить пароль, но оставлять его лежать в текстовом файле так себе идея. Можно ли спрятать его в файл программы (Пароль можно менять)? Методы кодировки мне не нужны. Нужна защита от рядового юзера.

Я не нашел как делать диалоги дочерными другим диалогам. Не подскажите как?

Re: Visaual studio и диалоговые окна

Добавлено: 28 фев 2017, 01:28
Romeo
Если пароль может меняться и должен сохраняться между запусками программы, то вкомпилировать его в exe не получится. Нужно хранить отдельно от бинарника. Это может быть либо бинарный файл, куда можно записать заXORеный пароль, либо реестр Windows. Есть и более экзотические варианты, например локальная база данных (скажем SQLite). Частенько в такие базы сохраняют настройки программы, которые должны сохраняться между запусками.

Дочерний диалог сделать очень просто. Достаточно указать дискриптор родительского окна в качестве третьего параметра функции DialogBox.

Re: Visaual studio и диалоговые окна

Добавлено: 28 фев 2017, 01:56
Skwoogey
А при наследовании классов DialaogEx и CWinApp? В них понятие хандлера окна немного пропадает. Или вы не работали с MFC? Если нет, то можно узнать почему? ИМО они понятнее, чем все делать "вручную"

Re: Visaual studio и диалоговые окна

Добавлено: 28 фев 2017, 02:31
Romeo
Работал я с MFC. Это просто устаревшая библиотека. Microsoft официально заявили, что они её больше не поддерживают.

Если используешь MFC, то передай в конструктор CDialog вторым параметром указатель на родительское окно.

Re: Visaual studio и диалоговые окна

Добавлено: 28 фев 2017, 03:02
Skwoogey
А что есть современная библиотека? какие альтернативы есть вообще? Не уж то чистый WinAPI самый оптимальный выбор?