Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Egor138
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2

Появление MessageBox

23.08.2013, 13:56. Показов 1651. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему при нажатии на кнопку не появляется MessageBox??? Все работало, когда я в качестве родителя кнопки подставил само окно, а теперь родитель - это GroupBox и MessageBox не выводится. Что не так?

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
#include <Windows.h>
 
#define ID_GROUP_BOX_1 1
#define ID_BUTTON_1    2
#define ID_BUTTON_2    3
 
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
 
    HWND hWnd;
    MSG  uMsg;
 
    WNDCLASSEX mainWin;
    memset(&mainWin, 0, sizeof(WNDCLASSEX));
    mainWin.cbSize = sizeof(mainWin);
    mainWin.hCursor = LoadCursor(NULL, IDC_ARROW);
    mainWin.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    mainWin.lpfnWndProc = WindowProc;
    mainWin.lpszClassName = "FirstClass";
    mainWin.hInstance = hInstance;
    mainWin.style = CS_HREDRAW | CS_VREDRAW;
 
    RegisterClassEx(&mainWin);
 
    if(FindWindow(mainWin.lpszClassName, "My first c++ trainer")!=NULL) 
                    {MessageBox(NULL, "Нельзя запускать больше одного экземпляра приложения",0,0); ExitProcess(0);}
 
    hWnd = CreateWindow(mainWin.lpszClassName, "My first c++ trainer",WS_POPUPWINDOW | WS_CAPTION, 250, 250,400, 300, NULL, NULL, NULL, NULL);
 
    ShowWindow(hWnd, nCmdShow);
 
    while(GetMessage(&uMsg, NULL, 0 ,0))
    {
        TranslateMessage(&uMsg);
        DispatchMessage(&uMsg);
    }
 
 
    return uMsg.wParam;
}
 
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 
    switch (uMsg)
    {
    case WM_CLOSE:
        ExitProcess(0);
        break;
 
    case WM_CREATE: {
        HWND groupBox_hWnd = 
        CreateWindow("BUTTON", "Группа кнопок", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10 ,10, 150, 100, hWnd, (HMENU)ID_GROUP_BOX_1, NULL, NULL);
        CreateWindow("BUTTON", "Верхняя кнопка", WS_CHILD | WS_VISIBLE, 10, 30, 130, 20, groupBox_hWnd, (HMENU)ID_BUTTON_1, NULL, NULL);
        CreateWindow("BUTTON", "Нижняя кнопка", WS_CHILD | WS_VISIBLE, 10, 60, 130, 20, groupBox_hWnd, (HMENU)ID_BUTTON_2, NULL, NULL);
        break;
        }
 
    case WM_COMMAND:
        switch(wParam)
        {
        case ID_BUTTON_1:
            MessageBox(hWnd, "Pushed button 1", "Push", MB_OK);
            break;
 
        case ID_BUTTON_1:
            MessageBox(hWnd, "Pushed button 2", "Push", MB_OK);
            break;
        }
        break;
 
    default:  return DefWindowProc(hWnd, uMsg, wParam, lParam);
        break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2013, 13:56
Ответы с готовыми решениями:

MessageBox: Как сделать так, чтобы если окно модальное, при клике на родительское окно MessageBox мигал?
Здравия всем! Никак не найду нужный MB_*, как можно сделать так, чтобы если сделать MessageBox модальным, при клике по родительскому...

MessageBox
доброе всем время суток ) MessageBox(NULL, _T(&quot;Call to CreateWindow failed!&quot;),_T(&quot;Win32 Guided Tour&quot;), NULL); MessageBox(NULL, ...

MessageBox
Драсте всем, у меня вопрос: MessageBox при MB_OKCANCEL может вернуть bool значение? Ну мол, если человек нажал отмену то... Заранее...

5
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
23.08.2013, 14:30
На сколько мне известно, кнопка созданная со стилем BS_GROUPBOX группирует объекты лишь визуально, поэтому не стоит использовать её как родительское окно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
23.08.2013, 14:31
WM_COMMAND:
Sent when the user selects a command item from a menu, when a control sends a notification message to its parent window
У тебя родитель кнопки кто? GroupBox? Вот в его оконной функции и ищи свои WM_COMMAND-ы. А ты почему-то продолжаешь искать их в функции главного окна.
0
 Аватар для Egor138
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
23.08.2013, 14:34  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
У тебя родитель кнопки кто? GroupBox? Вот в его оконной функции и ищи свои WM_COMMAND-ы. А ты почему-то продолжаешь искать их в функции главного окна.
А каким образов я могу искать эти команды иммено в GroupBox?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
23.08.2013, 14:39
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Переопределить его оконную функцию на свою, в которой будет отслеживание нужных сообщений, ключевое слово для поиска - сабклассинг.

C++
1
2
            DefGroupBoxProc = (WNDPROC)GetWindowLongPtr(groupBox_hWnd, GWLP_WNDPROC);
            SetWindowLongPtr(groupBox_hWnd, GWLP_WNDPROC,(LPARAM)NewGroupBoxProc);
1
 Аватар для Egor138
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
23.08.2013, 14:55  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Переопределить его оконную функцию на свою, в которой будет отслеживание нужных сообщений, ключевое слово для поиска - сабклассинг.

C++
1
2
            DefGroupBoxProc = (WNDPROC)GetWindowLongPtr(groupBox_hWnd, GWLP_WNDPROC);
            SetWindowLongPtr(groupBox_hWnd, GWLP_WNDPROC,(LPARAM)NewGroupBoxProc);

Спасибо, все получилось!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2013, 14:55
Помогаю со студенческими работами здесь

MessageBox
Здравствуйте! Подскажите если не указывать первый параметр и использовать его в классе, почему останавливает программу и не отображается

MessageBox
Задание звучит так. Написать программу которая выводит содержание файла в консоль причем.( Это я сделал) И считывает текст из файла и...

MessageBox с переменными
Скажите, можно ли как то, помимо вывода текста в MessаgeBox через WinAPI перечислять ещё переменные? К примеру мне нужно выводить сообщение...

Функция MessageBox
Здравствуйте, уважаемые форумчане! Начал учиться по Щупаку программировать для windows. Набрал первый пример из книги (ниже привожу...

Ловля MessageBox
Есть такая задача: нужно отлавливать все MessageBox в программе и нажимать определенную кнопку (например, ОК). Подскажите, как это сделать,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru