7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
1

Не ловит сообщения

27.03.2018, 14:36. Показов 2098. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Подскажите пожалуйста. У меня есть проект mfc. Если я создаю элемент управления (например дерево CTreectrl), с помощью Мастера, то сообщения (например ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CShowProject::OnTcnSelchangeTab1) отлавливается нормально, а если создаю с помощью Create то не одно сообщение не ловится! Как мне решить эту проблему?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2018, 14:36
Ответы с готовыми решениями:

Не ловит Exception а NumberFormatException ловит
Добрый день. Метод проверяющий строку на только цифры(работает): public boolean isNumber(String s)...

Iphone 6 не ловит Wi-Fi в другой комнате, а другой Iphone 5 ловит
Здравствуйте! Помогите, пожалуйста с проблемой. Iphone 6 ловит wi-fi только в комнате с роутером,...

Телефон не ловит 3G
На прошлой неделе взял LG Spirit. Заодно симку билайновскую с 20 ГБ интернета. 3G почему-то не...

Не ловит exception
Почему не ловится range error? #include <iostream> #include <stdexcept> #include <string> ...

18
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
27.03.2018, 17:36 2
Можно динамически создавать элементы и ловить их сообщения. Если не работает, то что-то не то делаете. Например, стили нужные не проставили, родителя не того задали, ID элемента не верно указали, не те сообщения ловите.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
28.03.2018, 19:05  [ТС] 3
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
CTreeDlg::CTreeDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CTreeDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CTreeDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CTreeDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_NOTIFY(TVN_SELCHANGED, ID_MYTREE, &CTreeDlg::OnTvnSelchangedTree1)
    ON_WM_CREATE()
END_MESSAGE_MAP()
 
 
// обработчики сообщений CTreeDlg
 
BOOL CTreeDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Добавление пункта "О программе..." в системное меню.
 
    // IDM_ABOUTBOX должен быть в пределах системной команды.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // Задает значок для этого диалогового окна. Среда делает это автоматически,
    //  если главное окно приложения не является диалоговым
    SetIcon(m_hIcon, TRUE);         // Крупный значок
    SetIcon(m_hIcon, FALSE);        // Мелкий значок
 
    // TODO: добавьте дополнительную инициализацию
 
    return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}
 
void CTreeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}
 
// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.
 
void CTreeDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // контекст устройства для рисования
 
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
        // Выравнивание значка по центру клиентского прямоугольника
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Нарисуйте значок
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
 
// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR CTreeDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}
 
 
void CTreeDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    // TODO: Add your control notification handler code here
    *pResult = 0;
}
 
int CTreeDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;
     m_Tree.Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER
      | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES
      | TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_EDITLABELS,
      CRect(10, 10, 300, 100), this, ID_MYTREE);
     m_Tree.InsertItem("Test1");
      m_Tree.InsertItem("Test2");
    // TODO:  Add your specialized creation code here
 
    return 0;
}
вот код и он не отлавливается
0
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
28.03.2018, 19:43 4
Попробуйте перенести создание своего дерева из OnCreate в OnInitDialog.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
30.03.2018, 10:07  [ТС] 5
Не помогло. Не кто не сталкивался с такой проблемой?
0
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
30.03.2018, 12:10 6
Цитата Сообщение от Sierra26 Посмотреть сообщение
Не помогло
Прежде чем написать, я проверил. Сделал тестовый проект с диалогом, добавил одно дерево стандартно, второе дерево динамически. Добавил событие аналогичное вашему для стандартного элемента через проперти. Изменил в messagemap ID стандартного контрола на ID динамического. Всё работало и сообщения для динамического контрола ловились при вышеуказанных условиях.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
30.03.2018, 12:37  [ТС] 7
А через Spy++ сообщения приходят?
0
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
30.03.2018, 12:52 8
Смотреть сообщения через Spy для проверки как-то даже в голову не пришло, гораздо быстрее и проще было просто поставить брекпоинт внутри функции.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
30.03.2018, 13:20  [ТС] 9
На брекпоинт он не входит. И в Spy++ сообщения не доходят
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
31.03.2018, 17:50 10
unicode- и non-unicode версии проекта могут работать по-разному.
Цитата Сообщение от Sierra26 Посмотреть сообщение
m_Tree.InsertItem("Test1");
m_Tree.InsertItem("Test2");
Судя по этим строкам, Sierra26 не использует unicode.
Цитата Сообщение от Ygg Посмотреть сообщение
Всё работало и сообщения для динамического контрола ловились
Ygg, у тебя есть unicode ?

Сейчас я попробовал на vs2008 и windows7. Если mfc проект с использованием unicode - все нормально. Если не использует unicode - не удается поймать уведомления TVN_SELCHANGED от дерева.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
31.03.2018, 18:08 11
Цитата Сообщение от Sierra26 Посмотреть сообщение
И в Spy++ сообщения не доходят
Sierra26, как ты определил, что в Spy++ не приходит? Сообщение здесь WM_NOTIFY. Параметр lParam это указатель на структуру, которая содержит код уведомления.
Миниатюры
Не ловит сообщения  
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
31.03.2018, 21:01  [ТС] 12
Не знал. Так не кто не знает как решить проблему. Использую не unicode.
0
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
01.04.2018, 11:19 13
Проект на VS-2005. Всё работает без юникода, как и в более поздних версиях VS.
Вложения
Тип файла: zip mfc.zip (121.3 Кб, 3 просмотров)
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
02.04.2018, 10:09  [ТС] 14
Ygg ваш проект работает и у меня. Буду разбираться. Спасибо
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
03.04.2018, 11:46  [ТС] 15
К сожаления не смог разобраться. Может у вас получится сделать что-то с моим проектом. Буду очень благодарен
Вложения
Тип файла: zip Tree.zip (6.71 Мб, 3 просмотров)
0
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
03.04.2018, 12:12 16
Идентификаторы контролов передаются WORD-ом, соответственно ограничены значением 0xFFFF (65535)
C++
1
2
//# define ID_MYTREE  66666
# define ID_MYTREE  1666
1
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
03.04.2018, 12:34  [ТС] 17
Это не решило проблему. Но узнал что-то новое. Спасибо
0
2518 / 851 / 320
Регистрация: 10.02.2018
Сообщений: 1,997
03.04.2018, 12:55 18
Лучший ответ Сообщение было отмечено Sierra26 как решение

Решение

Цитата Сообщение от Sierra26 Посмотреть сообщение
Это не решило проблему. Но узнал что-то новое. Спасибо
Вот как же так получается? У меня решило, у вас не решило. Заменил ID и сообщения стали ловиться.
1
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
03.04.2018, 14:37  [ТС] 19
Извиняюсь. Моя не внимательность. Все получилась проблема была в ID_MYTREE 66666. Спасибо огромное
1
03.04.2018, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2018, 14:37
Помогаю со студенческими работами здесь

не ловит Яндекс
Здравствуйте! У меня к вам такой вопрос, есть довольно молодой сайт, но уже пойманный гуглом и...

Процессор ловит КЗ
Всем привет, случай такой когда устанавливал новый кулер видимо повредил проц, но он работал месяца...

Почему то не ловит 3G
Вообщем у меня такая беда,пользуюсь 3G модемом Связной(Мегафон)и у меня не ловит 3G только EDGE...

Компьютер ловит фриз
Здравствуйте. Сегодня купил новую мат.плату и процессор, а оперативную память вставил из старого...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

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