Создание оконного приложения для windows

До сих пор мы создавали только консольные приложения.
Но программисты на C# широко используют формы для создания пользовательских интерфейсов.
И в сегодняшней статье мы создадим простое оконное приложение.

В примерах используем русскую версию программы Visual Studio 2012.
Первый шаг — начать новый проект и создать форму. Для чего откройте Visual Studio и выберите Файл-> Создать -> Проект, а в диалоговом окне нового проекта выберите Visual C#- Windows и выберите Приложение Windows Forms. Введите имя проекта в нижней части диалогового окна и нажмите кнопку ОК. На следующем рисунке показано, как создать новую форму в Visual Studio.

Изображение

В диалоговом окне Новый проект выберите Приложение Windows Forms».

Изображение

После выбора приложения Windows Forms вы можете увидеть форму по умолчанию (Form1) в своем новом проекте C#. Форма Windows Form, которую вы видите в представлении «Конструктор», представляет собой визуальное представление окна, которое открывается при открытии вашего приложения.

Изображение

Каждый раз, когда вы создаете приложение Windows, Visual Studio будет отображать пустую форму по умолчанию, на которую вы можете перетащить элементы управления на основную форму приложения и настроить их размер и положение.

Если вы хотите установить какие-либо свойства формы, вы можете использовать окно свойств Visual Studio, чтобы изменить их. Есливы не видите окно Свойств, в меню ВИД щелкните Окно свойств. В этом окне перечислены свойства выбранной в данный момент формы Windows или элемента управления, и здесь вы можете изменить существующие значения.

Далее на вкладке ВИД открываем панель элементов. Находим там виджет Button и перетаскиваем его на форму. Дважды щелкаем по новому элементу и открываем окно с кодом кнопки.

  private void button1_Click(object sender, EventArgs e)
  {
   // вводим следующий код
     MessageBox.Show("Привет Мир");

  }

Запускаем приложение.

Изображение

При нажатии на кнопку на экране должно появиться приветствие.
Результат:

Таким образом мы наглядно увидели возвожности создания оконных приложений с C# и Visual Studio, а также привязали к форме кнопку реагирующей на нажатие.

  • Создано 12.10.2021 11:38:18

  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так:

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Создание консольного приложения Visual Studio

Создание оконного приложения Visual Studio

Введение в создание оконных приложений

Функции API для работы с консолью

Структура оконного приложения

Элементы управления окна

Графика в оконных приложениях


В операционной системе Windows возможны 3 типа структур программ:

  • диалоговая (основное окно — диалоговое),
  • консольная, или безоконная структура,
  • классическая (оконная, каркасная) структура
 

Диалоговые приложения для Windows имеют минимальный интерфейс связи с пользователем и передают информацию пользователю посредством стандартных диалоговых окон (например, окно сообщения MessageBox()). Работа программы происходит «вслепую».

 
Неоконные (консольные) приложения представляет собой программу, работающую в текстовом режиме. Работа консольного приложения напоминает работу программы MS-DOS. Но это лишь внешнее впечатление. Консольное приложение обеспечивается специальными функциями Windows. Консольные приложения представляют собой систему средств взаимодействия пользователя с компьютером, основанную на использовании текстового (буквенно-цифрового) режима дисплея или аналогичных (командная строка MS-DOS, Far). Консольные приложения очень компактны не только в откомпилированном виде, но и в текстовом варианте, и имеют такие же возможности обращаться к ресурсам Windows посредством API-функций, как и оконные приложения.

 
Оконные (каркасные) приложения строятся на базе специального набора функций API, составляющих графический интерфейс пользователя (GUI, Graphic User Interface). Главным элементом такого приложения является окно. Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы, по сути, также являются окнами, но обладающими особыми свойствами. События, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна.

 
Разница между оконными и консольными приложениями Windows состоит в том, с каким типом информации они работают.

Загрузить PDF

Загрузить PDF

Вы никогда не задумывались, как сделаны такие программы, как Paint или калькулятор? Ну, узнайте тогда, как создать простое приложение, используя это пошаговое руководство.

  1. Step 1 Приобретите компилятор.

    Компилятор преобразует необработанный исходный код (который вы скоро напишете) в исполняемое приложение. Для целей этого урока приобретите DEV-CPP IDE. Вы можете скачать его здесь here.

  2. Step 2 Установив DEV-CPP, откройте его.

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

  3. Step 3 Подготовьтесь к написанию...

    Подготовьтесь к написанию программы для отображения текста в текстовом поле. Перед тем как начать писать исходный текст, имейте в виду, что приложения Win32 не ведут себя таким же образом, как другие языки, такие как JAVA.

  4. Step 4 В главном окне DEV- CPP перейдите в меню File -> New -> Project.» src=»https://www.wikihow.com/images_en/thumb/5/54/46622-4.jpg/v4-460px-46622-4.jpg» width=»460″ height=»345″ loading=»lazy»></p>
