Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Восстановлеоние окна ShowWindow(), Подскажите что не так 
:(
    Опции темы
TeeT
Дата 12.1.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Диалог сворачивается в трэй, потом по идее должен восстанровится на 2-й щелчек по иконке в трее
Код

...
void CMyDlg::OnPaint() 
{
    
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
//добавляем иконку в трей
    MyTaskBarAddIcon(m_hWnd, 1, m_hIcon, "hint");
//если функция вызвана в первый раз то прячем окно
    static int visible = 1;
    visible = visible? ShowWindow(SW_HIDE):0;

}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}


void CMyDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
    CDialog::OnShowWindow(bShow, nStatus);
//если 2-й щелчек и диалог не виден, то показать! 0 иначе
    nStatus == WM_LBUTTONDBLCLK? !bShow? ShowWindow(SW_SHOWDEFAULT):
    0:0;
}

int CMouseDlg::MyTaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip)
{
    int res; 
    NOTIFYICONDATA tnid; 
 
    tnid.cbSize = sizeof(NOTIFYICONDATA); 
    tnid.hWnd = hwnd; 
    tnid.uID = uID; 

    tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; 
    tnid.uCallbackMessage = WM_SHOWWINDOW; //ИД события которое связывается с иконкой
    tnid.hIcon = hicon; 
    if (lpszTip) 
        lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip)); 
    else 
        tnid.szTip[0] = '\0'; 
 
    res = Shell_NotifyIcon(NIM_ADD, &tnid); 
 
    if (hicon) 
        DestroyIcon(hicon); 

    return res;
}

второй день мучаюсь smile
PM MAIL   Вверх
JoyEx
Дата 12.1.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

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



Надежнее сделать
#define WM_MYNOTIFYICON (WM_USER + 1)

должно получится
tnid.uCallbackMessage = WM_MYNOTIFYICON;

а восстанавливать окно удобнее через OpenIcon

Это сообщение отредактировал(а) JoyEx - 12.1.2006, 13:45


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Бугемот
Дата 12.1.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ShowWindow(SW_SHOWNORMAL); - восстанавливаете из трея
::SetWindowPos(GetSafeHwnd(), HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); - окно наверх

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


 




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


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

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