Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение диалоговых окон с календарём 
V
    Опции темы
Brodyaga
Дата 22.11.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Всем здравсвуйте! Помогите пожалуйста с такой вот проблемкой... Работаю я в MSVC 2005. Создаю вин приложение стандартное с меню, в котором есть выбор File->Exit и Help->About. По выбору в меню пункта About появляется стандартное About'овское окно...
Теперь суть проблемы: захожу я, значит, в ресурсы, выбираю это About'овское окно и кидаю на него скажем радио баттон. Компилирую, запускаю.. выбираю пункт About... Всё ОК! браво! появляется окно с радио баттоном! Но вот когда я кидаю на него Date-Time Control, то при выборе пункта меню About ничего не происходит.. окно не появляется и ошибки никакой... После всевозможных проб я понял, что часть компонентов отображается также как радио баттно, а с частью происходит такая же фигня, как и с Date-Time Control'ом... В чём дело?! Помогите пожалуйста, срочно надо...
PM MAIL   Вверх
586
Дата 22.11.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



InitCommonControls вызывал?
PM   Вверх
jonie
Дата 22.11.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



лучше манифестом баловаться, чем InitCommonControls-подобным...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brodyaga
Дата 22.11.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



С CommonControl получилось, спасибо! правда не сразу.. надо было ещё comctl32.lib подключить и commctrl.h. Вот ссылка кому интересно. А вот с манифестом не получилось...
А почему с ним лучше и как сделать?
PM MAIL   Вверх
jonie
Дата 22.11.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



ну манифест как бы "принято" .... явный вызов библиотеки не очень хорошо : их же есть несколько версий (по вашей ссылке указано).


http://www.msjogren.net/dotnet/eng/tools/default.asp
см. ThemeMe  - там то что надо вроде


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brodyaga
Дата 24.11.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Возникла ещё одна проблема.... Теперь диалоговое окно не перетаскивается! Тоесть отобразилось на экране окно с календарём, а перетащить его в другую область экрана я не могу... Все опции окна просмотрел, ничего такого не нашёл, что могло бы помочь, подскажите в чём дело, пожалуйста!?
PM MAIL   Вверх
jonie
Дата 24.11.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



вероятно у вас просто не обрабатываются сообщения соотвествующие, или обрабатываются неположенным образом...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brodyaga
Дата 24.11.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



А какое это сообщение? и как оно должно обрабатываца.. у меня оконная процедура для диалога стандартная:
Код

INT_PTR CALLBACK Dialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    default:
        return DefWindowProc(hDlg, message, wParam, lParam);
    }
    return (INT_PTR)FALSE;
}



PM MAIL   Вверх
Brodyaga
Дата 24.11.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Ок, с этим вроде разобрался... закоментил строчки:
Код

    default:
        return DefWindowProc(hDlg, message, wParam, lParam);


и окно стало перетаскиваться... теперь у меня созрел ещё один вопрос... Как я могу по щелчку на кнопке на диалоговом окне, получить дату выбранную в календаре на этом же окне? Тоесть что нужно прописать вот тут:
Код

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }

PM MAIL   Вверх
jonie
Дата 24.11.2008, 23:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



как-то странно выглядит процедура оконная диалоговая. обычно ее делают такой:
Код

switch(uMsg) {
 case WM_PAINT:
  ....
  break;
 default: return FALSE;
}
return TRUE;



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
586
Дата 24.11.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



PM   Вверх
Brodyaga
Дата 25.11.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



jonie, так это стандартная процедура для диалогового окна, студия сама создаёт... Ну да не суть важно... Так как мне по нажатию кнопки обратица к калндарю, лежащему на этой же диалоговой форме? писать для календаря свою процедуру? только так?
PM MAIL   Вверх
Brodyaga
Дата 26.11.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



586, по данной вами ссылке в общем рассказывается про работу с календарём. Сейчас же мне нужно узнать как по нажатию кнопки на диалоговом окне, взять значение выбранной даты в календаре расположенном на этом же диалоговом окне.
PM MAIL   Вверх
586
Дата 26.11.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Слева, в списке статей есть главная статья: Date and Time Picker
Код
void ShowTime(HWND hDateTimePicker)
{
    TCHAR buf[256];
    SYSTEMTIME st;

    DateTime_GetSystemtime(hDateTimePicker, &st);
    // 26.11.2008 17:28:00
    _sntprintf(buf, 256, _T("%u.%02u.%04u %u:%02u:%02u"),
        (UINT)st.wDay, (UINT)st.wMonth, (UINT)st.wYear,
        (UINT)st.wHour, (UINT)st.wMinute, (UINT)st.wSecond);
    buf[255] = 0;

    MessageBox(0, buf, _T(""), 0);
}

