На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Создание приложения Win32API с использованием диалогов
    Поле прочтения темы GUI для консольной программы на C++ (Visual Studio 2010) решил попробовать создать приложение с помощью конструктора диалогов Visual C++ 2010:
    ExpandedWrap disabled
      #include <string>
      #include <iostream>
      #include <windows.h>
      #include "resource.h"
      #include <stdio.h>
       
      BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
      {
        switch (msg)
        {
          case WM_INITDIALOG:
          {
            return FALSE;
          }
          case WM_COMMAND:
          {
            switch (LOWORD(wParam))
            {
              case ID_OK:
                EndDialog(hwnd,1);
                return TRUE;
              case ID_CANCEL:
                EndDialog(hwnd,0);
                return TRUE;
            }
          }
          case WM_CLOSE:
          {
            EndDialog(hwnd,0);
            return FALSE;
          }
        }
        return FALSE;
      }
    Возникли следующие вопросы:
    1. Как сделать так, чтобы диалог:
    - размещался в центре экрана;
    - разворачивался на весь экран, при этом кнопки были бы в правом нижнем углу
    2. В большинстве книг по WinAPI описано создание класса окна в памяти с последующим созданием экземпляра класса, а не с помощью конструктора диалогов. Посоветуйте, пожалуйста, книгу или статьи с подробным описанием возможности создания программ с использованием конструктора диалогов (вызов из одного диалога другого, настройка вида диалогов в процессе работы программы, примеры диалогов с разными контролами, создание событий для контролов и др.).
    Проект прикрепил.
    Прикреплённый файлПрикреплённый файлWin32dialog.zip (3,63 Кбайт, скачиваний: 140)
    Сообщение отредактировано: tumanovalex -
      Цитата tumanovalex @
      - размещался в центре экрана

      DS_CENTER

      Цитата tumanovalex @
      - разворачивался на весь экран, при этом кнопки были бы в правом нижнем углу

      Ручками, в обработчиках POSCHANGE/SIZE.
        У меня основная функция имеет вид (забыл ее указать в первом сообщении:
        ExpandedWrap disabled
          int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
          {
            int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc);
            if (ret == 0)
            {
              MessageBox(NULL, "Нажата кнопка \"Отмена\"","Информация о нажатой кнопке", MB_OK|MB_ICONINFORMATION);
            }
            else
            {
              MessageBox(NULL,  "Нажата кнопка \"ОК\"","Информация о нажатой кнопке", MB_OK|MB_ICONINFORMATION);
            }
            return ret;
          }
        Как я понял, функция DialogBox регистрирует колбек функцию и присваивает уникальный номер дескриптору окна, созданного из ресурса (шаблона диалога). А как указать, что это окно должно размещаться по центру? Когда класс окна создается в памяти, это указывается в параметрах окна, а когда окно создается с использованием ресурса?
          Цитата tumanovalex @
          А как указать, что это окно должно размещаться по центру?

          В редакторе ресурсов, в режиме конструктора диалогов -- свойство "Position -> Center"
            Спасибо, получилось. Теперь буду разбираться с POSCHANGE/SIZE.
              У меня диалоговое окно будет содержать много контролов, поэтому хотелось бы сразу развернуть его на весь экран, а потом уже подбирать расположение контролов на развернутом экране. Подскажите, пожалуйста, как диалог из ресурса сразу развернуть на весь экран.
                Цитата tumanovalex @
                У меня диалоговое окно будет содержать много контролов, поэтому хотелось бы сразу развернуть его на весь экран, а потом уже подбирать расположение контролов на развернутом экране. Подскажите, пожалуйста, как диалог из ресурса сразу развернуть на весь экран.

                извращенец :crazy:
                MFC в зубы и с песней! :D
                  Да не хочу я MFC!!! Хочу все контролировать и попытаться разобраться с Windows API без всяких надстроек. Я не профессиональный программист, сроков создания программы у меня нет, просто очень люблю программирование, Windows и Visual Studio.
                    Цитата tumanovalex @
                    Да не хочу я MFC!!! Хочу все контролировать и попытаться разобраться с Windows API без всяких надстроек. Я не профессиональный программист, сроков создания программы у меня нет, просто очень люблю программирование, Windows и Visual Studio.

                    c MFC проще, без нее тебя ждет долгий и тернистый путь с Win32 API к тому же еще и на Си :D
                    Флаг в руки, но не с песней :D
                      Так как все-таки развернуть диалог из ресурсов
                      ExpandedWrap disabled
                        int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc);
                      на весь экран? Неужели никто не знает?
                        M
                        Cfon, за дальнейший оффтоп в разделе выпишу банку и РО.


                        Цитата tumanovalex @
                        Подскажите, пожалуйста, как диалог из ресурса сразу развернуть на весь экран.

                        Уточни, что ты имеешь ввиду под сразу: 1. после создания диалога, 2. в конструкторе диалогов редактора ресурсов?
                          Хотелось бы узнать и то, и другое (после создания диалога и в конструкторе диалогов редактора ресурсов)

                          Добавлено
                          Как сделать после создания диалога - я вроде бы разобрался:
                          ExpandedWrap disabled
                                case WM_INITDIALOG:
                                {
                                  ShowWindow(hwnd, SW_MAXIMIZE);
                                  return FALSE;
                                }
                          а вот как в редакторе ресурсов - не знаю

                          Добавлено
                          А если в редакторе диалогов можно указать, что окно нужно развернуть на весь экран, то можно редакторе задать положение кнопок (и других контролов), чтобы они были на нужном месте при развернутом окне?
                            Цитата tumanovalex @
                            2. В большинстве книг по WinAPI описано создание класса окна в памяти с последующим созданием экземпляра класса, а не с помощью конструктора диалогов.
                            Вы рассматриваете идею использования окон по средствам WinAPI, а конструктор может лишь генерировать код окна, скажем, создавать так называемый ресурс, который затем подтягивается и используется. За вызов диалогов отвечает Код, а конструктор лишь создает шаблон. Все верно?
                            Тогда получается, что генератор ресурсов не может в ресурс собирать код, который будет что-то делать. Это лишь ресурс, оболочка.
                            Вместе с этим все же, кроме создания этих ресурсов генерируется и код. Это простейший код обращения с ресурсами.
                            Цитата tumanovalex @
                            возможности создания программ с использованием конструктора диалогов (вызов из одного диалога другого
                            Такого сделать по средствам конструктора нельзя. За вызов диалогов отвечает код, и такой код, обычно, пишет программист.

                            Цитата tumanovalex @
                            настройка вида диалогов в процессе работы программы, примеры диалогов с разными контролами, создание событий для контролов и др.
                            Это уже можно делать в Run-Time, но по средствам вызова функций, которые это делают (т.е. тех самых API Windows).
                            Поэтому, все же, стоит посмотреть в сторону книг WinAPI, чтобы понять что есть что и как этим управлять в Run-Time.

                            Я рекомендую просмотреть (а может и почитать) книгу Программирование под Windows 95 (том 1) - Ч. Педзолд
                            И пусть Вас не смущает Windows 95, все началось с этими окнами оттуда, появились те самые API.
                            В книге, довольно детально, описаны методы написания программ с таким вот подходом к окнам (когда нужно работать с API голыми руками), подход тех времен.
                            Именно поэтому Cfon написал:
                            Цитата Cfon @
                            c MFC проще, без нее тебя ждет долгий и тернистый путь с Win32 API к тому же еще и на Си

                            Как вариант, загляните еще на MSDN в документацию на Visual Studio 2010, возможно там задокументировано использование конструктора студии.
                              Спасибо за ответ. А почему B.V. указал второй вариант?
                                Ему виднее, конечно.
                                Но, он попросил уточнить вопрос, а не дал два варианта ответа :)

                                Вот скрин создания формы. В свойствах "По центру" можно сразу указать, а вот "На весь экран" я не вижу..
                                В принципе, так можно все свойства смотреть.

                                Просмотреть в оригинальном разрешении.

                                user posted imageuser posted image
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0610 ]   [ 18 queries used ]   [ Generated: 28.03.24, 19:01 GMT ]