<div class= Картинка с сайта: ru.wikihow.com

Вам будет предложено другое окно. Выберите небольшую картинку с названием «Windows Application» и установите язык как «C», а не «C++.» В текстовом поле, где написано «Name», введите «SimpleProgram». Далее DEV-CPP спросит вас, куда вы хотите сохранить его. Сохраните файл в любом каталоге, но только убедитесь, что сохранили его. Как только закончите с этим, вам будет представлен шаблон на экране источника. Нажмите Ctrl + A, а затем Backspace. Причина, почему мы делаем так, это то, что мы можем начинать заново.

  • Step 5 В начале вашего исходного текста напишите "#include <windows.h>" (без кавычек).» src=»https://www.wikihow.com/images_en/thumb/c/cd/46622-5.jpg/v4-460px-46622-5.jpg» width=»460″ height=»345″ loading=»lazy»></p>
<div class= Картинка с сайта: ru.wikihow.com

  • Это включает в себя библиотеку windows, так что вы можете создавать приложение. Прямо под этим напишите: #include «resource.h» И затем введите: const char g_szClassName[] = «myWindowClass»;

  • Step 6 Напишите один способ...

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

  • Step 7 Создайте скрипт ресурса Resource Script.

    Resource Script является частью исходного кода, который определяет все элементы управления (например,TextBox, Buttons, и т.д.). Вы включите Resource Script в вашу программу и вуаля! У вас будет программа. Написать Resource Script хоть и просто, но это может занять много времени, если у вас нет Visual Editor. Это потому, что вам нужно будет подсчитать приблизительно точные X и Y координаты элементов управления и т.д. В главном окне DEV-CPP перейдите в меню File -> New -> Resource File. DEV-CPP спросит вас: «Add resource file to current Project?». Нажмите YES. В верхней части вашего скрипта ресурса введите #include «resource.h», and also type #include <afxres.h> Это касается всех элементов управления.

  • Step 8 Создайте свой первый элемент управления:

    простое меню.
    Введите:

    IDR_THEMENU MENU
    BEGIN
    POPUP "&File"
    BEGIN
    MENUITEM "E&xit", ID_FILE_EXIT
    END
    END
    

    Часть «IDR_THEMENU» определяет ваше меню как THEMENU. Вы можете назвать его, как хотите. Часть BEGIN говорит сама за себя. POPUP «&File» создает категорию нового меню под названием File. Символ & позволяет пользователю вашего приложения нажимать Ctrl + F на клавиатуре и быстро получить доступ к меню. The MENUITEM «E&xit», ID_FILE_EXIT добавляет пункт меню в категорию File. Вы должны, однако, определить пункт меню с помощью ID_FILE_EXIT.

  • Step 9 Теперь что касается кнопки.

    Ваша кнопка будет внутри диалогового окна, поэтому мы должны создать его в первую очередь. Сделайте это, набрав:

    IDD_SIMPLECONTROL DIALOG 50, 50, 150, 142
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
    MENU IDR_THEMENU
    CAPTION "Simple Prog"
    FONT 8, "MS Sans Serif"
    BEGIN
    DEFPUSHBUTTON "Hello!", ID_HELLO, 10, 10, 40, 15
    END
    

    Часть IDD_SIMPLECONTROL определяет ваш диалог. Четыре цифры после слова «DIALOG» определяют х-позицию, у-позицию, ширину и высоту диалогового окна. Не волнуйтесь слишком о части Style на данный момент. Часть MENU IDR_THEMENU помещает наше старое меню в программу. Часть CAPTION говорит сама за себя, как и шрифт. Часть DEFPUSHBUTTON создает нашу кнопку с названием «Hello!» и определим ее, написав ID_HELLO и задав ей координаты х–позиции, у-позиции, ширину и высоту.

  • Step 10 Вот и все!

    Мы закончили с нашим скриптом ресурса. Только еще одно: мы должны присвоить значения всем величинам, которых мы определили в нашем скрипте ресурсов (например, IDR_THEMENU, и т.д.). Сохраните файл ресурса как SimpleProg.rc

  • Step 11 Выберите File -> New -> Source File.» src=»https://www.wikihow.com/images_en/thumb/b/b8/46622-11.jpg/v4-460px-46622-11.jpg» width=»460″ height=»345″ loading=»lazy»></p>
<div class= Картинка с сайта: ru.wikihow.com

  • Add the source file to the current project? -> Yes. Вам будет предложен пустой экран. Для присвоения значений нашим определенным элементам управления мы даем им числа. Не имеет большого значения, каким числам вы присваиваете элементы управления, но они должны быть организованными. Например, не определяйте элемент управления, присвоив ему случайное число (как 062 491 или пр.). Поэтому введите:

    #define IDR_THEMENU 100
    #define ID_FILE_EXIT 200
    #define IDD_SIMPLECONTROL 300
    #define ID_HELLO 400
    
  • Step 12 Сохранить этот файл как resource.h .

    Помните, как мы писали «#include «resource.h»»? Ну, вот почему мы это сделали. Нам нужно было присвоить значения.

  • Step 13 Вернитесь к ресурсу, нашему SimpleProg.c или  тому, как его вы назвали.

    Введите:

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){return DialogBox(hInstance, MAKEINTRESOURCE(IDD_SIMPLECONTROL), NULL, SimpleProc);}
    
  • Step 14 Не беспокойтесь слишком  о всех технических  нюансах здесь.

    Просто знайте, что это части возвращают диалоговое окно к нашей процедуре обработки сообщений, называемой SimpleProc.

  • Step 15 Введите:

    BOOL CALLBACK SimpleProc(HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam){switch(Message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:switch ( LOWORD (wParam) ) {case ID_HELLO:MessageBox(NULL,»Hey», «Hallo!», MB_OK)break; case ID_FILE_EXIT:EndDialog(hWndDlg, 0);break;}break;case WM_CLOSE:EndDialog(hWndDlg, 0); break; default: return FALSE;}return TRUE;}

  • Step 16 Эта часть обрабатывает диалоговые сообщения.

    Например, в случае ID_HELLO (наша кнопка), мы создаем окно сообщения с содержанием «Hello!». Кроме того, в случае, когда переходим в File и Exit, мы закрываем окно в случае ID_FILE_EXIT.

  • Step 17 Убедитесь, что ваш SimpleProc предшествует части  int WINAPI WINMAIN !

    Это важно, если вы хотите, чтобы ваша программа работала.

  • Step 18 Нажмите F9, чтобы скомпилировать и запустить программу!

    Реклама

  • Советы

    • Если вы расстроены (на любом этапе работы) — отдохните и вернитесь обратно.
    • Это учебник для начинающих, так много частей не объясняются. Даже если это учебник для начинающих, рекомендуется, чтобы у вас был некоторый опыт в области программирования (например, знание switch statments, if-else, и т.д.)
    • Если вы запутались, есть много учебников, доступных в Интернете.

    Реклама

    Предупреждения

    • Изучение Win32 не является легкой задачей. Вам нужно обратить внимание на это. Это, безусловно, не для слабонервных.
    • Нумерация строк в этом учебнике несколько искажает исходный код.

    Реклама

    Об этой статье

    Эту страницу просматривали 20 838 раз.

    Была ли эта статья полезной?

    Windows GUI programming allows developers to create interactive and user-friendly applications for the Windows operating system. In this article, we will explore the basics of Windows GUI programming using C++ and the Win32 API. We will walk through the process of building a simple «Hello, World!» application with a graphical user interface (GUI) to help you get started with Windows GUI programming.

    Prerequisites:

    Before diving into Windows GUI programming, make sure you have a basic understanding of C++ programming concepts. Familiarity with functions, variables, control flow, and the C++ syntax will be beneficial. Additionally, a Windows development environment, such as Visual Studio or Code::Blocks with MinGW, will be required to compile and run the code examples.

    Setting Up the Project:

    To begin, create a new C++ project in your preferred development environment. Ensure that you have the necessary tools and libraries configured to build Windows applications. For example, if you’re using Code::Blocks with MinGW, ensure that the appropriate compiler and linker settings are in place.

    Creating a Basic Window:

    Let’s start by creating a basic window for our «Hello, World!» application. Open a new C++ source file and enter the following code:

    #include <windows.h>
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    
    int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
    {
        const wchar_t CLASS_NAME[] = L"HelloWorldWindowClass";
    
        WNDCLASS wc = {};
        wc.lpfnWndProc = WindowProc;
        wc.hInstance = hInstance;
        wc.lpszClassName = CLASS_NAME;
    
        RegisterClass(&wc);
    
        HWND hwnd = CreateWindowEx(
            0,
            CLASS_NAME,
            L"Hello, World!",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            NULL,
            NULL,
            hInstance,
            NULL
        );
    
        if (hwnd == NULL)
        {
            return 0;
        }
    
        ShowWindow(hwnd, nCmdShow);
    
        MSG msg = {};
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return 0;
    }
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hwnd, &ps);
                FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
                EndPaint(hwnd, &ps);
            }
            return 0;
        }
    
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    

    Enter fullscreen mode

    Exit fullscreen mode

    Understanding the Code:

    Now, let’s break down the code and understand how it creates a basic window for our «Hello, World!» application.

    #include <windows.h>
    

    Enter fullscreen mode

    Exit fullscreen mode

    This line includes the necessary header file <windows.h>, which provides access to the Windows API functions, constants, and data types required for creating and managing Windows applications.

    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    

    Enter fullscreen mode

    Exit fullscreen mode

    A forward declaration of the WindowProc function is provided. This function serves as the window procedure that processes messages sent to the application’s window.

    int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmd
    
    Line, int nCmdShow)
    

    Enter fullscreen mode

    Exit fullscreen mode

    The wWinMain function is the entry point for the Windows application, replacing the standard main function. It takes several parameters:

    • hInstance: Represents the handle to the application instance.
    • HINSTANCE (unused in this code): Represents the previous instance handle.
    • PWSTR pCmdLine: Pointer to a null-terminated Unicode string that contains the command-line arguments.
    • nCmdShow: Specifies how the window should be shown, such as maximizing, minimizing, or normal.
    const wchar_t CLASS_NAME[] = L"HelloWorldWindowClass";
    

    Enter fullscreen mode

    Exit fullscreen mode

    A window class name is defined as a null-terminated Unicode string. This name will be used to register the window class.

    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
    
    RegisterClass(&wc);
    

    Enter fullscreen mode

    Exit fullscreen mode

    A WNDCLASS structure is created and initialized. It specifies the window class attributes, including the window procedure (WindowProc), the application instance handle (hInstance), and the class name (CLASS_NAME). The window class is then registered using RegisterClass to make it available for creating windows.

    HWND hwnd = CreateWindowEx(
        0,
        CLASS_NAME,
        L"Hello, World!",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL
    );
    

    Enter fullscreen mode

    Exit fullscreen mode

    The CreateWindowEx function creates the main application window. It takes parameters such as window styles, class name, window text, window size, and other attributes. In this code, we use the CLASS_NAME as the class name, «Hello, World!» as the window text, and WS_OVERLAPPEDWINDOW as the window style. The CW_USEDEFAULT parameters are used to set the default size and position of the window.

    if (hwnd == NULL)
    {
        return 0;
    }
    

    Enter fullscreen mode

    Exit fullscreen mode

    After creating the window, we check if the creation was successful. If the hwnd variable is NULL, it indicates an error, and the program returns 0.

    ShowWindow(hwnd, nCmdShow);
    

    Enter fullscreen mode

    Exit fullscreen mode

    The ShowWindow function displays the window using the specified nCmdShow parameter, which determines how the window is initially shown (e.g., maximized, minimized, or normal).

    MSG msg = {};
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    

    Enter fullscreen mode

    Exit fullscreen mode

    The message loop processes messages sent to the window, such as user input, window resizing, or system events. The GetMessage function retrieves messages from the application’s message queue. The retrieved message is then translated using TranslateMessage, which converts keyboard input into character messages, and dispatches the message to the WindowProc function using DispatchMessage.

    LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hwnd, &ps);
                FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
                EndPaint(hwnd, &ps);
            }
            return 0;
        }
    
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    

    Enter fullscreen mode

    Exit fullscreen mode

    The WindowProc function is the window procedure that handles various window messages sent to the application’s window. In this code, two message cases are handled: WM_DESTROY and WM_PAINT. When the window receives the WM_DESTROY message, it posts a quit message to the message queue using PostQuitMessage, signaling the termination of the application. The WM_PAINT message is responsible for painting the window’s client area. In this example, it fills the window with the COLOR_WINDOW system color.

    In this article, we introduced the basics of Windows GUI programming using C++ and the Win32 API. We walked through the process of creating a basic «Hello, World!» application with a graphical user interface. Understanding the concepts of registering a window class, creating a window, handling window messages, and implementing a window procedure are essential for building more complex and interactive Windows applications. With the knowledge gained from this article, you can start exploring and building your own Windows GUI applications using C++.Peace!

    Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии
  • Как перевести windows из legacy в uefi
  • Выключатель компьютера по таймеру windows 10
  • Чем удалить windows old
  • Windows для одноядерного ноутбука
  • Host process for windows sync что это