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

Инвестиции: Вопрос-Ответ

  Все выпуски  

C/C++ Вопрос-Ответ Выпуск № 25


Информационный Канал Subscribe.Ru

C/C++ Вопрос-Ответ

Выпуск      : 25
Подписчиков : 1932
Cайт        : SoftMaker.com.ru
Архив       : C/C++ Вопрос-Ответ (архив)
В этом выпуске
От ведущего

Здравствуйте уважаемые подписчики !

Как всегда, рад приветствовть вас на страницах этой рассылки.
Напоминаю, что, как обычно, вы можете отправить свои пожелания (замечания, предложения, сообщения об ошибках) по поводу рассылки и сайта по этому адресу.
Если вы хотите создать и вести какой либо раздел в этой рассылке - также пишите мне.

И, как всегда, вы можете задать свои вопросы по программированию на сайте в форуме.
Или обсудить их в дискуссионном листе "Программирование. форум !!!".

Многим может быть также интересна рассылка: Visual С++ - расширенное программирование, где можно прочитать описания нестандартных приемов программирования с помощъю библиотеки MFC - 'трюков', 'хаков', недокументированных функций.

С уважением, Вахтуров Виктор.

Подписчикам

Чтобы заранее разрешить возможные недоразумения, прошу Вас помнить, что вопросы публикуются в рассылке только один раз. Поэтому, если Вам не ответили в этом выпуске, или ваш вопрос не был опубликован, пришлите его еще раз. Не стоит отвечать на вопрос, который был задан в предыдущем выпуске (за исключением случая, когда он снова опубликован в этом).

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

Небольшое примечание. Господа, если Вы хотите, чтобы Ваш e-mail был опубликован в рассылке, специально и явно укажите это в письме. Иначе e-mail адреса, указанные в теле Вашего письма в рассылке опубликованы не будут.

Вопросы

Для того, чтобы задать свой вопрос, кликните этой ссылке (вопрос будет опубликован в следующем номере).
Вы можете задавать любые вопросы, касающиеся программирования на языке C и C++. Это могут быть вопросы, касающиеся как конструкций языка, применения библиотек классов, шаблонов (таких как MFC или STL), использования компиляторов, так и самой философии программирования на C или C++. Здесь нет ограничений - спрашивайте и получайте ответы.

Вопрос № 94 ( Иван Базанов )

Как из BSTR получить LPCTSTR или string из STL ?

Ответить на вопрос

Вопрос № 95 ( Копрова_Марина_Львовна )

Здравствуйте! Как можно запустить из программы на VC++ другую программу (exe файл) Знаю, что можно сделать это с помощью API функции CreateProcess, но разобраться с параметрами, которые она требует, не могу.

Ответить на вопрос

Вопрос № 96 ( Некто Который )

