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

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


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


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

Выпуск № 311
от 20.07.2003, 12:00

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 946
Отправлено ответов: 2132
Активность: 225.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Eugene
Статус: Профессиональный
Общий рейтинг: 106.94
URL: мощный файловый архив
[Подробней >>]
Avl2k
Статус: Профессиональный
Общий рейтинг: 123.5
[Подробней >>]
Yuri Gordienko
Статус: Профессиональный
Общий рейтинг: 117.19
[Подробней >>]
 
DiGiT[old]
Статус: Профессиональный
Общий рейтинг: 109.96
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 940. Вопрос по MFC: Как мне проконтролировать, какой день, месяц, год выбрал юзверь в элементе управления... (ответов: 2)
Вопрос № 941. как в С скопировать директорию с вложенными директориями. В RSDN этот вопрос рассмотрен лишь в общем... (ответов: 1)
Вопрос № 942. Здрасти все! У меня такой ламерский вопрос - как можно округлять числа, не применяя всякие printf, и... (ответов: 4)

Вопросов: 3, ответов: 7


 Вопрос № 940

Вопрос по MFC:
Как мне проконтролировать, какой день, месяц, год выбрал юзверь в элементе управления DateTimePicker. Желаетельно стобы эти значения были целого типа (int).
Очень надеюсь на Ваш ответ. Заранее спасибо.



Вопрос отправлен: 16.07.2003, 19:23
Отправитель: LONGOBARD

[Следующий вопрос >>] [Список вопросов]

Отвечает Eugene

Доброе время суток, LONGOBARD!
В этом компоненте есть такое свойство, как DateTime.
unsigned short year;
unsigned short month;
unsigned short day;
DateTimePicker->DateTime.DecodeDate(&year, &month, &day);
В итоге у тебя в соответствующих переменных соответствующие данные.


Ответ отправлен: 17.07.2003, 10:23
Отправитель: Eugene


Отвечает Avl2k

Приветствую Вас, LONGOBARD!
1. Если нужно получить дату после закрытия диалога, то добавляете с помощью ClassWizard'а в диалог переменную нужного типа (CTime или COleDateTime). Из этой переменной забираете нужные Вам значения c помощью соответствующих методов классов CTime/COleDateTime.
2. Если хотите работать с контролом напрямую, можете устанавливать/получать дату с помощью методов CDateTimeCtrl::SetTime/GetTime опять же через классы СTime/COleDateTime.
3. Если нужно отслеживать изменение даты до закрытия диалога, обработайте нотификацию DTN_DATETIMECHANGE:
void CMyDlg::OnDateTimeChangeDateTimePicker1(NMHDR* pNMHDR, LRESULT* pResult)
{
NMDATETIMECHANGE* p = (NMDATETIMECHANGE*)pNMHDR;
if(p->dwFlags == GDT_VALID)
{
CTime t( p->st );
AfxMessageBox( t.Format("%x") );
}
else
AfxMessageBox("zzz");
*pResult = 0;
}
С уважением, Avl2k.

Ответ отправлен: 18.07.2003, 16:12
Отправитель: Avl2k


 Вопрос № 941

как в С скопировать директорию с вложенными директориями.
В RSDN этот вопрос рассмотрен лишь в общем. Что здесь неправильно?
int CopyFile::Copy(LPCTSTR pszPath, LPCTSTR toPath)
{
// Преобразуем путь к строке с двойным нулевым
//символом в конце

TCHAR buf[_MAX_PATH + 1];
_tcscpy(buf, pszPath);
buf[_tcslen(buf)+1]=0;
// Устанавливаем ппараметры SHFILEOPSTRUCT для операции копирования
wFunc = FO_COPY;
pFrom = buf;
pTo = toPath;
fFlags |= FOF_ALLOWUNDO;
return SHFileOperation(this); // do it!
}
Где можно взять рабочий исходник?



Вопрос отправлен: 17.07.2003, 09:03
Отправитель: Lerich

[Следующий вопрос >>] [Список вопросов]

Отвечает Avl2k

Приветствую Вас, Lerich!
У меня вот так все работает:
int Copy(LPCTSTR fromPath, LPCTSTR toPath)
{
TCHAR fromBuf[_MAX_PATH + 1];
_tcscpy(fromBuf, fromPath);
fromBuf[_tcslen(fromBuf)+1]=0;
TCHAR toBuf[_MAX_PATH + 1];
_tcscpy(toBuf, toPath);
toBuf[_tcslen(toBuf)+1]=0;
SHFILEOPSTRUCT fops;
memset( &fops, 0, sizeof( fops ) );
fops.wFunc = FO_COPY;
fops.pFrom = fromBuf;
fops.pTo = toBuf;
fops.fFlags |= FOF_ALLOWUNDO;
return SHFileOperation(&fops); // do it!
}
int main()
{
return Copy( "c:\php", "c:\temp\php");
}
Обратите внимание, что строка пути назначения тоже должна заканчиваться двойным нулем.
С уважением, Avl2k.

Ответ отправлен: 17.07.2003, 12:26
Отправитель: Avl2k


 Вопрос № 942

Здрасти все!
У меня такой ламерский вопрос - как можно округлять числа, не применяя всякие printf, и пр. - то есть был dNum=0.12345, а стал 0.123?
Искал в MSDN что-нибудь типа round, а нету...
Заранее благодарен.



Вопрос отправлен: 17.07.2003, 09:32
Отправитель: Ренат (renatka_f@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Yuri Gordienko

Доброе время суток, Ренат!
На самом деле вопрос совсем не ламерский, т.к. стандартных средств округлить число, скажем до восьмого знака после запятой, нет вообще. Используются разнообразные алгоритмы типа как я написал в приложении
Успехов


Приложение:

Ответ отправлен: 17.07.2003, 10:13
Отправитель: Yuri Gordienko


Отвечает Eugene

Доброе время суток, Ренат!
А чем тебе не нравится floor и ceil?
floor(0.12345 * 1000) / 1000 = 0.123

Ответ отправлен: 17.07.2003, 10:06
Отправитель: Eugene


Отвечает Avl2k

Здравствуйте, Ренат!
Можно, например, так
double round( double val, unsigned int prec )
{
unsigned int m = 1;
while( prec-- )
m *= 10;
double x = 0.5;
if( val < 0 )
x = -x;
modf( val * m + x, &x );
return x / m;
}
Однако округление на вещественных числах
1. не имеет особого смысла (имеет смысл только для вывода, что и делают функция printf и др.), поскольку в расчетах они все равно будут участвовать с полным количеством знаков;
2. часто будет глючить, поскольку многие десятичные дроби не представимы конечными двоичными числами, т.е. если мы ожидаем получить 0.125, то на самом деле что-то типа получим 0.124999999999993.
С уважением, Avl2k.

Ответ отправлен: 17.07.2003, 12:12
Отправитель: Avl2k


Отвечает DiGiT[old]

Здравствуйте, Ренат!
нет нельзя. А printf тоже не округляет. Но мона делать вроде этого: int(dNum*1000)/1000.0, то есть используя мат. выражения

Ответ отправлен: 17.07.2003, 13:05
Отправитель: DiGiT[old]



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (35)
C / C++ (22)
Perl (4)
Builder / Delphi (19)
Pascal (24)
Basic / VBA (10)
Java / JavaScript (11)
PHP (9)
Криптография (7)
WinAPI (9)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (32)
"Железо" (29)
Поиск информации (20)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (7)
Юристу
Гражданское право (10)
Семейное право (5)
Трудовое право (9)
КоАП (5)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное