Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверить открыто окно или нет 
:(
    Опции темы
NewLine
Дата 26.6.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет.
В обработчике меню ставлю функцию открытия окна NewFormView_2 прописанного в шаблоне.
CMultiDocTemplate* m_pTemplateHex;
Подскажите пожалуйста, как мне узнать открыто ли это окно или нет при следующем событии и если открыто, то просто активизировать его , а не открывать заново.
Код

void CMainFrame::OnWindowNewwindow() 
{
CDocument* pDocument = new CDocument();
CDocTemplate* pTemplate = ((CRegisterProblem_1App*) AfxGetApp())->m_pTemplateHex;
ASSERT_VALID(pTemplate);
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, NULL);
if (pFrame == NULL)
{
TRACE("Предупреждение: не удалось создать новую рамку");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
return; // сбой команды
}
pTemplate->InitialUpdateFrame(pFrame, pDocument);    

}


Спасибо. 
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
Coocky
Дата 26.6.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата(NewLine @  26.6.2006,  13:27 Найти цитируемый пост)
Подскажите пожалуйста, как мне узнать открыто ли это окно или нет при следующем событии и если открыто, то просто активизировать его , а не открывать заново.


GetWindowPlacement(  WINDOWPLACEMENT* lpwndpl )

typedef struct tagWINDOWPLACEMENT {     /* wndpl */
   UINT length;
   UINT flags;
   UINT showCmd;
   POINT ptMinPosition;
   POINT ptMaxPosition;
   RECT rcNormalPosition;
} WINDOWPLACEMENT;


showCmd 
Specifies the current show state of the window. This member can be one of the following values: 
SW_HIDE   Hides the window and passes activation to another window. 
SW_MINIMIZE   Minimizes the specified window and activates the top-level window in the system's list. 
SW_RESTORE   Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position (same as SW_SHOWNORMAL). 
SW_SHOW   Activates a window and displays it in its current size and position. 
SW_SHOWMAXIMIZED   Activates a window and displays it as a maximized window. 
SW_SHOWMINIMIZED   Activates a window and displays it as an icon. 
SW_SHOWMINNOACTIVE   Displays a window as an icon. The window that is currently active remains active. 
SW_SHOWNA   Displays a window in its current state. The window that is currently active remains active. 
SW_SHOWNOACTIVATE   Displays a window in its most recent size and position. The window that is currently active remains active. 
SW_SHOWNORMAL   Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position (same as SW_RESTORE). 

Думаю без комментариев smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Kostt
Дата 26.6.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

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



Например так. Заведи CFrameWnd* m_pFrame как член класса CMainFrame и проверяй его хэндл функцией IsWindow.
Код


void CMainFrame::OnWindowNewwindow() 
{
    CDocument* pDocument = new CDocument();
    CDocTemplate* pTemplate = ((CRegisterProblem_1App*) AfxGetApp())->m_pTemplateHex;
    ASSERT_VALID(pTemplate);

    if( !IsWindow( m_pFrame->GetSafeHwnd() ) )
    {
    //Окна не существует, создаем
        CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, NULL);
        if ( !pFrame )
        {
            TRACE("Предупреждение: не удалось создать новую рамку");
            AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
            return; // сбой команды
        }
        pTemplate->InitialUpdateFrame(pFrame, pDocument);    

    }
    else
    {
        m_pFrameWnd->ShowWindow( SW_SHOW );//Окно уже существует, активируем
    }
}

А главное - почитай о соглашениях по форматированию кода C/C++ 
PM MAIL   Вверх
Coocky
Дата 26.6.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Так...Ну я думаю кто-то из нас не понял вопроса.. smile  Прийдет NewLine, пусть выбирет  smile
Как я понял у человека MDI.. Есть уже созданые дочерние окна. Они могу быть свернуты , а могут быть нет. Он хочет "поднимать" свернутые и активизировать, а развернутые-просто активизировать smile   

Это сообщение отредактировал(а) Coocky - 26.6.2006, 14:27


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
NewLine
Дата 26.6.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, у меня MDI приложения.
В меню есть два пункта 1 документ и 2 документ.
Так вот я хочу чтобы каждый документ открывался один раз(первый), а в следующий раз при нажатии одного из пунктов меню или ничего не происходило или активизировался тот документ, который был вызван из меню.  
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
Coocky
Дата 26.6.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Перед созданием окна,в обработчике делаешь следущее
1.перебираешь все документы связаные с шаблоном.
CDocTemplate::GetFirstDocPosition 
CDocTemplate::GetNextDoc
2.внутри этого шаблона перебираешь все окна связаные с документом
CDocument::GetFirstViewPosition
CDocument::GetNextView
3.Если указатель нулевой-создаем окно. Если нет вызываем для данного окна функцию GetWindowPlacement, и в соотвествии с флагом UINT showCmd, который получишь -сделать стандартные операции над этим окном ( SetWindowPlacement(),Развернуть,активировать и т.д.)
Ну что-то типа этого smile   

Это сообщение отредактировал(а) Coocky - 26.6.2006, 15:41


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
NewLine
Дата 29.6.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет.
Написал код для проверки окна.
Но не понимаю почему он не заходит во второй while smile 

Код

CDocManager* pDocManager = AfxGetApp()->m_pDocManager;

POSITION posTemplate = pDocManager->GetFirstDocTemplatePosition();
while(posTemplate)
{
    CDocTemplate* pTemplate = pDocManager->GetNextDocTemplate(posTemplate);
    POSITION posDoc = pTemplate->GetFirstDocPosition();
    while(posDoc)
    {
        CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
        POSITION posView = pDoc->GetFirstViewPosition();
    
        while (posView)
        {
            CView* pView = pDoc->GetNextView(posView);
            if( pView == NULL ) MessageBox("Открываю окно");

            //            pView->UpdateWindow();
        }
    } 
}
 
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
Earnest
Дата 29.6.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Ну так посмотри в отладчике: наверное, список видов документа пуст. 


--------------------
...
PM   Вверх
NewLine
Дата 29.6.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пуст.
А чего с этим делать-то? smile  
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система
PM MAIL   Вверх
Earnest
Дата 30.6.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Открыть вью для данного документа "правильным" способом - через CDocTemplate::OpenDocumentFile 


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


 




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


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

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