Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++/MFC] CTime и дочерние окна 
:(
    Опции темы
SAVEL
Дата 14.4.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите как в функцию времени передавать индексы дочерних окон, чтобы в каждом дочернем окне выводить разное время! 
Приложу код ф-ии смещения времени:
Код

void CPopupWnd::OnTimer(UINT nIDEvent) 
{
    // TODO: Add your message handler code here and/or call default
    
    CTime CurTime=CTime::GetCurrentTime ();
    CTimeSpan t2(0,4,0,0); //смещаю на 4 часа
    CurTime+=t2; // вперед
    strTime=(CString)CurTime.Format ("%d-%m-%Y  %H:%M:%S");
//    AfxMessageBox ("MB_OK");
    Invalidate();
    
    CFrameWnd::OnTimer(nIDEvent);
}


А окон у меня дочерних 5, ну и 5 плавающих и все они инициализируются в MainFrame!
Код

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    int i;
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
    // create a view to occupy the client area of the frame
    if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
        CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
    {
        TRACE0("Failed to create view window\n");
        return -1;
    }
    
for(i = 0; i < 5; i++)    
    {
    apChildWnd[i] = new CChildWnd;
    apChildWnd[i]->Create(NULL, NULL,  WS_VISIBLE , CRect(100, 20, 100, 100), this,(UINT)i);
    ::SetClassLong(apChildWnd[i]->GetSafeHwnd(), GCL_HCURSOR,(LONG)AfxGetApp()->LoadStandardCursor(IDC_IBEAM));
    // Создаем четыре всплывающих окна  
}
    for(i =0; i < 4; i++) 
{ 
apPopupWnd[i] = new CPopupWnd; 
apPopupWnd[i]->Create(NULL, NULL, WS_VISIBLE,rectDefault, this); 
    
//sprintf(szNameWnd, "Окно %d", i ) ; 
//apPopupWnd[i]->SetWindowText(szNameWnd); 

// Указываем номер окна в поле данных, ассоциированных с окном 
::SetWindowLong(apPopupWnd[i]->GetSafeHwnd(),GWL_USERDATA, i); }
// Формируем новый заголовок окна 


// Создаем перекрывающееся окно 
apPopupWnd[4] = new CPopupWnd; 
apPopupWnd[4]->Create(NULL, NULL, 0, rectDefault,this) ;
::SetWindowLong(apPopupWnd[i]->GetSafeHwnd(), GWL_USERDATA, 4); 
//sprintf(szNameWnd, "Окно %d", i); 
//apPopupWnd[4]->SetWindowText(szNameWnd); 
// Устанавливаем новый курсор для класса всплывающих окон 
::SetClassLong(apPopupWnd[0]->GetSafeHwnd(), GCL_HCURSOR,(LONG)AfxGetApp()->LoadStandardCursor(IDC_UPARROW));

// Создаем и устанавливаем новый цвет фона для всплывающих окон 
//HBRUSH hNewBrush = ::CreareSolidBrush(RGB(255, 255, 220)); 
//::SetClassLong(apPopupWnd[3]->GetSafeHwnd(),GCL_HBRBACKGROUND, (LONG ) hNewBrush); 
// Отображение всплывающих окон 
 HBRUSH hNewBrush = ::CreateSolidBrush(RGB(255, 255, 20));
 ::SetClassLong(apPopupWnd[4]->GetSafeHwnd(),
                GCL_HBRBACKGROUND,
                (LONG)hNewBrush);

apPopupWnd[0]->SetWindowText((LPCTSTR)"Москва"); 
apPopupWnd[1]->SetWindowText((LPCTSTR)"Лондон");//+1
apPopupWnd[2]->SetWindowText((LPCTSTR)"Гонк-Конг");
apPopupWnd[3]->SetWindowText((LPCTSTR)"Копенгаген");
apPopupWnd[4]->SetWindowText((LPCTSTR)"Киев");//+2

 for(i = 0; i < 5; i++) 
{ 
apPopupWnd[i]->ShowWindow(SW_SHOWNORMAL); 
apPopupWnd[i]->UpdateWindow();
}
    
    return 0;
}


Как индексы окон передавать в OnTimer, что бы для каждого окна передавать по своему смещение времени?

Это сообщение отредактировал(а) SAVEL - 14.4.2008, 15:23
--------------------
В любых делах при максимуме сложности подход к проблеме всё-таки один! Желание - это множество возможностей, а нежелание - это множество причин !!!
PM MAIL   Вверх
dizzy1984
Дата 15.4.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я прошу админов переместить эту тему в раздел "Visual C++/MFC/WTL", т.к она для него по смыслу и помощь будет оказана скорее всего только там.
Мое, возможно ошибочное, мнение заключается в том, что не нужно создавать окна, родителем которых будет главное окно SDI/MDI приложения, вместо этого нужно создавать окна-потомки от фреймов детей, т.е CMDIChildWnd(для MDI) и CFrameWnd(для SDI если окно дочернее по отношению к главному). Поскольку такая архитектура имеет в своем центре документ, а главное окно несет смысловую нагрузку контейнера для документов, которое имеет все необходимые мульки. 
Пока же, пойдем неправильно дорогой... В таком случае функцию OnTimer лучше  определить у главного окна CMainFrame.
Код

void CMainFrame::OnTimer(UINT nIDEvent)
{
    for(i = 0; i < 5; i++)     
    {    
        apChildWnd[i]->SetWindowText(...);
        apPopupWnd[i]->SetWindowText(...);
    }
    CFrameWnd::OnTimer(nIDEvent);
}


Это сообщение отредактировал(а) dizzy1984 - 15.4.2008, 11:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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