Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
1

Почему может не работать обработчик события?

21.05.2016, 19:39. Показов 1700. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, почему в моем коде не срабатывает обработчик?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CREATE:
        {
            CreateWindow(TEXT("button"), TEXT("Моделировать"),
                WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 120, 300, 20, hWnd, (HMENU)IDB_Button1,
                NULL, NULL);
 
            case WM_COMMAND:
            {
                if (LOWORD(wParam) == IDB_Button1)
                {
                    MessageBox(hWnd, L"Сообщение", L"окно", MB_ICONINFORMATION);
                }
 
                break;
            }
        }
    }
    return NULL;
}
Миниатюры
Почему может не работать обработчик события?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2016, 19:39
Ответы с готовыми решениями:

Почему когда я вешаю обработчик события на ячейку и этот обработчик срабатывает, то оказывается, он сработал совершенно для ДРУГОЙ ячейки?
Да, почему? Скропаем DataGridView; кинем на форму listBox2 и listBox1 и напишем такой обработчик...

Почему обработчик события формы 2 отрабатывает и на первой?
Есть 2 формы - main и bd_master. форма bd_master открывается из main вот так: bd_master...

Почему когда изменяется значение ячейки DataGridView, то не вызывается обработчик события CellValueChanged?
Всё предельно просто. Скропаем таблицу dataGridView1 из двух столбцов. Первый стоблбец пусть будет...

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

6
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,715
21.05.2016, 19:45 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
switch (uMsg)
    {
        case WM_CREATE:
        {
            CreateWindow(TEXT("button"), TEXT("Моделировать"),
                WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 120, 300, 20, hWnd, (HMENU)IDB_Button1,
                NULL, NULL);
            break;
         }
         case WM_COMMAND:
         {
                if (LOWORD(wParam) == IDB_Button1)
                {
                    MessageBox(hWnd, L"Сообщение", L"окно", MB_ICONINFORMATION);
                    return 0;
                }
                break;
        }
    }
1
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
21.05.2016, 19:46 3
warning на строку 3 в вашем файле - что там? опечатка?
1
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
22.05.2016, 13:39  [ТС] 4
retmas, вот весь код из файла:
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include < windows.h > // заголовочный файл, содержащий WINAPI
#define IDB_Button1
wchar_t mainMessage[] = L "\r\n Промоделировать прямолинейное равноускоренное движение тела с начальной скоростью v0. \r\n В процессе движения тело прошло путь s. Получить зависимость ускорения от времени движения. \r\n Ускорение свободного падения g=9.8 \r\n Начальная скорость v=0. \r\r\ Введите время t/сек:"; // строка с сообщением
 
// Прототип функции обработки сообщений с пользовательским названием:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
// Управляющая функция:
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 "Вариант 16. Рязанов И.И.", // имя окошка (то что сверху)
        WS_OVERLAPPEDWINDOW, // стили через | отображения окошка
        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, DT_WORDBREAK | DT_LEFT | DT_TOP); // рисуем текст
            EndPaint(hWnd, & ps); // заканчиваем рисовать
            break;
        case WM_DESTROY: // если окошко закрылось, то:
            PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
            break;
        case WM_CREATE:
            CreateWindow(TEXT("edit"), TEXT("0"),
                WS_VISIBLE | WS_CHILD | WS_BORDER,
                10, 120, 30, 20,
                hWnd, (HMENU) 1, NULL, NULL
            );
            CreateWindow(TEXT("button"), TEXT("Моделировать"),
                WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                100, 120, 300, 20,
                hWnd, (HMENU) IDB_Button1, NULL, NULL
            );
            break;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDB_Button1) {
                MessageBox(hWnd, L "Сообщение", L "окно", MB_ICONINFORMATION);
                return 0;
            }
            break;
        default:
            return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
    }
    return NULL; // возвращаем значение
}
Ошибки, которые к сожалению не удается исправить:
Миниатюры
Почему может не работать обработчик события?  
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
22.05.2016, 13:43 5
C++
1
wchar_t mainMessage[] = L"..."; // L слитно с кавычками. тут и везде далее
Добавлено через 48 секунд
для TCHAR скорее всего понадобится #include <tchar.h>
1
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
22.05.2016, 13:53  [ТС] 6
retmas, пробелы убрал, но теперь отображаются те же самые ошибки, какие были в моем первом сообщении:
Миниатюры
Почему может не работать обработчик события?  
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,715
22.05.2016, 18:08 7
Лучший ответ Сообщение было отмечено Vadim_Lasso как решение

