Как написать программу с кнопками

В tkinter с помощью виджета Radiobutton создаются радиокнопки.

Радиокнопки не создают по одной, а делают связанную группу, работающую по принципу переключателей. Когда включена одна, другие выключены.

Если мы создадим две радиокнопки без соответствующих настроек, то обе будут выключены. Нажав на одну из радиокнопок включатся все и выключить их будет невозможно:

from tkinter import * from tkinter.ttk import * root = Tk() Radiobutton(text=’The first’).pack(anchor=W) Radiobutton(text=’The second’).pack(anchor=W) Radiobutton(text=’The third’).pack(anchor=W) root.mainloop()
1
2
3
4
5
6
7
8
9
10

Результат выполнения кода:

Эти переключатели никак не связаны друг с другом. Кроме того для них не указано исходное значение, должны ли они быть в состоянии «вкл» или «выкл». По-умолчанию они выключены.

Связь устанавливается через общую переменную, разные значения которой соответствуют включению разных радиокнопок группы. У всех кнопок одной группы свойство variable устанавливается в одно и то же значение – связанную с группой переменную. А свойству value присваиваются разные значения этой переменной.

Создание GUI приложения Python tkinter. Виджет Button. Кнопка tkinter

В tkinter нельзя использовать любую переменную для хранения состояний виджетов. Для этих целей предусмотрены специальные классы-переменные пакета tkinter:

  • BooleanVar() — класс позволяет хранить булевы значения (0 или 1 и True или False),
  • IntVar() — класс позволяет хранить целочисленные значения,
  • DoubleVar() — класс позволяет хранить дробные значения,
  • StringVar() — класс позволяет хранить строки.

Далее переменной rb_var присваивается объект типа BooleanVar. С помощью метода set() он устанавливается в значение 0:

При запуске программы включенной окажется первая радиокнопка, так как значение ее опции value совпадает с текущим значением переменной rb_var . Если кликнуть по второй радиокнопке, то она включится, а первая выключится. При этом значение rb_var станет равным 1:

from tkinter import * from tkinter.ttk import * root = Tk() rb_var = BooleanVar() rb_var.set(0) Radiobutton(text=’The first’, variable=rb_var, value=0).pack(anchor=W) Radiobutton(text=’The second’, variable=rb_var, value=1).pack(anchor=W) root.mainloop()
1
2
3
4
5
6
7
8
9
10
11

Результат выполнения кода:

Стоит обратить внимание на созвучие классов виджетов Button() и RadioButton() , по сути оба виджета являются кнопками и их нажатие может вызывать функцию при необходимости, т.е. можно использовать параметр command=any_function .

Рассмотрим пример вывода значения вывода выбранной кнопки:

from tkinter import * from tkinter.ttk import * def print_console(): print(rb_var.get()) root = Tk() rb_var = StringVar() Radiobutton(text=’The first’, variable=rb_var, value=’Clicked 1′, command=print_console).pack(anchor=W) Radiobutton(text=’The second’, variable=rb_var, value=’Clicked 2′, command=print_console).pack(anchor=W) root.mainloop()
1

Уроки Python / Модуль tkinter создание кнопки и вызов функции


2
3
4
5
6
7
8
9
10
11
12
13

Результат вывода в консоль:

Clicked 1 Clicked 2

