Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230

Как создать кнопку, выводящую окно с сообщением?

07.01.2016, 23:51. Показов 4678. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать кнопку на Win32 Api?


Внизу код моей первой программы. Я хочу сделать так, чтобы над строчкой "Knopka!"
была кнопка со надписью "НАЖМИ НА МЕНЯ!".
И при нажатии выходила функция "Messagebox" с надписью "Вы нажали на меня".
Ответы пожалуйста писать, копируя и редактируя код который находится внизу
Спасибо кто ответит
P.S. Дайте пожалуйста ссылки на хорошие уроки Win32 Api
C++
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "stdafx.h"
#include "Hello world!.h"
#include <Windows.h>
 
// Прототип функции обработки сообщений с пользовательским названием:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR mainMessage[] = L"Knopka!"; // строка с сообщением
 
                                          // Управляющая функция:
int WINAPI WinMain(HINSTANCE hInst, // дескриптор экземпляра приложения
    HINSTANCE hPrevInst, // не используем
    LPSTR lpCmdLine, // не используем
    int nCmdShow) // режим отображения окошка
{
    TCHAR szClassName[] = L"Мой класс"; // строка с именем класса
    HWND hMainWnd; // создаём дескриптор будущего окошка
    MSG msg; // создём экземпляр структуры MSG для обработки сообщений
    WNDCLASSEX wc; // создаём экземпляр, для обращения к членам класса WNDCLASSEX
    wc.cbSize = sizeof(wc); // размер структуры (в байтах)
    wc.style = CS_HREDRAW | CS_VREDRAW; // стиль класса окошка
    wc.lpfnWndProc = WndProc; // указатель на пользовательскую функцию
    wc.lpszMenuName = NULL; // указатель на имя меню (у нас его нет)
    wc.lpszClassName = szClassName; // указатель на имя класса
    wc.cbWndExtra = NULL; // число освобождаемых байтов в конце структуры
    wc.cbClsExtra = NULL; // число освобождаемых байтов при создании экземпляра приложения
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // декриптор пиктограммы
    wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // дескриптор маленькой пиктограммы (в трэе)
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // дескриптор курсора
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // дескриптор кисти для закраски фона окна
    wc.hInstance = hInst; // указатель на строку, содержащую имя меню, применяемого для класса
    if (!RegisterClassEx(&wc)) {
        // в случае отсутствия регистрации класса:
        MessageBox(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK);
        return NULL; // возвращаем, следовательно, выходим из WinMain
    }
    // Функция, создающая окошко:
    hMainWnd = CreateWindow(
        szClassName, // имя класса
        L"Полноценная оконная процедура", // имя окошка (то что сверху)
        WS_OVERLAPPEDWINDOW | WS_VSCROLL, // режимы отображения окошка
        CW_USEDEFAULT, // позиция окошка по оси х
        NULL, // позиция окошка по оси у (раз дефолт в х, то писать не нужно)
        CW_USEDEFAULT, // ширина окошка
        NULL, // высота окошка (раз дефолт в ширине, то писать не нужно)
        (HWND)NULL, // дескриптор родительского окна
        NULL, // дескриптор меню
        HINSTANCE(hInst), // дескриптор экземпляра приложения
        NULL); // ничего не передаём из WndProc
    if (!hMainWnd) {
        // в случае некорректного создания окошка (неверные параметры и тп):
        MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
        return NULL;
    }
    ShowWindow(hMainWnd, nCmdShow); // отображаем окошко
    UpdateWindow(hMainWnd); // обновляем окошко
    while (GetMessage(&msg, NULL, NULL, NULL)) { // извлекаем сообщения из очереди, посылаемые фу-циями, ОС
        TranslateMessage(&msg); // интерпретируем сообщения
        DispatchMessage(&msg); // передаём сообщения обратно ОС
    }
    return msg.wParam; // возвращаем код выхода из приложения
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    HDC hDC; // создаём дескриптор ориентации текста на экране
    PAINTSTRUCT ps; // структура, сод-щая информацию о клиентской области (размеры, цвет и тп)
    RECT rect; // стр-ра, определяющая размер клиентской области
    COLORREF colorText = RGB(0, 0, 0); // задаём цвет текста
    switch (uMsg) {
    case WM_PAINT: // если нужно нарисовать, то:
        hDC = BeginPaint(hWnd, &ps); // инициализируем контекст устройства
        GetClientRect(hWnd, &rect); // получаем ширину и высоту области для рисования
        SetTextColor(hDC, colorText); // устанавливаем цвет контекстного устройства
        DrawText(hDC, mainMessage, -1, &rect, EMR_SETWORLDTRANSFORM | DT_CENTER | DT_BOTTOM); // рисуем текст
        EndPaint(hWnd, &ps); // заканчиваем рисовать
        break;
    case WM_DESTROY: // если окошко закрылось, то:
        PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
        break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
    }
    return NULL; // возвращаем значение
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2016, 23:51
Ответы с готовыми решениями:

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

Как создать дочернее окно при нажатии на кнопку?
Как создать дочернее окно при нажатии на кнопку??? Не получается создать дочернее окно, чтобы оно открывалось при нажатии на кнопку в...

Как закрыть окно с сообщением
Здравствуйте форумчане, здесь возник небольшой вопрос по поводу закрытия простого ShowMessage(''), как сделать это программно, а именно...

17
 Аватар для Ника))
43 / 43 / 20
Регистрация: 08.12.2010
Сообщений: 342
08.01.2016, 16:52
создание button

Пример:
C++
1
2
#define ID_BUTTON_1 3000  // в глобальной области
  HWND hBtn1 = CreateWindowA("BUTTON", "Открыть порт", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 70, 45, 240, 20, hWnd, (HMENU)ID_BUTTON_1, hInstance, NULL);
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
08.01.2016, 16:57
Цитата Сообщение от dpytaylo Посмотреть сообщение
ссылки на хорошие уроки Win32 Api
посмотри здесь
http://www.firststeps.ru/
а вообще классика, книга
Петцольд Ч. "Программирование для Windows 95"
0
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230
09.01.2016, 23:50  [ТС]
---

Добавлено через 2 минуты
А куда этот код пихать? //Я пробовал не получилось может не туда пихал

Вот этот код:
C++
1
2
#define ID_BUTTON_1 3000  // в глобальной области
  HWND hBtn1 = CreateWindowA("BUTTON", "Открыть порт", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 70, 45, 240, 20, hWnd, (HMENU)ID_BUTTON_1, hInstance, NULL);
0
 Аватар для piteriv
1 / 1 / 0
Регистрация: 10.07.2015
Сообщений: 28
10.01.2016, 16:01
В оконной функции напиши так...
C++
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
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HINSTANCE hInstance;
HDC hdc;
PAINTSTRUCT ps;
HWND hBtn1;
switch(msg)
{
case WM_CREATE:
HWND hBtn1 = CreateWindowA("BUTTON", "Открыть порт", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 70, 45, 240, 20, hWnd, (HMENU)ID_BUTTON_1, hInstance, NULL);
break;
case WM_COMMAND:
if(LOWORD(lParam)==ID_BUTTON_1)
MessageBox (hWnd, "Вы нажали на меня", "Сообщение", MB_OK|MB_ICONINFORMATION);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc (hWnd, msg, wParam, lParam);
}
return 0;
}
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
10.01.2016, 16:38
piteriv, а ты уверен, что сработает?
Цитата Сообщение от piteriv Посмотреть сообщение
HWND hBtn1;
и
Цитата Сообщение от piteriv Посмотреть сообщение
HWND hBtn1 = CreateWindowA("BUTTON", "Открыть порт",
0
-3 / 3 / 1
Регистрация: 21.03.2015
Сообщений: 133
10.01.2016, 21:55
Могу посоветовать Щупака (Там всё про оконные приложения)
и рихтера
0
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230
16.01.2016, 16:27  [ТС]
Кто-нибудь дайте пожалуйста ссылку на качку Щупака. А то я только нахожу платные ссылки.
0
-3 / 3 / 1
Регистрация: 21.03.2015
Сообщений: 133
17.01.2016, 20:24
Цитата Сообщение от dpytaylo Посмотреть сообщение
Кто-нибудь дайте пожалуйста ссылку на качку Щупака. А то я только нахожу платные ссылки.
ссылка вырезана
Там же есть примеры
 Комментарий модератора 
Запрещено размещать любые материалы, нарушающие авторские права (без разрешения правообладателя), а также ссылки на них.
0
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230
18.01.2016, 21:38  [ТС]
Почему не показывается ссылка?
1
 Аватар для Ника))
43 / 43 / 20
Регистрация: 08.12.2010
Сообщений: 342
19.01.2016, 18:52
dpytaylo, Возможно потому что правилами форума запрещены ссылки...
0
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230
20.01.2016, 16:26  [ТС]
Извините, если мучаю но ссылка https://www.cyberforum.ru/atta... 1453283342 не открывается (может только у меня)
Дайте (сам текст учебника) в формате pdf(без архива) или в формате doc. Извините что я достал всех на форуме, и я жду ваш ответ. Буду ждать.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
20.01.2016, 17:46
Цитата Сообщение от dpytaylo Посмотреть сообщение
Дайте (сам текст учебника) в формате pdf(без архива) или в формате doc.
правила читать не пробовал? https://www.cyberforum.ru/announcement.php?a=3
п 5.3
Запрещено размещать любые материалы, нарушающие авторские права (без разрешения правообладателя), а также ссылки на них.
не думаю что Юрий Щупак лично выложит здесь книгу
зачем подбивать других на нарушения?
1
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230
20.01.2016, 18:16  [ТС]
И что мне делать? Покидать этот форум?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
20.01.2016, 18:19
Цитата Сообщение от dpytaylo Посмотреть сообщение
И что мне делать?
пойти и купить книгу
0
142 / 20 / 2
Регистрация: 07.01.2016
Сообщений: 230
24.01.2016, 00:46  [ТС]
Тогда последний вопрос: дайте ссылку на хороший сайт где можно качать книги бесплатно (не те сайты где например нужно давать свой номер телефона) И этим ответом я закрою тему(ну если так здесь можно)

0
 Аватар для piteriv
1 / 1 / 0
Регистрация: 10.07.2015
Сообщений: 28
24.01.2016, 20:01
Цитата Сообщение от ValeryS Посмотреть сообщение
HWND hBtn1 = CreateWindowA
Прости, опечатался. Второй указывать структуру ненужно т. е. пиши просто
hBtn1 = CreateWindowA
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
24.01.2016, 21:37
Цитата Сообщение от piteriv Посмотреть сообщение
Второй указывать структуру ненужно т. е. пиши просто
не совсем просто
Цитата Сообщение от piteriv Посмотреть сообщение
HWND hBtn1;
нужно бы статической объявить
C++
1
static HWND hBtn1;
иначе при каждом заходе в функцию будет создаваться новая переменная
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2016, 21:37
Помогаю со студенческими работами здесь

Вывести окно с сообщением после того как закончил вводить текст в Memo, который был выведен в RichEdit
Здравствуйте, ситуация такова. На форме есть кнопки начать и установить шаблон, после нажатия на начать выводит текст в RichEdit. И тип...

RoutedWindow, создать кнопку, закрывающее текущее окно
Нужно создать кнопку, при нажатии на которую, закрывалось бы текущее окно. Хочу сделать при нажатии на кнопку генерировалось бы...

Как убрать окно с сообщением "Обновления для Office готовы к установке, но ."?
При открытии любого файла Office(Аксес, Ворд, Ексель) стало появляться окно с сообщением: &quot;Обновления для Office готовы к установке,...

Вывести окно с сообщением
всем привет, как можно вывести окно с сообщением о том что надо ввести свое имя, если имя не введено, повторно запрашивается? спасибо....

Убрать окно с сообщением о краше
Программа крашается, ошибка: &quot;Прекращена работа программы&quot; Я запускаю всё это в новом потоке, так что осн. часть кода работает, так как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru