Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по изменению afx_msg - обработчиков. 
V
    Опции темы
AndreySol
Дата 2.2.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



При добавлении через Wizard обработчиков для пунктов меню они обычно помещаются в раздел хедера "protected:" и в секцию
Код

// Generated message map functions
//{{AFX_MSG(CThisClass)
.............
//}}AFX_MSG

и вроде как не рекомендуется их изменение вручную. Или я не прав ? Мне нужно просто изменить
Код

afx_msg void OnItem_Delete();

на
Код

afx_msg void OnItem_Delete(int iItemIndex = -1);

Корректно ли это ?

PM MAIL   Вверх
Earnest
Дата 2.2.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Само-по себе слово afx_msg не значит ровно ничего - это чисто для крастоты. Вроде как показывает "это обработчик". Ты можешь переставлять обработчики в любую секцию: public\private и плевать на скобки типа //{{AFX_MSG(CThisClass) - это только для визарда.
Но вот сигнатуру обработчика менять нельзя: вызов поломается или просто не скомпилируется.

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




--------------------
...
PM   Вверх
AndreySol
Дата 2.2.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



Ага, ясненько.
Спасибо за разъяснение.
PM MAIL   Вверх
Nuzur
Дата 2.2.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Earnest, можна менять сигнатуру, просто нужно и в .h .cpp поменять и все будет нормально, сам недавно так делал.
А вот почему если //{{AFX_MSG(CThisClass) ничего не значит мелкомягкие пишут:

Handlers for Message-Map Ranges
Код

In the .H file, add your handler function declaration outside the //{{AFX_MSG comment brackets. The following code shows how this might look, as shown in the next-to-last line below:

// Generated message-map functions
protected:
    //{{AFX_MSG(CMyApp)   
        ...
    //}}AFX_MSG
    afx_msg void OnDoSomething( UINT nID );
    DECLARE_MESSAGE_MAP()

...



--------------------
Never again...
PM MAIL   Вверх
Earnest
Дата 2.2.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Nuzur, если так сделаешь, обработчики будут вызываться некорректно, т.к. вызов хандлера всегда подразумевает конкретную сигнатуру. Причем в 2003 и выше даже не скомпилируется (строка ON_XXX). А в 6-й студии скомпилируется, и в дебаге, возможно, иногда будет работать, а в релизи - падать.


--------------------
...
PM   Вверх
AndreySol
Дата 4.2.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



Ясно, Всем спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0959 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.