# Упражнения

  1. Написать программу состоящую из трех радиокнопок:
    • при запуске все радиокнопки должны быть пустыми,
    • для хранения вариантов используйте переменную класса IntVar() ,
    • выбор кнопок должен работать независимо.
    • Напишите программу состоящую из метки и четырех радиокнопок. Программа отображает вопрос: «Is the capital of China?» с вариантами ответа: Beijing, Hong Kong, Tokyo, Taipei.
      • при запуске все радиокнопки должны быть пустыми,
      • для хранения вариантов используйте переменную класса StringVar() ,
      • выбор кнопок должен работать независимо,
      • при нажатии радиокнопки результат выбора выводится в консоль.

      radiobutton_capitals

      Пример вывода в консоль:

      Taipei

      • если ответ верный — Beijing, то в консоль выводится True
      • иначе False .

      # Проверка выбора

      В программном коде обычно требуется получить данные о том, какая из кнопок включена. Делается это с помощью метода .get() :

      from tkinter import * from tkinter.ttk import * def check_answer(): if rb_var.get() == 0: label_value.set(‘You are wrong. :(‘) elif rb_var.get() == 1: label_value.set(‘True. ‘) elif rb_var.get() == 2: label_value.set(‘You are kidding. ;)’) root = Tk() Label(text=’How to translate: «The current window?»‘).pack() rb_var = IntVar() rb_var.set(0) Radiobutton(text=»Правильное окно», variable=rb_var, value=1).pack() Radiobutton(text=»Текущее окно», variable=rb_var, value=2).pack() Radiobutton(text=»Летящее окно», variable=rb_var, value=3).pack() button = Button(text=»Check», command=check_answer).pack() label_value = StringVar() label_value.set(«Choose an answer!») Label(textvariable=label_value).pack() root.mainloop()
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27

      Результат выполнения кода:

      В функции change() в зависимости от считанного значения переменной label_value ход выполнения программы идет по одной из трех веток.

      Также решение выбора можно реализовать вызовом отдельной функции для каждой отдельной радиокнопки, а обычная кнопка, тогда не понадобится.

      # Упражнения

      1. Напишите оконное приложение, в котором отображается текст: Look at the working program
        • Добавьте в приложение четыре радиокопки с соответствующим текстом: «the first», «the second», «the third», «the fourth».
        • Добавьте ещё одно поле Label , в которое выведена надпись: «… radiobutton still not choose…»
        • В каждой радиокнопке добавьте вызов функции, которая будет менять текст последнего поля, в виде: «Chosen … radiobutton». Вместо … будет прописываться номер нажатой кнопки.

        Источник: learn4kid-python.firebaseapp.com

        Виджеты Button, Label, Entry

        В этом уроке рассмотрим подробнее три наиболее простых и популярных виджета GUI – кнопку, метку и однострочное текстовое поле. В tkinter объекты этих элементов интерфейса порождаются соответственно от классов Button , Label и Entry .

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

        Читайте также:
        Как создать программу вымогатель

        В Tkinter существует три способа конфигурирования свойств виджетов:

        • в момент создания объекта,
        • с помощью метода config , он же configure ,
        • путем обращения к свойству как к элементу словаря.

        Button – кнопка

        Самыми важными свойствами виджета класса Button являются text , с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку.

        По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Единицами измерения в данном случае являются знакоместа.

        Такие свойства как bg , fg , activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия и установки курсора мыши над кнопкой.

        from tkinter import * def change(): b1[‘text’] = «Изменено» b1[‘bg’] = ‘#000000’ b1[‘activebackground’] = ‘#555555’ b1[‘fg’] = ‘#ffffff’ b1[‘activeforeground’] = ‘#ffffff’ root = Tk() b1 = Button(text=»Изменить», width=15, height=3) b1.config(command=change) b1.pack() root.mainloop()

        Здесь свойство command устанавливается с помощью метода config . Однако можно было сделать и так: b1[‘command’] = change . Вот так будет выглядеть кнопка после запуска программы и после нажатия на нее:

        Пример изменения свойств виджета-кнопки

        Label – метка

        Виджет Label просто отображает текст в окне и служит в основном для информационных целей (вывод сообщений, подпись других элементов интерфейса). Свойства метки во многом схожи с таковыми у кнопки. Однако у меток нет опции command . Поэтому связать их с событием можно только с помощью метода bind .

        На примере объекта типа Label рассмотрим свойство font – шрифт.

        from tkinter import * root = Tk() l1 = Label(text=»Машинное обучение», font=»Arial 32″) l2 = Label(text=»Распознавание образов», font=(«Comic Sans MS», 24, «bold»)) l1.config(bd=20, bg=’#ffaaaa’) l2.

        config(bd=20, bg=’#aaffff’) l1.pack() l2.pack() root.mainloop()

        Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.

        Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ (единица измерения – пиксель):

        Конфигурирование свойств Label

        Бывает, что метки и кнопки не присваивают переменным, если потом к ним в коде не приходится обращаться. Их создают от класса и сразу размещают:

        from tkinter import * def take(): lab[‘text’] = «Выдано» root = Tk() Label(text=»Пункт выдачи»).pack() Button(text=»Взять», command=take).

        pack() lab = Label(width=10, height=1) lab.pack() root.mainloop()

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

        Entry – однострочное текстовое поле

        Текстовые поля предназначены для ввода информации пользователем. Однако нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными. В tkinter вторым соответствует класс Text , который будет рассмотрен позже.

        Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get . В текстовое поле можно вставить текст методом insert . Также можно удалить текст методом delete .

        Метод insert принимает позицию, в которую надо вставлять текст, и сам текст.

        from tkinter import * from datetime import datetime as dt def insert_time(): t = dt.now().

        time() e1.insert(0, t.strftime(‘%H:%M:%S ‘)) root = Tk() e1 = Entry(width=50) but = Button(text=»Время», command=insert_time) e1.

        pack() but.pack() root.mainloop()

        приведет к тому, что после каждого нажатия на кнопку будет вставляться новое время пред уже существующей в поле строкой.

        Метод insert объекта Entry

        Если 0 в insert заменить на константу END , то вставляться будет в конец. Можно указать любое число-индекс знакоместа, тогда вставка будет производиться куда-либо в середину строки.

        Метод delete принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END .

        Практическая работа

        Напишите программу, состоящую из семи кнопок, цвета которых соответствуют цветам радуги. При нажатии на ту или иную кнопку в текстовое поле должен вставляться код цвета, а в метку – название цвета.

        Коды цветов в шестнадцатеричной кодировке: #ff0000 – красный, #ff7d00 – оранжевый, #ffff00 – желтый, #00ff00 – зеленый, #007dff – голубой, #0000ff – синий, #7d00ff – фиолетовый.

        Примерно должно получиться так:

        Пример программы с текстовым полем и кнопками

        Для выравнивания строки по центру в текстовом поле используется свойство justify со значением CENTER .

        Курс с примерами решений практических работ: pdf-версия .

        X Скрыть Наверх

        Tkinter. Программирование GUI на Python

        Источник: younglinux.info

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

        Главным элементом программы в среде Windows является окно. Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы также являются окнами, но обладающими особым свойством: события, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна.

        Системный класс Предназначение
        BUTTON Кнопка.
        COMBOBOX Комбинированное окно (окно со списком и поля выбора).
        EDIT Окно редактирования текста.
        LISTBOX Окно со списком
        SCROLLBAR Полоса прокрутки
        STATIC Статический элемент (текст)

        Создание элементов управления окна осуществляется функцией

        HWND WINAPI CreateWindow (
        _In_opt_ LPCTSTR lpClassName, // имя предопределенного класса
        _In_opt_ LPCTSTR lpWindowName, // текст
        _In_ D WORD dwStyle, // стиль
        _In_ int x, // координата x
        _In_ int y, // координата y
        _In_ int nWidth, // ширина
        _In_ int nHeight, // высота
        _In_opt_ HWND hWndParent, // дескриптор родительского окна
        _In_opt_ HMENU hMenu, // номер пункта меню
        _In_opt_ HINSTANCE hInstance, // дескриптор приложения
        _In_opt_ LPVOID lpParam ); // NULL

        Читайте также:
        Селекс программа для зоотехников инструкция

        Указанная функция возвращает дескриптор элемента управления окна, который может быть впоследствии использован для анализа элемента управления, с которым связано обрабатываемое событие. Дескриптор кнопки, например, передается в оконную функцию в качестве параметра lparam .

        Таблицу стилей элементов управления окна можно устанавливать в параметре dwStyle как и для создания родительского окна. При этом обязательно указывается, что создаваемое окно является дочерним — WS_CHILD .

        Кнопка

        Кнопка

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

        При нажатии кнопки операционная система генерирует сообщение WM_COMMAND с параметром lParam , соответствующим дескриптору кнопки.

        Обработка нажатия кнопки:

        LONG WINAPI WndProc( HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam) <
        .
        switch (Message) <
        case WM_COMMAND :
        if (lparam == ( LPARAM )hBtn) <
        //обработка нажатия кнопки
        >
        break ;
        .
        >
        >

        Поле редактирования

        Поле редактирования

        Поле редактирования — прямоугольное дочернее окно, внутри которого пользователь может напечатать с клавиатуры текст. Пользователь выбирает орган управления и дает ему фокус клавиатуры, щелкая по нему мышью или перемещая в него, каретку путем нажатия клавиши ТАБУЛЯЦИИ (TAB). Пользователь может вводить текст, когда окно редактирования текста отображает мигающую каретку.

        Для считывания информации из поля редактирования используется функция

        int WINAPI GetWindowText(
        _In_ HWND hWnd, // дескриптор поля
        _Out_ LPTSTR lpString, // указатель на текстовую строку
        _In_ int nMaxCount ); // максимальное количество символов

        Возвращаемое значение – длина считанной текстовой строки.

        Для установки текста в поле редактирования используется функция

        BOOL WINAPI SetWindowText(
        _In_ HWND hWnd, // дескриптор поля
        _In_opt_ LPCTSTR lpString ); // указатель на текстовую строку

        В случае успешного завершения функция возвращает ненулевое значение.

        Статический текст

        Статический текст — текстовое поле, окно или прямоугольник, используемый для надписей, не подлежащих редактированию.

        Для установки статического текста используется та же функция SetWindowText .

        Пример на С++ Найти сумму двух чисел
        Программа создает два поля редактирования для ввода чисел и кнопку «Рассчитать», при нажатии на которую выводится статический текст, соответствующий сумме.
        Для перевода строки в целое число и обратно использованы функции StrToInt и IntToStr , описанные в статье Преобразование строки в число и обратно. Также использовалась многобайтовая кодировка.

        #include
        LONG WINAPI WndProc( HWND , UINT , WPARAM , LPARAM ); // функция обработки сообщений окна
        // Функция преобразования строки в число
        int StrToInt( char *s)
        int temp = 0; // число
        int i = 0;
        int sign = 0; // знак числа 0- положительное, 1 — отрицательное
        if (s[i] == ‘-‘ )
        sign = 1;
        i++;
        >
        while (s[i] >= 0x30 s[i] temp = temp + (s[i]
        temp = temp * 10;
        i++;
        >
        temp = temp / 10;
        if (sign == 1)
        temp = -temp;
        return (temp);
        >
        // Функция преобразования числа в строку
        char * IntToStr( int n)
        char s[40], t, *temp;
        int i, k;
        int sign = 0;
        i = 0;
        k = n;
        if (k <0)
        sign = 1;
        k = -k;
        >
        do t = k % 10;
        k = k / 10;
        s[i] = t | 0x30;
        i++;
        > while (k>0);
        if (sign == 1)
        s[i] = ‘-‘ ;
        i++;
        >
        temp = new char [i];
        k = 0;
        i—;
        while (i >= 0) temp[k] = s[i];
        i—; k++;
        >
        temp[k] = ‘’ ;
        return (temp);
        >
        // Стартовая функция
        int WINAPI WinMain( HINSTANCE hInstance,
        HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
        HWND hwnd; // дескриптор окна
        MSG msg; // структура сообщения
        WNDCLASS w; // структура класса окна
        memset( // очистка памяти для структуры
        w.style = CS_HREDRAW | CS_VREDRAW ;
        w.lpfnWndProc = WndProc;
        w.hInstance = hInstance;
        w.hbrBackground = CreateSolidBrush(0x00FFFFFF);
        w.lpszClassName = «MyClass» ;
        RegisterClass ( // регистрация класса окна
        // Создание окна
        hwnd = CreateWindow ( «MyClass», «Сумма двух чисел» ,
        WS_OVERLAPPEDWINDOW ,
        500, 300, 500, 380,
        NULL , NULL , hInstance, NULL );
        ShowWindow(hwnd, nCmdShow); // отображение окна
        UpdateWindow(hwnd); // перерисовка окна
        // Цикл обработки сообщений
        while ( GetMessage (msg);
        DispatchMessage (
        >
        return msg.wParam;
        >
        // Функция обработки сообщений
        LONG WINAPI WndProc( HWND hwnd, UINT Message,
        WPARAM wparam, LPARAM lparam) HDC hdc;
        HINSTANCE hInst;
        PAINTSTRUCT ps;
        static HWND hBtn; // дескриптор кнопки
        static HWND hEdt1, hEdt2; // дескрипторы полей редактирования
        static HWND hStat; // дескриптор статического текста
        TCHAR StrA[20];
        int a, b, sum, Len;
        switch (Message) case WM_CREATE: // сообщение создания окна
        hInst = ((LPCREATESTRUCT)lparam)->hInstance; // дескриптор приложения
        // Создаем и показываем первое поле редактирования
        hEdt1 = CreateWindow ( «edit», «0» ,
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 50, 50, 60, 20,
        hwnd, 0, hInst, NULL );
        ShowWindow(hEdt1, SW_SHOWNORMAL);
        // Создаем и показываем второе поле редактирования
        hEdt2 = CreateWindow ( «edit», «0» ,
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 150, 50, 60,
        20, hwnd, 0, hInst, NULL );
        ShowWindow(hEdt2, SW_SHOWNORMAL);
        // Создаем и показываем кнопку
        hBtn = CreateWindow ( «button», «Рассчитать» ,
        WS_CHILD | WS_VISIBLE | WS_BORDER,
        50, 100, 120, 30, hwnd, 0, hInst, NULL );
        ShowWindow(hBtn, SW_SHOWNORMAL);
        // Создаем и показываем поле текста для результата
        hStat = CreateWindow ( » static «, «0» , WS_CHILD | WS_VISIBLE,
        150, 180, 120, 20, hwnd, 0, hInst, NULL );
        ShowWindow(hStat, SW_SHOWNORMAL);
        break ;
        case WM_COMMAND : // сообщение о команде
        if (lparam == ( LPARAM )hBtn) // если нажали на кнопку
        Len = GetWindowText(hEdt1, StrA, 20);
        a = StrToInt(StrA); // считываем число из первого поля
        Len = GetWindowText(hEdt2, StrA, 20);
        b = StrToInt(StrA); // считываем число из второго поля
        sum = a + b; // находим сумму двух чисел
        SetWindowText(hStat, IntToStr(sum)); // выводим результат в статическое поле
        >
        break ;
        case WM_PAINT : // перерисовка окна
        hdc = BeginPaint(hwnd, // начало перерисовки
        TextOut(hdc, 50, 20, «Введите два числа» , 18); // вывод текстовых сообщений
        TextOut(hdc, 50, 180, «Результат:» , 10);
        EndPaint(hwnd, // конец перерисовки
        break ;
        case WM_DESTROY : // закрытие окна
        PostQuitMessage(0);
        break ;
        default: // обработка сообщения по умолчанию
        return DefWindowProc (hwnd, Message, wparam, lparam);
        >
        return 0;
        >

        Читайте также:
        В какой части окна программы oo writer можно увидеть местоположение табулятора

        Сумма двух чисел

        Результат выполнения

        Комментариев к записи: 16

        Владислав Чёрный

        Код сразу не заработал, выдавал ошибки. Запускал код в Code::Blocks 20.03. Для функции WndProc заменил тип с LONG WINAPI на LRESULT CALLBACK и всё заработало. Исправный код представлен ниже.

        LRESULT CALLBACK WndProc( HWND , UINT , WPARAM , LPARAM ); // функция обработки сообщений окна
        // Функция преобразования строки в число
        int StrToInt( char *s)
        int temp = 0; // число
        int i = 0;
        int sign = 0; // знак числа 0- положительное, 1 — отрицательное
        if (s[i] == ‘-‘)
        sign = 1;
        i++;
        >
        while (s[i] >= 0x30 s[i] temp = temp + (s[i]
        temp = temp * 10;
        i++;
        >
        temp = temp / 10;
        if (sign == 1)
        temp = -temp;
        return (temp);
        >
        // Функция преобразования числа в строку
        char * IntToStr( int n)
        char s[40], t, *temp;
        int i, k;
        int sign = 0;
        i = 0;
        k = n;
        if (k <0)
        sign = 1;
        k = -k;
        >
        do t = k % 10;
        k = k / 10;
        s[i] = t | 0x30;
        i++;
        > while (k>0);
        if (sign == 1)
        s[i] = ‘-‘;
        i++;
        >
        temp = new char [i];
        k = 0;
        i—;
        while (i >= 0) temp[k] = s[i];
        i—; k++;
        >
        temp[k] = ‘’;
        return (temp);
        >
        // Стартовая функция
        int WINAPI WinMain( HINSTANCE hInstance,
        HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
        HWND hwnd; // дескриптор окна
        MSG msg; // структура сообщения
        WNDCLASS w; // структура класса окна
        memset( // очистка памяти для структуры
        w.style = CS_HREDRAW | CS_VREDRAW ;
        w.lpfnWndProc = WndProc;
        w.hInstance = hInstance;
        w.hbrBackground = CreateSolidBrush(0x00FFFFFF);
        w.lpszClassName = «MyClass» ;
        RegisterClass ( // регистрация класса окна
        // Создание окна
        hwnd = CreateWindow ( «MyClass», «Сумма двух чисел» ,
        WS_OVERLAPPEDWINDOW ,
        500, 300, 500, 380,
        NULL , NULL , hInstance, NULL );
        ShowWindow(hwnd, nCmdShow); // отображение окна
        UpdateWindow(hwnd); // перерисовка окна
        // Цикл обработки сообщений
        while ( GetMessage (msg);
        DispatchMessage (
        >
        return msg.wParam;
        >
        // Функция обработки сообщений
        LRESULT CALLBACK WndProc( HWND hwnd, UINT Message,
        WPARAM wparam, LPARAM lparam) HDC hdc;
        HINSTANCE hInst;
        PAINTSTRUCT ps;
        static HWND hBtn; // дескриптор кнопки
        static HWND hEdt1, hEdt2; // дескрипторы полей редактирования
        static HWND hStat; // дескриптор статического текста
        TCHAR StrA[20];
        int a, b, sum, Len;
        switch (Message) case WM_CREATE: // сообщение создания окна
        hInst = ((LPCREATESTRUCT)lparam)->hInstance; // дескриптор приложения
        // Создаем и показываем первое поле редактирования
        hEdt1 = CreateWindow ( «edit», «0» ,
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 50, 50, 60, 20,
        hwnd, 0, hInst, NULL );
        ShowWindow(hEdt1, SW_SHOWNORMAL);
        // Создаем и показываем второе поле редактирования
        hEdt2 = CreateWindow ( «edit», «0» ,
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 150, 50, 60,
        20, hwnd, 0, hInst, NULL );
        ShowWindow(hEdt2, SW_SHOWNORMAL);
        // Создаем и показываем кнопку
        hBtn = CreateWindow ( «button», «Рассчитать» ,
        WS_CHILD | WS_VISIBLE | WS_BORDER,
        50, 100, 120, 30, hwnd, 0, hInst, NULL );
        ShowWindow(hBtn, SW_SHOWNORMAL);
        // Создаем и показываем поле текста для результата
        hStat = CreateWindow ( » static «, «0» , WS_CHILD | WS_VISIBLE,
        150, 180, 120, 20, hwnd, 0, hInst, NULL );
        ShowWindow(hStat, SW_SHOWNORMAL);
        break ;
        case WM_COMMAND : // сообщение о команде
        if (lparam == ( LPARAM )hBtn) // если нажали на кнопку
        Len = GetWindowText(hEdt1, StrA, 20);
        a = StrToInt(StrA); // считываем число из первого поля
        Len = GetWindowText(hEdt2, StrA, 20);
        b = StrToInt(StrA); // считываем число из второго поля
        sum = a + b; // находим сумму двух чисел
        SetWindowText(hStat, IntToStr(sum)); // выводим результат в статическое поле
        >
        break ;
        case WM_PAINT : // перерисовка окна
        hdc = BeginPaint(hwnd, // начало перерисовки
        TextOut(hdc, 50, 20, «Введите два числа» , 18); // вывод текстовых сообщений
        TextOut(hdc, 50, 180, «Результат:» , 10);
        EndPaint(hwnd, // конец перерисовки
        break ;
        case WM_DESTROY : // закрытие окна
        PostQuitMessage(0);
        break ;
        default: // обработка сообщения по умолчанию
        return DefWindowProc (hwnd, Message, wparam, lparam);
        >
        return 0;
        >

        А как добавить DataGridView? У Вас написано в коде по поводу Кнопки (Botton) так: static HWND hBtn; // дескриптор кнопки И, вообще, где взять весь список возможных элементов управления с их названием в коде, как у Вас static HWND hBtn ?

        Кстати, я увидел код создания кнопки: // Создаем и показываем кнопку hBtn = CreateWindow(«button», «Рассчитать», WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 100, 120, 30, hwnd, 0, hInst, NULL); ShowWindow(hBtn, SW_SHOWNORMAL); Но это всё равно никак не помогает создать DataGridView.

        Источник: prog-cpp.ru

        Рейтинг
        ( Пока оценок нет )
        Загрузка ...
        EFT-Soft.ru