Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 514
от 04.09.2006, 05:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 371, Экспертов: 54
В номере:Вопросов: 2, Ответов: 5


Вопрос № 53608: Здравствуйте эксперты! Пытаюсь отрисовать пункты меню сам. Не получается, VC пишет вот такие ошибки: 1) error LNK2001: unresolved external symbol "public: virtual void __thiscall CTrayMenu::DrawItem(struct tagDRAWITEMSTRUCT *)" (?Dr...
Вопрос № 53641: Добрый день, уважаемые эксперты! Возник вопрос по С++ Buider 6.0. Не совсем понятно как правильно подключать модули, написанные на С. При создании нового приложения я могу выбрать Новую форму на С++ или, например, создать приложение на С. Предпол...

Вопрос № 53.608
Здравствуйте эксперты!
Пытаюсь отрисовать пункты меню сам. Не получается, VC пишет вот такие ошибки:
1) error LNK2001: unresolved external symbol "public: virtual void __thiscall CTrayMenu::DrawItem(struct tagDRAWITEMSTRUCT *)" (?DrawItem@CTrayMenu@@UAEXPAUtagDRAWITEMSTRUCT@@@Z)
2) fatal error LNK1120: 1 unresolved externals

Класс CTrayMenu - производный от CMenu. Вот описание функции в CTrayMenu.h:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
А вот её определение в CTrayMenu.cpp:
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.SetTextColor(RGB(45, 233, 90));
dc.DrawText((LPSTR)lpDrawItemStruct->itemData, -1, CRect(lpDrawItemStruct->rcItem), DT_LEFT);
dc.Detach();
}
И еще небольшой вопросик: как мне указать у меню стиль (меню создается не из ресурсов, а в коде) OWNER_DRAW? Необходимо просто у каждого элемента при создании в его стилях это указывать? Подскажите пожалуйста, в чем тут дело?
Заранее спасибо.
Отправлен: 29.08.2006, 09:38
Вопрос задал: Saw (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: dentist
Здравствуйте, Saw!
Осмелюсь предположить, что вы обращаетесь к члену класса который описан в сторонней библиотеке или файле не включённом в проект.
я в таких случаях обычно "рисовал" некий API с (при необходимости) мэнеджером раздаваемых либой "ресурсов". Это самый простой вариант если отделение определённых классов от основного проекта обосновано и я правильно понял суть проблемы ;)
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 2-ой класс)
Ответ отправлен: 29.08.2006, 09:50

Отвечает: Mihasic
Здравствуйте, Saw!
CTrayMenu::DrawItem, а не просто DrawItem в cpp файле... обычно на это могли еще и warning'и быть, но Вы не используете this (как явно, так и неявно), поэтому ругательств не было при компиляции до сборки.
Ответ отправил: Mihasic (статус: 6-ой класс)
Ответ отправлен: 29.08.2006, 11:17

Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Всё проще. Вы описываете метод так:

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

а реализуете вот так:

void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

Найдите ё отличие ^_^ Уже нашли? Если нет - посмотрите на слово virtual.

Вы описали одну фунцию (виртуальную), а реализовали совсем другую (не виртуальную). Вот ликовщик и ругается, он не может найти реализацию нужной ему функции. Про стили меню ничего не скажу - давно под винды не писал.
Ответ отправил: Шинтяков Дмитрий Васильевич / Ratson (статус: 2-ой класс)
Ответ отправлен: 29.08.2006, 14:05


Вопрос № 53.641
Добрый день, уважаемые эксперты!
Возник вопрос по С++ Buider 6.0. Не совсем понятно как правильно подключать модули, написанные на С. При создании нового приложения я могу выбрать Новую форму на С++ или, например, создать приложение на С. Предположим, я хочу в свой проект добавить именно то, что будет написано на С. И выполняться сие должно по нажатию какой-то кнопочки на форме приложения С++ Builder. Как правильно подключить такой модуль, написанный на С?
Спасибо за ответ!!!!
P.S. Не нашел ничего по С++ Builder здесь. По Делфи есть..Может подскажете, есть ли такое, а то кажется что не в ту тему задаю вопрос..Хотя и в С/С++
Отправлен: 29.08.2006, 14:21
Вопрос задал: Joe Black (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: EPDSota
Здравствуйте, Joe Black!

Включить файл написанный на С в проект можно так-же, как и заголовочный файл, т.е. просто написать в своей программе:

Приложение:

---------
Открыть глаза навстречу солнцу

Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 29.08.2006, 14:34

Отвечает: Santana
Здравствуйте, Joe Black!
если исходники то по моему так #include "ИмяМодуля.с"
Ответ отправил: Santana (статус: 6-ой класс)
Ответ отправлен: 29.08.2006, 14:36


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное