Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как грамотно перенисти классы, из проекта в проект 
:(
    Опции темы
Dreamer_0x01
Дата 15.8.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Есть класс, унаследованный от диалога, внешний вид которога сделан с помощью редактора ресурсов. Как грамотно переносить такие классы из проекта в проект?
Ведь кроме h и cpp файла надо переносить еще и ресурсы. Которые не разбиты по разным файлам, как классы, а все в одном файле сидят. Я переношу строки из файлов ресурсов вручную. Но уж больно муторно. Может, есть какое-то более простое средство?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Nastya
Дата 16.8.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Если проекты в одном солюшене, то можно в ResourceView просто перетащить мышкой smile я так делала smile


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Dreamer_0x01
Дата 16.8.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Нет, в разных солюшинах. Я делал через буфер обмена - сначала открывал один проект, выделял нужные ресурсы и копировал, а в другой вставлял.А исходники отдельно переносил. Но это хорошо было в случае переноса в "пустой" проект, если же там есть ресурсы, в которых есть элементы с такими же ID, то получались глюки.
Блин, какого хрена они все ресурсы в один файл слепили? smile


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 16.8.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Думаю так
Добавляешь в проект ExtehdingItem два файла *.h и *.cpp этого класса
У тебя будет прописан IDD диалога в *.cpp файле.
Затем добаввляешь диалог.
Для этого открываешь свои ресурсы и другие(откуда берешь) в блокноте
Увидишь такое
Код


IDD_NEWDIALOG1 DIALOGEX 0, 0, 208, 130
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "NewSite"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,7,107,50,16
    PUSHBUTTON      "Cancel",IDCANCEL,151,107,50,16
    EDITTEXT        IDC_EDIT1,7,19,194,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT2,7,49,194,14,ES_AUTOHSCROLL
    LTEXT           "Web address (e.g.,www.your site.com ",IDC_STATIC,7,7,
                    122,8
    LTEXT           "Description (e.g., My Supersite)",IDC_STATIC,7,37,99,8
    PUSHBUTTON      "Select color",IDC_BUTTON1,86,79,97,14
    CONTROL         "",IDC_COLOR,"Static",SS_BLACKRECT | WS_BORDER,19,79,24,
                    14
    GROUPBOX        "Project color",IDC_STATIC,7,67,194,34,BS_CENTER | 
                    BS_FLAT
END

Копипастишь в свои ресурсы..
Должно получится..
Может запары с ID пойдут--подправь...
На всякий случай сделайй копию проекта и с копией попробуй


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Dreamer_0x01
Дата 16.8.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Coocky
Спасибо. то есть получается так, что все равно часть кода придется вручную переносить. Хотя и незначительную.
Кстати.
В ресурсах размер элементов указывается вроде как в пикселах. (Я имею в виду цифры, которые в строке состояния отображаются при выделении элементов). У меня почему-то эти "единицы" не соответствуют реальным размерам в пикселах. Почему такое, не знаешь?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 16.8.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Dreamer_0x01
Цитата
В ресурсах размер элементов указывается вроде как в пикселах

Да, в клиентских координатах
В моем примере высота окна 130, ширина 208
Цитата
У меня почему-то эти "единицы" не соответствуют реальным размерам в пикселах

Это размеры "нарисованого".Если кодом не подгоняешь размер, то все должно быть нормально.
У меня точно совпадают..


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Dreamer_0x01
Дата 16.8.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



А у меня не совпадает. Например, рисую баттон размером 100х50 (в редакторе ресурсов).
Затем четко под ним рисую кнопку, но уже кодом, тоже размером 100х50.

В редакторе ресурсов у меня есть соответствующая надпись. (Извратился с дефолтной кнопкой "ОК").

Код

IDD_REGEDVI_02_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | 
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "RegeDVI_02"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,0,50,100,50 //ВОТ ЭТА КНОПКА
END


А далее в диалоге создаю другую кнопку таким образом:

Код

    CButton *cb=new CButton();
    cb->Create("Button1",WS_VISIBLE,CRect(0,0,100,50),this,0);


В итоге моя кнопка должна быть такая же как и кнопка "ОК" и рисоваться над ней.
Но она рисуется размерамного меньшего, на глаз - это 66.66% от размера кнопки "ОК".
(Точнее, если замерить в фотошопе, моя кнопка рисуется правильно, а вот кнопка ОК получается много больше, чем 100х50 пикселов.)


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
JoyEx
Дата 17.8.2005, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


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

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



Цитата(Dreamer_0x01 @ 16.8.2005, 17:49)
IDD_REGEDVI_02_DIALOG DIALOGEX 0, 0, 320, 200

0,0,320,200 - это диалоговые единицы. См. GetDialogBaseUnits()

Цитата(Dreamer_0x01 @ 15.8.2005, 21:49)
Как грамотно переносить такие классы из проекта в проект?


- В VC6 можно воспользоваться Component Gallery (галерея компонентов), в ней каждый класс хранится отдельно, но самый лучший способ это хранить .cpp, .h где-то в корневом каталоге и задавать к ним относительный путь в остальных проектах, чтобы в случае какойто ошибки не править все .cpp, .h.




--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Dreamer_0x01
Дата 17.8.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Цитата

0,0,320,200 - это диалоговые единицы.

О блин как. Интересно, зачем это сделали...


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Dreamer_0x01
Дата 17.8.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Цитата

См. GetDialogBaseUnits()


Посмотрел. Нашел даже фрмулы для конвертации вида
pixelX = MulDiv( templateunitX, baseunitX, 4 );
pixelY = MulDiv( templateunitY, baseunitY, 8 );

где pixelX и piselY получаю как
Код

    int baseunitsX,baseunitsY;
    LONG temp;
    temp=::GetDialogBaseUnits();
    baseunitsX=temp&0xFFFF;
    baseunitsY=temp>>16;
    int pixelX = MulDiv( 100, baseunitsX, 4 );
    int pixelY = MulDiv( 50, baseunitsY, 8 );


И все равно размеры не совпадают. Думаю, смысл как раз в этих двух формулах с мульдивом.
Кто-нибудь может доступно объяснить, что есть единицы диалога? И как они высчитываются?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
JoyEx
Дата 17.8.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


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

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



Цитата(Dreamer_0x01 @ 17.8.2005, 11:20)
Цитата
0,0,320,200 - это диалоговые единицы.
О блин как. Интересно, зачем это сделали...


чтобы размеры диалога зависили от шрифта диалога


Цитата(Dreamer_0x01 @ 17.8.2005, 12:07)
Посмотрел. Нашел даже фрмулы для конвертации вида
pixelX = MulDiv( templateunitX, baseunitX, 4 );
pixelY = MulDiv( templateunitY, baseunitY, 8 );


Зачем так? Есть же MapDialogRect()



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Dreamer_0x01
Дата 17.8.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



JoyEx

Спасибо! Теперь заработало.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Dreamer_0x01
Дата 18.8.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Coocky

Цитата

Добавляешь в проект ExtehdingItem два файла *.h и *.cpp этого класса
У тебя будет прописан IDD диалога в *.cpp файле.
Затем добаввляешь диалог.
Для этого открываешь свои ресурсы и другие(откуда берешь) в блокноте
Увидишь такое
.........
.......
........
........


Нет, этого недостаточно. Кроме этого, там много ееще параметров, отвечающих за цвета, шрифты и процую лабуду. то есть эти куски тоже копирнуть надо.
Кроме того, надо еще дефайны из старого resourse.h перенести. В общем, тоже весьма муторно.

Я вот как сейчас стал делать.

1. Делаю резерную копию проекта. Думаю, не надо объяснять, почему ;)
2. Копирую в каталог нового проекта .h и .cpp файлы тех классов, которые хочу пененести из старого проекта.
3. В меню "Project"->"Add Existing Item..." в типе файла устанавливаю "Resource Files", выбираю файл "старый проект.rc". Одновременно подгрузится автоматически файл "Старый проект.rc2".
4. В Resource View открываем нужные ресурсы и копипастим нужные нам (Не претаскиваем, а именно копипастим, а то перетащим "насовсем" ;))
5. Удаляем из проекта файлы "Старый проект.rc" и "Старый проет.rc2"
6. В .срр файлах перенесенных классов меняем "#include "Старый проект.h"" на "#include "Новый проект.h""
7. На всякий случай открываем "Resource Simbols" и все там проверяем. У меня все нормально получилось, но как говорится на всякий случай...

Вот вроде бы и все.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 18.8.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Dreamer_0x01
Ну я -то тебе примерно кинул, сам-то никогда не делал полностью переноску..
Уж извини, но я рад что ты сам до всего дошел smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Dreamer_0x01
Дата 18.8.2005, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Coocky
Я просто думал что это такой тривиальный вопрос, что меня тут же закидают мессагами, начинающимися с фразы "Ты будешь смеяться, но делается жто так...."

А оказалось несколько сложнее.


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


 




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


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

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