Решение

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include < windows.h > // заголовочный файл, содержащий WINAPI
#define IDB_Button1 1000
char mainMessage[] = "\r\n Промоделировать прямолинейное равноускоренное движение тела с начальной скоростью v0. "
    "\r\n В процессе движения тело прошло путь s. "
    "Получить зависимость ускорения от времени движения. "
    "\r\n Ускорение свободного падения g=9.8 "
    "\r\n Начальная скорость v=0. \r\r Введите время t/сек:"; // строка с сообщением
 
// Прототип функции обработки сообщений с пользовательским названием:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
// Управляющая функция:
int WINAPI WinMain(HINSTANCE hInst, // дескриптор экземпляра приложения
    HINSTANCE hPrevInst, // не используем
    LPSTR lpCmdLine, // не используем
    int nCmdShow) // режим отображения окошка
{
    TCHAR szClassName[] = "Мой класс"; // строка с именем класса
    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, "Не получилось зарегистрировать класс!", "Ошибка", MB_OK);
        return NULL; // возвращаем, следовательно, выходим из WinMain
    }
    // Функция, создающая окошко:
    hMainWnd = CreateWindow(
        szClassName, // имя класса
        "Вариант 16. Рязанов И.И.", // имя окошка (то что сверху)
        WS_OVERLAPPEDWINDOW, // стили через | отображения окошка
        CW_USEDEFAULT, // позиция окошка по оси х
        NULL, // позиция окошка по оси у (раз дефолт в х, то писать не нужно)
        CW_USEDEFAULT, // ширина окошка
        NULL, // высота окошка (раз дефолт в ширине, то писать не нужно)
        (HWND) NULL, // дескриптор родительского окна
        NULL, // дескриптор меню
        HINSTANCE(hInst), // дескриптор экземпляра приложения
        NULL
    ); // ничего не передаём из WndProc
    if (!hMainWnd) {
        // в случае некорректного создания окошка (неверные параметры и тп):
        MessageBox(NULL, "Не получилось создать окно!", "Ошибка", 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, DT_WORDBREAK | DT_LEFT | DT_TOP); // рисуем текст
            EndPaint(hWnd, & ps); // заканчиваем рисовать
            break;
        case WM_DESTROY: // если окошко закрылось, то:
            PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
            break;
        case WM_CREATE:
            CreateWindow(TEXT("edit"), TEXT("0"),
                WS_VISIBLE | WS_CHILD | WS_BORDER,
                10, 120, 30, 20,
                hWnd, (HMENU) 1, NULL, NULL
            );
            CreateWindow(TEXT("button"), TEXT("Моделировать"),
                WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                100, 120, 300, 20,
                hWnd, (HMENU) IDB_Button1, NULL, NULL
            );
            break;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDB_Button1) {
                MessageBox(hWnd, "Сообщение", "окно", MB_ICONINFORMATION);
                return 0;
            }
            break;
        default:
            break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
    //return NULL; // возвращаем значение
}
И отмените использование уникода в свойствах проекта
0
22.05.2016, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2016, 18:08
Помогаю со студенческими работами здесь

Почему может не работать
string s; StreamReader str = new StreamReader(fil); while ((s =...

Почему может не работать с++?
решил изучить С++. попытался скачать Microsoft Visual Studio. не с одного ресурса качал, но всегда...

Почему может не работать?
На этапе редактирования внешнего вида кнопок и самой формы, столкнулась вот с такой проблемой....

Почему может не работать дисковод?
чого може неробити дісковод

Почему может не работать деструктор?
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class Person { private: char*...

почему может не работать код ?
Label10-&gt;Font-&gt;Style &lt;&lt;fsUnderline &lt;&lt;fsBold ; ошибок никаких не выдает...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru