Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какое мне нужно окошко? 
V
    Опции темы
Riddik
Дата 21.9.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Подскажите, что мне нужно, чтобы вывести небольшую форму  с прогресс баром и парой кнопок на главное окно?
PM MAIL   Вверх
586
Дата 21.9.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Нужно создать диалоговое окно?

Это сообщение отредактировал(а) 586 - 21.9.2009, 16:58
PM   Вверх
Riddik
Дата 21.9.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Лучше без, а то опять вся затянется на неопределенный срок.

Что-нибудь вроде маленькой формы, WS_CHILD, чтобы у неё был свой HWND. 

Это сообщение отредактировал(а) Riddik - 21.9.2009, 17:05
PM MAIL   Вверх
586
Дата 21.9.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



В WinAPI нет понятия "форма". Есть понятие "окно". И есть понятие "диалог". Диалог - это окно, созданное по шаблону диалога.

Цитата(Riddik @  21.9.2009,  18:03 Найти цитируемый пост)
Что-нибудь вроде маленькой формы, WS_CHILD, чтобы у неё был свой HWND. 

Можно создать диалог со стилем WS_CHILD.
PM   Вверх
Riddik
Дата 21.9.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Хорошо, с каким шаблоном мне вызвать диалог без заголовоков и чтобы на него положить ProgressBar?


Это сообщение отредактировал(а) Riddik - 21.9.2009, 17:47
PM MAIL   Вверх
586
Дата 21.9.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



1. Создаёшь в редакторе ресурсов диалог.
2. Далее нужно изменить свойства диалога. В VS2005 это свойство называется "Style". По умолчанию там "Popup" стоит. Если указать "Child", то диалог будет создаваться со стилем WS_CHILD.
Свойство "Border" установи в "None".
Свойство "Visible" установи в "True".
3. Кидаешь на диалог нужные контролы (Progress Bar и т.д.)
4. В коде реализуешь функцию ChildDlgWndProc
Код
INT_PTR CALLBACK ChildDlgWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    return FALSE;
}

5. В коде прописываешь создание диалога:
Код
HWND hWndChildDlg = CreateDialogParam(
    GetModuleHandle(0),
    MAKEINTRESOURCE(IDC_DIALOG1),    // id диалога
    hWndMain,                  // родительское окно
    ChildDlgWndProc,
    0
);

PM   Вверх
Riddik
Дата 21.9.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Цитата(586 @  21.9.2009,  18:16 Найти цитируемый пост)
1. Создаёшь в редакторе ресурсов диалог.


Спасибо за подробную инструкцию, но у меня 2008 Express Edition, в ней нет редактора ресурсов.
PM MAIL   Вверх
586
Дата 21.9.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Riddik @  21.9.2009,  19:20 Найти цитируемый пост)
Цитата(586 @  21.9.2009,  19:16 Найти цитируемый пост)
1. Создаёшь в редакторе ресурсов диалог.

Спасибо за подробную инструкцию, но у меня 2008 Express Edition, в ней нет редактора ресурсов. 

Тогда, можно заполнить .rc-файл вручную. 
Ещё, есть сторонние программы редакторы ресурсов, которые позволяют редактировать .rc и .res файлы.

Если не хочешь работать с ресурсами - используй CreateWindowEx.
PM   Вверх
Riddik
Дата 21.9.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Спасибо
PM MAIL   Вверх
Riddik
Дата 21.9.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Можно пояснить:

создал дочернее окно
Код

hwndSW=CreateWindowEx(NULL, 
                            "static", 
                            "", 
                            WS_CHILD | WS_VISIBLE,
                            width, 
                            height,
                            300,
                            100,
                            hwndMW,
                            NULL,
                            hinstance,
                            NULL);    


На него кнопку:
Код

CreateWindowEx(NULL, 
                    "Button", 
                    "Ïàóçà", 
                    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                    25, 
                    60,
                    60,
                    25,
                    hwndSW,
                    (HMENU)101,
                    hinstance,
                    NULL);    


1. На главном окне есть ещё контрол ListView.
Может поэтому- не знаю - кнопка не нажимается и даже не подсвечивается под мышкой.

2. Где мне описать обработку нажатия этой кнопки?

Как правильно все сделать?
PM MAIL   Вверх
586
Дата 21.9.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Riddik @  21.9.2009,  21:18 Найти цитируемый пост)
hwndSW=CreateWindowEx(NULL, 
                            "static", 
                            "", 
                            WS_CHILD | WS_VISIBLE,
                            width,    // X
                            height,   // Y
                            300,      // nWidth
                            100,      // nHeight
                            hwndMW,
                            NULL,
                            hinstance,
                            NULL);    

Странное использование переменных width и height.

Цитата(Riddik @  21.9.2009,  21:18 Найти цитируемый пост)
2. Где мне описать обработку нажатия этой кнопки?

Придётся делать субклассинг static'а. Смотри в гугле "SetWindowLongPtr GWLP_WNDPROC".
PM   Вверх
Riddik
Дата 21.9.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



А что можно сказать по 
1. На главном окне есть ещё контрол ListView.
Может поэтому- не знаю - кнопка не нажимается и даже не подсвечивается под мышкой.
PM MAIL   Вверх
Alca
Дата 21.9.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Цитата

Тогда, можно заполнить .rc-файл вручную.

google+ResEdit


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 21.9.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Riddik @  22.9.2009,  00:00 Найти цитируемый пост)
1. На главном окне есть ещё контрол ListView.
Может поэтому- не знаю - кнопка не нажимается и даже не подсвечивается под мышкой. 

Возможно. У меня всё работает. Попробуй Z-order static'а изменить:
Код
SetWindowPos(hwndSW, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

PM   Вверх
Riddik
Дата 22.9.2009, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Цитата(Alca @  21.9.2009,  23:29 Найти цитируемый пост)
google+ResEdit 

Благодарю.


Цитата(586 @  21.9.2009,  23:52 Найти цитируемый пост)
 Попробуй Z-order static'а изменить:


Кнопка ожила, но окна теперь не видно.

Ладно, помучаюсь ещё денёк с диалогами. Спасибо за терпение и помощь.

Добавлено через 10 минут и 51 секунду
Цитата(Alca @  21.9.2009,  23:29 Найти цитируемый пост)
google+ResEdit 

Заценил. 
Прикольная штука, почти как на Делфи))
Ещё раз спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.