Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Стандартное SDI приложение + DialogBox


Автор: v2v 26.3.2007, 20:22
Создаю стандартноe SDI  MFC приложение с помощью VS2005 .

Можно ли каким то образом вместо документа, который создаётся  подсунуть мой дайлог бокс из ресурсов? Если да, то как?)

Автор: Greeen 26.3.2007, 21:25
Не совсем понял что значит 
Цитата(v2v @  26.3.2007,  20:22 Найти цитируемый пост)
вместо документа, который создаётся  подсунуть мой дайлог бокс

но чувствую, что тебе поможет CFormView

Автор: Earnest 27.3.2007, 07:54
Или, если тебе не нужен документ вообще, может расмотреть приложение на основе диалогового окна? Тебе точно нужно SDI?

Автор: v2v 27.3.2007, 14:19
Что - то  у меня не получается в приложении на основе диалога создать тулбар CDialogBar. 
Делаю так же как в sdi: http://forum.vingrad.ru/topic-142989.html# .

Автор: Earnest 27.3.2007, 14:59
Ну, вообще говоря, к диалогу можно прилепить панель, но только жестко придоченную, без перемещения и ресайза. Да и то не без геморроя. Это потому, что окончательную доводку панели напильником производит CFrameWnd, коим диалог не является. С другой стороны, если тебя устраивает жестко прибитая панель, никто не мешает создать просто дочерний диалог, с помощью Create. Выглядеть будет точно так же. А обработку его уведомлений в любом случае руками писать нужно, т.к., как уже было сказано, родительский диалог - не CFrameWnd.

Автор: v2v 27.3.2007, 18:24
Есть два диалог бокса..
Я из одного пітаюсь получить доступ к контролам второго с помошью функции: GetDlgItem(идентификатор,буфер).
Но у меня ошибка "Идентификатор не найден".... Я делаю не правильно... А как правильно?

Автор: zkv 27.3.2007, 22:51
Цитата(v2v @  27.3.2007,  18:24 Найти цитируемый пост)
GetDlgItem(идентификатор,буфер)

какой еще буфер?  smile 
Цитата(v2v @  27.3.2007,  18:24 Найти цитируемый пост)
Но у меня ошибка "Идентификатор не найден"

странно, на этапе компиляции не должно быть ошибки в любом случае, если идентификатор реальный. 
Цитата(v2v @  27.3.2007,  18:24 Найти цитируемый пост)
А как правильно? 

Вообщем предлагаю вам поступить так:

1. В редакторе ресурсов добавляем и рисуем диалог, даем какой-нить осмысленный идентификатор (необязательно, для собственного удобства)
2. В редакторе ресурсов правой мышью по только что отрисованному диалогу -> Add class (на базе CDialog) далее его буду называть CSecDialog
3. Теперь повторяем: 
         Опять в редакторе правой мышью по контролу нового диалога -> Add variable (тип - control) 
    (Пока не кончатся контролы, которым требуется управление)
4. Теперь лезем в первый (главный) диалог, в членах класса создаем указатель типа CSecDialog *m_dlgSec; Хотя можно и не указатель а сразу объект.
5. Теперь думаем в каком месте вызвать второй диалог. Если хотим, чтобы он жил вместе с главным от начала и до конца, то делаем это в методе OnInitDialog(). Выделяем память под указатель, вызываем метод Create(), в качестве ID подсовываем наш осмысленный из пункта 1. В качестве указателя на родителя подсоваваем this.
6. Теперь радуемся как все замечательно управляется. Управление контролом второго диалога примерно такое: m_dlgSec->m_myControl.DoSomething();

Вроде ничего не пропустил, но всякое бывает. Удачи!
Да, все действия описаны под 2003 студию.

PS не забываем освобождать память, после того как она больше не нужна.

Автор: Earnest 28.3.2007, 07:44
v2v, 
pSecondDialog->GetDlgItem(...)
Ты так делаешь? Или просто GetDlgItem?

Автор: v2v 30.3.2007, 16:23
ок! спасибо.

 А как добавить на форму (CformView)  диалог бокс с ресурсов?? Такое впринципе возможно?

Автор: Earnest 30.3.2007, 18:56
Что значит 
Цитата

добавить на форму (CformView)  диалог бокс с ресурсов

?
Сделать дочернюю диалоговую панель? Так просто создай дочерний диалог в нужном месте и парентом =formview.
Или создать форм-вью согласно нарисованному диалогу? Так этот ресурс в конструктор передается... 

Автор: v2v 2.4.2007, 16:12
Как заставить контрол (кнопку) "приклеится" к правому краю окна и двигатся с ним не меняя размера.
Это желательно сделать при создании, поскольку таких контролов много и за каждым следить - перерисовывать не подходит...
Должно же быть что то похожее CBRS_ALIGN_RIGHT, но не для тулбаров, а для обычных controls.

Автор: Earnest 2.4.2007, 16:38
Цитата(v2v @  2.4.2007,  17:12 Найти цитируемый пост)
Должно же быть что то похожее CBRS_ALIGN_RIGHT, но не для тулбаров, а для обычных controls

Все бы вам готовенькое... Не должно и нет, в MFC, по крайней мере. Но нужное поведение реализуется просто. Посмотри сюда:
http://forum.vingrad.ru/topic-139526/hl/cautoresizedlg/index.html

Автор: v2v 2.4.2007, 17:11

сложноватый код(как для новичка мфц) ...а можно тогда каким то образом сгрупировать ( они у меня все в одной области окна будут находится) и управлять только этим сгруппированным контролом.

Group Box?? а как добавлять к нему элементы, что бы при его смещении все дочерние тоже смещались...

Автор: Earnest 2.4.2007, 18:23
Будешь бояться сложного кода, программистом тебе не бывать.  smile 
Да и нет там ничего сложного.
Разберешься. На этой основе можешь сделать свой вариант, как тебе нравится.
Будут конкретные вопросы - задавай. А желание получить разжеванную кашку где-то понимаю, но не уважаю. smile  smile  smile 

Автор: v2v 2.4.2007, 18:53
ладно ладно .. жвачек мне пожованных не надо))..
вы мне направление дайте куда двигаться, просто не хотелось бы влазить в тот код, так как я не уверен нужно ли оно мне на самом деле..... так что там на счёт Груп Бокса???

Автор: Earnest 2.4.2007, 19:36
Цитата(v2v @  2.4.2007,  19:53 Найти цитируемый пост)
так что там на счёт Груп Бокса??? 

бесперспективно

Добавлено через 1 минуту и 22 секунды
В приведенном примере кода показывается как управлять всеми контролами, не вдаваясь в подробности конкретного окна.

Автор: v2v 3.4.2007, 21:14
Код

В приведенном примере кода показывается как управлять всеми контролами, не вдаваясь в подробности конкретного окна. 

так он немного не то делает, как мне надо, ну ладно буду подганять для себя)

Автор: Earnest 4.4.2007, 08:02
Ну естественно, задача немного другая, но похожая.

Автор: dizzy1984 13.4.2007, 21:55
Еще по поводу мэнэджеров расположения можно посмотреть
codeguru и codeproject. Я использовал конкретно http://www.codeproject.com/dialog/layoutmgr.asp и мне очень понравилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)