INT_PTR CALLBACK Dialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        break;

    case WM_COMMAND:
        if(LOWORD(wParam) == IDOK)
        {
            ShowTime(GetDlgItem(hDlg, /*IDC_DATETIME*/));
            return TRUE;
        }
        return FALSE;

    case WM_CLOSE:
        EndDialog(hDlg, 0);
        break;

    default:
        return FALSE;
    }
    return TRUE;
}


Это сообщение отредактировал(а) 586 - 26.11.2008, 18:33
PM   Вверх
Brodyaga
Дата 28.11.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Спасибо! Всё получилось! Ещё такой вопросик... Есть ли какойнить макрос чтобы получить дату не строкой, а количеством миллисекунд? или как склеить полученные значения типа UINT из SYSTEMTIME в тип double ?
PM MAIL   Вверх
586
Дата 28.11.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Если нужен числовой формат, то SYSTEMTIME можно конвертировать в FILETIME (64-битное целое число).

Код
SYSTEMTIME st;
FILETIME ft;

//GetLocalTime(&st);

SystemTimeToFileTime(&st, &ft);


По поводу double, подобных функций в WinAPI не видел. Можешь посмотреть, как реализована функция Now() или объект TDateTime в исходниках VCL (Delphi), или поискать в гугле.
http://www.wasm.ru/forum/viewtopic.php?pid=168066#p168066

А зачем тебе нужно конвертировать в double?

Это сообщение отредактировал(а) 586 - 28.11.2008, 19:43
PM   Вверх
Brodyaga
Дата 29.11.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



мне нужно отослать дату на веб-сервис, а он принимает её в виде double... Веб-сервис написан на С#. И там нет типа FILETIME ... Может както лучше изменить функцию веб-сервиса?
PM MAIL   Вверх
Solotoy29
Дата 29.11.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У когото есть прога Електронный секретар, очень нужна на С++
PM MAIL   Вверх
jonie
Дата 30.11.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Цитата

мне нужно отослать дату на веб-сервис, а он принимает её в виде double... Веб-сервис написан на С#. И там нет типа FILETIME
зато у DateTime есть DateTime::FromFileTime Method, что вам и надо


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brodyaga
Дата 30.11.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Цитата

зато у DateTime есть DateTime::FromFileTime Method, что вам и надо

Точно! но как мне передать значение FILETIME на сервер? ни в long, ни в double оно не конвертица...
PM MAIL   Вверх
586
Дата 30.11.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
FILETIME ft;
//...
ULARGE_INTEGER i;

i.LowPart = ft.dwLowDateTime;
i.HighPart = ft.dwHighDateTime;

// в i.QuadPart будет 64-битное число


или так:
Код
FILETIME ft;
//...
UINT64 i = ((UINT64)ft.dwLowDateTime) | (((UINT64)ft.dwHighDateTime) << 32);

PM   Вверх
Brodyaga
Дата 30.11.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



DateTime::FromFileTime принимает long, а long 4 байта, те формулы что вы мне привели переводят в double FILETIME который 64 байта.

Добавлено через 5 минут и 17 секунд
Код

long ll=ft.dwLowDateTime;


Это будет представление FILETIME в виде long, который проглодит DateTime::FromFileTime ?? или нет?!
PM MAIL   Вверх
586
Дата 30.11.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Brodyaga @  30.11.2008,  15:05 Найти цитируемый пост)
DateTime::FromFileTime принимает long, а long 4 байта

Цитата(http://msdn.microsoft.com/ru-ru/library/yyaad03b.aspx)
Тип данных long. В C# тип данных long является 64-разрядным, а в C++ он 32-разрядный.

А в Managed С++ там __int64 (см. скриншот).
Цитата
те формулы что вы мне привели переводят в double FILETIME который 64 байта.

Я написал, как переводить в 64-битную целочисленную переменную.

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  1.png 5,85 Kb
PM   Вверх
Brodyaga
Дата 1.12.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Спасибо! И последний вопрос.... При первом отображении календаря там стоит выбранным текущее число и текущее время, как сделать чтобы по дефолту было выбрано другое число и время?
PM MAIL   Вверх
586
Дата 1.12.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



PM   Вверх
Brodyaga
Дата 3.12.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Спасибо большое! Всё получилось! +1 ;)
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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