![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| devmstr |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 28.4.2004 Где: Ukraine Репутация: нет Всего: 11 |
Я решил создать класс, который позволил бы мне без излишний проблем использовать ListView в качестве компонента для работы с таблицами. Класс я уже почти написал. Но тут появилась одна проблема.
Для реализации возможности редактирования я использую Edit, который при щелчке мышкой по item'у ListView появляется на соответствующем месте. Для этого я заменил очередь обработки сообщений ListView на свою, использую SetWindowLong. Все бы ничего, но свою функцию мне пришлось в классе объявить как static(чтобы узбавится от 5-го параметра функции - this). Это и спровоцировало осовную проблему. Раз метод статик, то подавай и все используемые переменные и методы в функции как static. Особенно меня раздражает необходимость в их инициализации вне класса(как по другому я не знаю). Да и вообще "красить" весь класс в static из-за одной функции мне бы не хотелось. Помогите мне, пожайлуста, советом, как мне решить возникшую проблему... -------------------- Think different ©Steve Jobs ![]() |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
| devmstr |
|
||||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 28.4.2004 Где: Ukraine Репутация: нет Всего: 11 |
Каждой функции класса по умолчанию передается this. Если просто написать что-то ввиде: h-файл(Объявление класса):
cpp:
то VS это не оценит и ругнется в функции SetWindowLong на LVMngDlgProc. Откуда он знает, что ему делать с this. Главное же отличие static методов от других, состоит в том, что this им не передается. Что для OldLVProc и требовалось. Это сообщение отредактировал(а) devmstr - 29.11.2006, 08:37 -------------------- Think different ©Steve Jobs ![]() |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
используй шаблоны и оконные свойства:
сответственно, свойство GWL_USERDATA нужно при инициализации установить в соответствующий указатель объекта класса, а в SetWindowLong(hLV, GWL_WNDPROC,...) указать конкретную реализацию шаблона LVMngDlgProc. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
ну... это скорее одно из следствий, нежели "главное отличие"... а что мешает передать this через одно статическое свойство? все равно, я так понял, у тебя экземпляр единственный(если ты уже на пол-пути покрыть все статиком
ps. думаю, есть еще кучка вариантов много покрасивше, но в голову чтой-то не "йдут"... |
||||
|
|||||
| devmstr |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 28.4.2004 Где: Ukraine Репутация: нет Всего: 11 |
Основное место, где меня сипает
Не хочется мне ничего инициализировать вне класса. Тем более желание попользоватся моим классом есть не только у меня, а "подчеркивать" о том, что обязательно не забудьте инициализировать переменную мне не хочется. GremlinProg Ээ. Ну с шаблонами у меня пока туго, каюсь. А мона как-то без них? -------------------- Think different ©Steve Jobs ![]() |
|||
|
||||
| devmstr |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 28.4.2004 Где: Ukraine Репутация: нет Всего: 11 |
Все, проблема решилась. SetWindowLong rules.
GremlinProg, особое спасибо за идею... -------------------- Think different ©Steve Jobs ![]() |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |