Вопрос № 54761: Здравствуйте Уважаемые!
Подскажите где можно достать
библиотечки (а также их описание) для работы
с различными архивами (arj,zip,rar и т.д.). Хочу научиться
программно распаковывать архивы. Спасибо за ответы!...Вопрос № 54773: Мне для себя нужен класс, работающий с матрицами. Вообще-то задача - решать системы уравнений, но для этого мне нужен рабочий касс с матрицами. Я написал, вроде все нормально, вот только есть проблема. Не получается вернуть значание типа Matrix. Это ...Вопрос № 54795: Не понял смысла включения include файлов без .h расширения. Особенно вот этого:
Файл: cstdio
...
#ifndef _CSTDIO_
#define _CSTDIO_
#ifdef _STD_USING
#undef _STD_USING
#include <stdio.h>
#define _STD_USING...Вопрос № 54804: Здравствуйте.
Как можно сымитировать щелчок мыши? Мне нужно сделать так, чтобы запустил программу, мышку навел на кнопку,а она "сама щелкнула" на кнопку через несколько секунд, так как будто это я сам щелкнул....Вопрос № 54810: Извините за тупой вопрос, но всё-таки спрошу:
что является аналогом дельфового TPanel или скажем Panel в VC++ .NET
т.е. что-то подобное в MFC есть?
...Вопрос № 54814: Уважаемые эксперты, подскажите мне пожалуйста как рисовать в MFC
приложениях ? Например чтобы принажатии кнопки он проводил линию начало которой я могла бы задать в Edit1 а конец в другом едите. И ещё как мне вывести координаты курсора мыши в та...Вопрос № 54819: Доброе время суток!
посоветуйте плз хорошую книгу по С++ для начинающего
(программирование в консольном режиме)
(не там где sin cout а где printf)
Благодарю!...Вопрос № 54833: Недавно задал этот вопрос, но никто не отозвался!
Так вот!!! Почему спп не понимает путь к файлу если использовать "",
а "/" сробатывает нормально. То же самое происходит когда пользуешься CFileDialog'ом (.GetPathName())-...
Вопрос № 54.761
Здравствуйте Уважаемые!
Подскажите где можно достать
библиотечки (а также их описание) для работы
с различными архивами (arj,zip,rar и т.д.). Хочу научиться
программно распаковывать архивы. Спасибо за ответы!
Отправлен: 08.09.2006, 19:50
Вопрос задал: kool (статус: 2-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: DoubleV
Здравствуйте, 1556!
Вот здесь я точно видел что-то про зип:
http://sources.codenet.ru/?cid=9
Здесь есть информация по сжатию. Только не знаю пригодистя ли тебе:
http://ishodniki.ru/list/index.php?action=all&cat=18&show=alg-zip&pr=zip_common&start=10&limit=10
Вот здесь исходники различных компрессоров:
http://ishodniki.ru/list/?cat=6&show=cpp_arhiv
Вот сайт посвященный сжатию данных:
http://www.compression.ru/
Еще исходники, думаю сможешь найти что-нить полезное:
http://www.sources.ru/pascal/archives/index.htm
Вроде больше ссылок я не знаю, если не лень загляни в гугл, помнится мне там этого добра оч. много.
Удачи!
Ответ отправил: DoubleV (статус: 4-ый класс)
Ответ отправлен: 08.09.2006, 20:50
Отвечает: Vaga
Здравствуйте, 1556!
можно посмотреть здесь http://www.codeproject.com/useritems/LiteZip.asp. Не могу утверждать, но мне кажется, что библиотеку можно скачать. Код, по крайней мере, точно.
про Zip-архивы - здесь: http://www.codeproject.com/cpp/zip.asp
UnRar: http://www.codeproject.com/file/CUnrarDLL.asp
--------- Вольному - воля
Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 08.09.2006, 22:59
Вопрос № 54.773
Мне для себя нужен класс, работающий с матрицами. Вообще-то задача - решать системы уравнений, но для этого мне нужен рабочий касс с матрицами. Я написал, вроде все нормально, вот только есть проблема. Не получается вернуть значание типа Matrix. Это я перегружаю операторы + и *, вот там и надо вернуть матрицу. Код класса - в приложении. Проблема сейчас с операцией умножения. Логика в порядке, а вот возврат значения....
Небольшие комментарии. В файле main.cpp делается следующее (должно делаться):
создаются объекты исходной матрицы, матриц L и U, матрицы для проверки правильности.
Спрашивается исходная матрица (заполение с терминала)
делается LU разложение исходной матрицы
Полученные матрицы перемножаюся
результат присваивается еще одной матрице
потом сравнивается с исходной
-----
Ошибка вылетает при выполнении операции присвоения (потому что присваивать получается нечего). Это происходит потому что переменная Result, в методе умножения локальная. Я не знаю, как бы ее корректно вернуть.
Метод перемножения первый в приложении. Затем заголовочный фалй класса, затем сам класс и в конце главный файл, который все это юзает.
Заранее очень благодарен за помощь!
Приложение:
Отправлен: 08.09.2006, 20:31
Вопрос задал: Константин (статус: 7-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лучников Ю.В.
Здравствуйте, Константин!
Начну с того, что вы допустили несколько серьезных ошибок. Впрочем, по-порядку...
Момент 1.
При перегрузке бинарных операторов, таких как */+/- и т.д. правосторонний параметр лучше передавать по ссылке, а не по значению. Что дает:
- Сокращается время передачи объекта (а отсюда оптимизируется скорость исполнения кода), т.к. не происходит полного копирования. Фактически передается только адрес объекта.
- Отсюда отсутствуют лишние вызовы конструкторов копирования (о нем ниже), деструкторов. Момент 2.
Перегруженный оператор присваивания ДОЛЖЕН возвращать ссылку на объект. Тем самым становится возможным сцепление операций присваивания: A = B = C = ... = X;
Это всё рекомендации. Далее пошли важные моменты...
Момент 3.
Если в классе присутствует перегруженный оператор присваивания, если класс содержит ссылки или указатели (В вашем случае, матрица Data[][]), в классе просто ОБЯЗАН быть реализован конструктор копирования. Чего у вас не было. Отсюда и выбивало программу.
Момент 4.
Если выделяется память под одиночный объект оператором new, то он должен быть уничтожен оператором delete.
Если вы выделяете память под вектор объектов оператором new[], то вы ОБЯЗАНЫ использовать оператор delete[] для освобождения памяти векторных данных. У вас же использовался delete, что приводило к утечке памяти.
Отсюда, даю рекомендации для того, чтобы подобных ошибок у вас не возникало:
1. Выучить работу с динамически-создаваемыми объектами.
2. Разобраться детально с работой конструкторов-деструкторов (очередность их вызовов и т.д.)
3. Запомнить, что кроме конструктора, существует еще и конструктор копирования (поверхностное/глубинное копирование).
4. Разобраться с различными вариантами перегрузки операторов.
Рабочий код привожу в приложении...
УСПЕХОВ!
Приложение:
Ответ отправил: Лучников Ю.В. (статус: *Мастер-Эксперт) Россия, Киров WWW:нЧат - Наш Чат! ICQ: 537913 ---- Ответ отправлен: 09.09.2006, 07:01 Оценка за ответ: 5 Комментарий оценки: Великолепный ответ! Огромное спасибо! Насчет разобраться и подучить, это скорее вспомнить :) Я просто около 8 месяцев С++ не занимался.
Вопрос № 54.795
Не понял смысла включения include файлов без .h расширения. Особенно вот этого:
Файл: cstdio
...
#ifndef _CSTDIO_
#define _CSTDIO_
#ifdef _STD_USING
#undef _STD_USING
#include <stdio.h>
#define _STD_USING
#else
#include <stdio.h>
#endif /* _STD_USING */
#endif /* _CSTDIO_ */
Что это даёт по сравнению с традиционной схемой? Я понимаю что этот кусок делает, но не понимаю зачем так наворочено.
Отправлен: 09.09.2006, 00:46
Вопрос задал: Ромка (статус: 1-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: InviZ
Здравствуйте, Ромка!
Преимуществ .никаких не дает.
А отличия - в том, что все функции, к примеру, из stdio.h, будут объявлены в пространстве имен std, например std::fopen. И еще потому, что так написано в стандарте - пункт "17.4.1.2 Headers".
Тут возможен вопрос - почему бы сразу не поместить все объявления, скажем, в cstdio. Это сделано для того, чтобы обеспечить обратную совместимость с языком C.
В любом случае, в программах на C++ правильнее будет подключать файлы без .h-расширения.
Насчет других файлов, не относящихся к библиотеке C, например, STL-овских, все точно так же, только из-за стандарта...
В общем, стандарт есть стандарт, и его лучше соблюдать.
Ответ отправил: InviZ (статус: 3-ий класс)
Ответ отправлен: 09.09.2006, 10:56
Отвечает: Хватов Сергей
Здравствуйте, Ромка!
Формально - ничего.
Сделано это было во многих местах из-за обратной совместимости: в какой-то момент сменился api, и не везде совместимо, и программы, использующие обновленный должны были включать новый файл, и в то же время можно было пересобирать старые программы без изменений (правда зачастую только в теории)
Ответ отправил: Хватов Сергей (статус: 4-ый класс)
Ответ отправлен: 11.09.2006, 10:42
Вопрос № 54.804
Здравствуйте.
Как можно сымитировать щелчок мыши? Мне нужно сделать так, чтобы запустил программу, мышку навел на кнопку,а она "сама щелкнула" на кнопку через несколько секунд, так как будто это я сам щелкнул.
Отправлен: 09.09.2006, 09:26
Вопрос задал: korsar (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: InviZ
Здравствуйте, korsar!
Если используется "чистый" WinApi, то необходимо отправлять сообщение BM_CLICK:
SendMessage(hButton, BM_CLICK, 0, 0);
Где hButton - handle кнопки... Если хотите, чтобы все это эффектнее выглядело - с эффектом "нажатия" - то пошлите вместо BM_CLICK сначала WM_LBUTTONDOWN, потом вызовите задержку на 100-200 миллисекунд, а затем пошлите сообщение WM_LBUTTONUP..
Если вы используете Borland C++ Builder и VCL, тогда можно вызвать либо метод Click класса TButton, либо метод Perform (это для второго способа - чтобы отправить сообщение). Например, так:
Button1->Click();
или так:
Button1->Perform(WM_LBUTTONDOWN, 0, 0);
Sleep(100);
Button1->Perform(WM_LBUTTONUP, 0, 0);
Ответ отправил: InviZ (статус: 3-ий класс)
Ответ отправлен: 09.09.2006, 10:41
Вопрос № 54.810
Извините за тупой вопрос, но всё-таки спрошу:
что является аналогом дельфового TPanel или скажем Panel в VC++ .NET
т.е. что-то подобное в MFC есть?
Отправлен: 09.09.2006, 10:43
Вопрос задал: Maxxx (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Melamed
Здравствуйте, Maxxx
К сожалению, польного аналога компонента TPanel, в MFS не существует. Поэтому Вам придется либо
писать самому аналог этого компонента, либо пользоваться вариантами, которые &
#1086;тдаленно напоминают этот компонент:
Шаблон формы со стилами WS_CHILD и без рамки или с рамкой типа "Thin" и в зависимости, какие будут поставленны
расширенные стили окна, такой и быдет вид панели. Если вам необходим
086; что-то наподобие TPanel сделать в шаблоне формы, то я рекомендую вам воспользоваться контролем
Group Box без заголовка, поигравшись при этом расширенными стилями окна для придk
2;ния ему соответствующего вида
Желаю удачи
Ответ отправил: Melamed (статус: 4-ый класс)
Ответ отправлен: 09.09.2006, 13:36
Вопрос № 54.814
Уважаемые эксперты, подскажите мне пожалуйста как рисовать в MFC
приложениях ? Например чтобы принажатии кнопки он проводил линию начало которой я могла бы задать в Edit1 а конец в другом едите. И ещё как мне вывести координаты курсора мыши в таком приложении ? Зараннее спасибо...
Отправлен: 09.09.2006, 11:40
Вопрос задала: Koran (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Mihasic
Здравствуйте, Koran!
Ну, рисовать принято в OnPaint'е, рисовать при помощи объекта CDC (у него много методов, в т.ч. MoveTo и LineTo), который связан с контекстом устройства (Device Context) данной формы.
Координаты курсора мыши можно выводить, например в какой-нибудь Static в виде текста по событию MouseMove (WM_MOUSEMOVE), как в MFC уже не помню, но найти не сложно.
Кстати, чтобы присвоить (связать) переменную со статиком, нужно как минимум присвоить ему уникальное имя (внутри данного диалога), т.е. IDC_STATIC не подойдет.
(по крайней мере так было еще когда я использовал MFC в VC++6).
Ответ отправил: Mihasic (статус: 7-ой класс)
Ответ отправлен: 09.09.2006, 13:32
Отвечает: AlexKlaip
Здравствуйте, Koran!
Например:
//обработчик нажатия Вашей кнопки
void CMyClass::OnBnClickedMyButton()
{
int x1,y1,x2,y2; //координаты начала и конца
//заполняем координаты из Edit (не знаю как они у Вас организованы)
//получаем контекст окна
CClientDC dc(this);
//устанавливаем курсор в начальную точку
dc.MoveTo(x1,y1);
//рисуем линию
dc.LineTo(x2,y2);
}
Помните, что вывод на экран зависит от режима отображения:
см. ф-ию virtual int CDC::SetMapMode(
int nMapMode
);
По поводу мыши:
void CMyClass::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CString str;
str.Format("X: %d Y: %d",point.x,point.y);
//куда выводить это Вам решать, в данном случае прямо в контекст окна
//в координаты 10, 10
dc.TextOut(10,10,str);
CWnd::OnMouseMove(nFlags, point);
}
Ответ отправил: AlexKlaip (статус: 2-ой класс)
Ответ отправлен: 11.09.2006, 10:12 Оценка за ответ: 5
Вопрос № 54.819
Доброе время суток!
посоветуйте плз хорошую книгу по С++ для начинающего
(программирование в консольном режиме)
(не там где sin cout а где printf)
Благодарю!
Отправлен: 09.09.2006, 12:13
Вопрос задал: sexy (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Mihasic
Здравствуйте, sexy!
Ну, printf это сишная функция и соответственно книгу по си нужно, хотя например я начинал книги Герберта Шилдта "Полный справочник по C++", которая до сих пор лежит в столе... А после нее уже можно переходить на что-то поглубже, вроде Джефа Элджера "C++ для профессионалов".
Справочник Шилдта организован почти как учебник и в то же время в нем легкая "навигация", так что для начинающего самое оно. Плюс в нем есть разделение на C и C++.
Ответ отправил: Mihasic (статус: 7-ой класс)
Ответ отправлен: 09.09.2006, 13:38
Вопрос № 54.833
Недавно задал этот вопрос, но никто не отозвался!
Так вот!!! Почему спп не понимает путь к файлу если использовать "",
а "/" сробатывает нормально. То же самое происходит когда пользуешься CFileDialog'ом (.GetPathName())- вроди бы путь нормальный, но ....
Отправлен: 09.09.2006, 17:43
Вопрос задал: Maxxx (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Melamed
Здравствуйте, Maxxx!
Так как в С++ символ является частью специальных символов (например
- перевод но новую строку, - табуляция и т.д.) то там, где тебе в строке надо ставить символ , ставь
\ (кстати \ - тоже специальный символ, который при компеляции преобразуется в
86;диночную ).
Желаю удачи
Ответ отправил: Melamed (статус: 4-ый класс)
Ответ отправлен: 09.09.2006, 18:17
Отвечает: Vaga
Здравствуйте, Maxxx!
символ "" (Esc) является управляющим, поэтому правильно будет оформить так: "C:\WorkDir\MyProg".
--------- Вольному - воля
Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 09.09.2006, 21:12