Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убрать UPDOWN в CDateTimeCtrl 
V
    Опции темы
Acer
Дата 9.3.2011, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



Привет. Есть класс наследник от CDateTimeCtrl
Вот код создания контрола:
Код

pEditTime->Create( WS_CHILD | WS_VISIBLE | DTS_TIMEFORMAT & ~DTS_UPDOWN, CRect( 0, 0, 0, 0 ), this, 0 );

в контроле справа кнопки up/down не убираются. Точнее, остается только down. Если вообще не упоминать о DTS_UPDOWN, то обе кнопки создаются.
Подскажите, как убрать UPDOWN из контрола?
Код с GetWindowLong и SetWindowLong, который нашел гугл не помог.
PM MAIL   Вверх
Acer
Дата 12.3.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



Проблему решил. Идея простая. Находим окно со спинбоксом и удаляем его:
Создал контрол с явным указанием стиля DTS_UPDOWN
Код

pEditTime->Create( WS_CHILD | WS_VISIBLE | DTS_TIMEFORMAT | DTS_UPDOWN, CRect( 0, 0, 0, 0 ), pBaseWnd, 0 );

В классе контрола определил реакцию на сообщение WM_SHOWWINDOW
Код

void EditTime::OnShowWindow(BOOL bShow, UINT nStatus)
{
    if ( bShow == TRUE )
    {
        ::EnumChildWindows( GetSafeHwnd(), EnumChildProc, NULL );
    }
    CDateTimeCtrl::OnShowWindow(bShow, nStatus);
}


где EnumChildProc
Код

BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
{
    char clsNameUpDown[] = { "msctls_updown32\0" };
    char clsName[255];

    ::GetClassNameA( hWnd, clsName, 256 );
    if ( strcmp( clsName, clsNameUpDown ) == 0 )
    {
        ::ShowWindow( hWnd, SW_HIDE );
        return FALSE;
    }
    return TRUE;
}


Теперь спинбокс не отображается в CDateTimeCtrl(кнопка показа календаря тоже не отображается). 
Но отображается свободное место для этого спинбокса. 
Чтобы его убрать я ограничил область видимого окна (CWnd::SetWindowRgn)

Это сообщение отредактировал(а) Acer - 12.3.2011, 18:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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