Никак не могу подружиться с ссылками и с возвращаемыми значениями ф-ций =(

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

вобщем я немного запутался и прошу не судить меня строго, я толька начинаю изучать с++!

Ответить на вопрос

Вопрос № 97 ( atavin_ta )

Подскажите, чем в си заменена точечная нотация. Раньше я писал в дельфях, а также в версии си, не поддерживавшей визуальную разработку.
Необходимости в использовании нескалярных типов в си (если не считать таковыми массивы) не было, а значит не было и необходимости в доступе к свойствам переменных. Но в дельфях я привык часто использовать точечную нотации для доступа к свойствам объектов, в том числе, экранных элементов. Теперь у меня Borland C++Builder 6 Enterprize и я хочу использовать его возможности. Например, вставляю в форму TImage и хочу получить доступ к свойству Width и к методу SaveToFile. В принципе, я нашел, как выводить данные например в Cells от TStringGrid:
StringGrid1->cells[i][j]=v;. Но я хочу не только выводить данные в
свойства, но и читать свойства, а кроме того, мне нужен вывод строчных и символьных переменных и символьных массивов, а приведенный выше фрагмент транслирует значения числовых переменных в символьную форму и выводит результат трансляции.

С уважением Атавин Т. А.

Ответить на вопрос

Вопрос № 98 ( Diosso )

Здравсвуйте.
Вопрос: предположим, мне надо создать двумерный архив, ширина которого постоянна, а длина постоянно меняется.
В общем, нужен аналог следующей делфяцкой реализации:

type ver3f = array[0..2] of real;
 ...
vers:array of ver3f;
 ...
setlength(vers,n);

Diosso

Ответить на вопрос

Вопрос № 99 ( Arsa )

Здравствуйте !

Очень надеють на помошь читателей рассылки, потому что от моих тщетных
попыток заставить работать простейшую вещь, уже голова идет кругом :(

Значит так.
Делаю прогу в Visual C++ 6.0 Проект - MFC, на основе диалога.
Есть обычный диалог. На нем расположен обычный static control.
Этому статику я хочу просто сменить шрифт. Шрифт в окне веняется
при помощи SetFont, поэтому я делаю так (сначала получаю текущий шрифт,
получаю из него LOGFONT, меняю поля структуры LOGFONT, создаю новый
шрифт, и устанавливаю окну):

void CMyDlg::OnButton1() 
{
    CFont font;

    LOGFONT lf;

    m_wndStatic.GetFont()->GetLogFont(&lf);

    lf.lfWeight  = 900;
    lf.lfUnderline = 1;

    font.CreateFontIndirect(&lf);

    m_wndStatic.SetFont(&font);
}

И шрифт элемента меняется как надо. НО !!!
Как только я сворачиваю прогу в панель задач, а потом снова ее
разворачиваю, шрифт этого статика становится другим (похоже,
системмным).

Я был бы безмерно рад, если бы кто нибудь подсказал, как все таки задать
шрифт произвольному элементу диалога (это точно можно сделать - видал, что
в некоторых прогах так сделано). Но как ?

Ответить на вопрос

Ответы

Ниже приведены вопросы предыдущего выпуска и ответы на них.

Вопрос № 91 ( Alexey Kardash )

Здравствуйте. Меня зовут Алексей. Я занимаюсь изучением MFC еще очень мало времени, поэтому не серчайте если вопрос простой :). Как с помощью MFC вывести на экран список файлов, находящийся в текущей (например корневой) папке и переходить по каталогам вверх и вниз? Выводить список файлов я хочу в CListCtrl, например w_wndList. Как это сделать? Спасибо.

Ответ ( Александр Шогин )

Здравствуйте. Я для этих целей обычно просто использую функции WinApi например

 void Funct() {
   WIN32_FIND_DATA fd;
   HANDLE hFile;
   LPCTSTR p_path[MAX_PATH];
   CString path_search, file;
   //получаем текущий каталог
   GetCurrentDirectory(p_path);
   path_search.Format("%s\\*.*", p_path);
   //получаем указатель на первый найденный файл
   hFile = FindFirstFile(path_search, &fd);
   //если указатель не возвратил код обшибки то
   //просматтриваем весь каталог
   //list наш CListCtrl, подразумевается что столбец
   // уже создан
   int i = 0;
   if(hFile != INVALID_HANDLE_VALUE)
   {
      file.Format("%s", fd.cbFileName);
      list.InsertItem(i, file);
      while(FindNextFile(&fd) != FALSE)
      {
         file.Format("%s", fd.cbFileName);
         list.InsertItem(i, file);
         i++;
      }
   }
   FindClose(hFile);
}
Вопрос № 92 ( AVG )

Здравствуйте Уважаемый автор и подписчики!
Подскажите пожалуйста как работать с анимацией на Visual C++?
Например нажал на кнопку и раздаются карты и.т.д...
Например как в картах в виндовсе!!!!!!
Заранее спасибо. С уважением, Виктор.
Помогите кто чвм сможет!!!!!

Ответ ( 3V )

Гм... Извиняюсь, конечно за краткость...
Анимация - это (если утрировано) последовательная смена картинок. Так ?
То есть можно просто рисовать одну и ту же картинку в разных местах
через некоторый промежуток времени. Вот и будет простейшая анимация.
Если будем использовать MFC, то читаем про класс CDC (CClientDC, CPaintDC,
и.т.д.). Рисовать можно в любом окне. Для рисования через некоторый
промежуток времени можно использовать таймер (см. SetTimer/KillTimer).
Если надо, чтобы изображение не "моргало" при перерисовке, используйте
внеэкранные битмапы (см. CreateCompatibleDC, CreateCompatibleBitmap).
Кстати, в примерах, идущих с MSDN есть примеры анимации.
Вопрос № 93 ( Max116 )

Hi, All !!!
Сегодня такой вопрос. Как создавать свои элементы управления ?
То есть как я понимаю, код стандартных элементов управления Windows находится в некоторых виндовых dll. Для каждого стандартного элемента управления в системе регистрируется свой класс окна. Также свой класс окна можно зарегистрировать и в своем приложении и использовать окна такого класса.

Я научился создавать свои элементы управления, но только для своего приложения (пишу в Visual C, использую MFC). Я создаю класс, наследованный от CWnd, а потом реализую обработчики WM_PAINT, сообщений мыши, клавиатуры, и.т.д.

Но вот тут и вопрос.
Как сделать так, чтобы любое приложение (написанное на любом языке) могло использовать мои элементы управления ? То есть, если там будет создано окно класса MyCoolControl, то вызвался бы код в моей dll, создался бы объект моего класса CMyCoolControl, и начали бы обрабатываться сообщения в моей длл ?

Если кто знает, поделитесь информацией, плиз. Или ссылочками.

Ответ ( Иван Базанов )

Помести определение класса в dll так:

class __declspec(dllexport) YourClass
{
 ...
}


В приложении используй

class __declspec(dllimport) YourClass
{
 ...
}

Слинкуй приложение с *.lib твоей dll

А в остальном, как обычно

Ответ ( 3V )

Все как обычно, достаточно просто. И достаточно сложно :)
Каждый контрол - это обычное окно. И он создается обычными
API-функциями CreateWindow или CreateWindowEx (MFC, конечно
же тоже эти функции использует). В эти функции передается
параметр LPCTSTR lpClassName - имя зарегистрированного класса
окна (для кнопок - "BUTTON", для простого редактора - "EDIT",
и.т.д.).
Ничто не мешает тебе зпрегистрировать свой класс окна при помощи
API-функций RegisterClass, RegisterClassEx, или MFC функции
AfxRegisterClass (она использует ту же RegisterClass, но при
завершении приложения, зарегистрированные классы автоматом
разрегистрируются.
Эту самую регистрацию классов можно сделать в твоей DLL.
При регистрации класса надо указывать оконную функцию, в которую
будут приходить все сообщения для созданных окон.
Можно писать элемент управления полностью на API, но можно и MFC
использовать. Основная идея: когда в оконную функцию придет
сообщение WM_NCCREATE, создать объект своего контрола (тот который
MFC-шный) и сделать сабклассинг окна, дескриптор которого передан
в оконную функцию. В самом классе контрола делать UnsubclassWindow
и убивать себя (объект класса контрола) в обработчике WM_NCDESTROY.

Я пару раз делал свои контролы (именно с использованием MFC по
описанной выше схеме). Ничего так, работало. Правда, помнится,
были и проблемы какие то.
Если действительно надо, пиши. Может, подскажу чего.
Книги по C/C++
Решение сложных задач на С++ [ Exceptional C++ ]
Решение сложных задач на С++ [ Exceptional C++ ]

Автор: Герб Саттер

В данном издании объединены две широко известные профессионалам в области программирования на C++ книги Герба Саттера Exceptional C++ и More Exceptional C++, входящие в серию книг C++ In-Depth, редактором которой является Бьерн Страуструп, создатель языка C++.
Материал этой книги составляют переработанные задачи серии Guru of the Week, рассчитанные на читателя с достаточно глубоким знанием C++, однако книга будет полезна каждому, кто хочет углубить свои знания в этой области.

Страница книги на Озоне
Современное проектирование на С++: Обобщенное программирование и прикладные шаблоны проектирования. (Modern C++ Design)
Современное проектирование на С++: Обобщенное программирование и прикладные шаблоны проектирования. (Modern C++ Design)

Автор: Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно-ориентированного программирования на С++.

Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность.

В книге изложены способы реализации основных шаблонов проектирования.
Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора.

Книга предназначена для опытных программистов на С++.

Страница книги на Озоне
Всего доброго. До встречи в следующем номере.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cppqa
Отписаться

В избранное