Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к элементам windows диалога 
:(
    Опции темы
Godfree
Дата 8.3.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Второй вопрос по трабле mfc vs C++. 
Работаю с MS VS 2008.
Создаю по учебнику класс окна, привинчиваю диалог. 
Далее - редактирую диалог в едиторе и естественно файлы resources.h и resources.rc генерятся студией.
Анализирую код и понимаю, что добавление элементов диалога инкапсулировано в классах родителях и если я начну двигаться вверх по дереву, я сломаю мозг.
Вопрос в следующем: можно ли доступаться к элементам диалога (кнопки, листбоксы и т.д.) другим, отличным от GetDlgItem(IDD_XXX) способом. 
Создал в студии чекбокс - в палитре свойств нет параметра состояния чекбокса (т.е. основного его параметра!). Через несколько часов тырканий-мырканий я обнаружил функции (очень даже неявные) которыми можно было считать и записать состояние чекбокса.
При разборе конкретного элемента через интернет или MSDN вижу объект, который можно использовать в чистом C++, но при использовании связки MFC + редактор ресурсов
я не всегда получаю доступ к объектам, которые создаю. Мало того, я даже не знаю где их искать. Когда я добавляю, допустим CListCtrl в свой диалог, то где-то в глубине ООП (вдали от меня) создается объект CListCtrl. Как мне получить доступ конкретно к нему и через оператор "." увидеть методы для этого объекта, а не перебирать всю ту кашу, которую мне выдает VS после операторов ".", "->", "::" ? 
Вспоминая Java - там было все строже - создали объект, доступились к паблик методам и членам даже чисто интуитивно, и они будут работать, так как среда 
предлагает выбрать именно те, с которыми этот объект работает. Очень не хочется писать диалог ручками, а использовать наработанные mfc-классы, но на стыке самогенерирующегося кода и написания своего возникают проблемы. 


Код

// Microsoft Visual C++ generated resource script.
DIALOGPANEL DIALOGEX 0, 0, 347, 237
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "My Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "Default",IDC_DEFAULT,290,23,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,290,40,50,14
    PUSHBUTTON      "OK",IDOK,290,7,50,14
    EDITTEXT        IDC_EDIT,6,16,228,14,ES_AUTOHSCROLL | NOT WS_TABSTOP
    LTEXT           "Line Editor",IDC_STATIC,6,7,34,8
    LISTBOX         IDC_LIST1,6,39,271,191,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END



Описание вижу, а кому эти ресурсы идут на растерзание не могу догнать  smile .
И еще хочу ругнуться на MSDN. Информации много, но бестолково и отрывочно каталогизирована (расположена) - куча рефренов, бестолковая фильтрация и т.д. Фильтрую только по C++, так ведь вывалит и по C# и  Web development. Есть ли альтернатива сему чудесному мануалу, типа "man" в линуксе?

Это сообщение отредактировал(а) Godfree - 8.3.2010, 19:37
PM MAIL   Вверх
bsa
Дата 8.3.2010, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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




 ! 
bsa
Для своих вопросов создавай отдельные темы. И делай это на форуме, а не в разделе статьи!

PM   Вверх
Godfree
Дата 8.3.2010, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так как же получить доступ?  smile 
В MSDN написано 

Код

//Insert the string or object at the desired point in the list with the Insert method: 
//C++  Copy Code
 
myListBox->Items->Insert(0, "Copenhagen");


Каким образом мне получить, ну, скажем в обработчике кнопки этот самый checkedListBox1, у которого есть дитятко Items с методом Insert?

Код

void CMyDialog::OnOK() 

ListBox myListBox;
myListBox->Items->Insert(0, "Copenhagen");



Это не прокатывает...  smile 

Это сообщение отредактировал(а) Godfree - 9.3.2010, 02:09
PM MAIL   Вверх
Earnest
Дата 9.3.2010, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Godfree, учебник неплохо бы до конца долистать. По твоим претензиям видно человека, испорченного слишком интегрированными ИДЕ и прочими бейсиками. Но здесь вам не тут. На самом деле виндоус устроена совсем не так, как тебе показывают бейсиковые среды. Нет там никаких свойств  и даже с объектами не очень. Окна, да, есть. И сообщения для доступам к ним. Все. Остальное - обман и томление духа. smile 
Когда ты на форму кладешь лист-контрол, не создается никакого CListCtrl, а создается контрол класса лист-вью, доступный для ощущений в виде своего HWND. А CListCtrl - это мирах, тонкая-претонкая обертка вокруг это HWND. И все в таком духе.
Чтобы доступиться до лист-контрола в виде указателя на CLictCtrl есть 2 способа: 1) GetDlgItem + приведение к CListCtrl 2) завести объект класса CListCtrl самому (и хранить его в диалоге) и сделать подстановку в DoDataExchange (DDX_Control)
 


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


 




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


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

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