'Tray'에 해당되는 글 2건

  1. 2007.08.12 트레이 영역 구하는 함수 - GetTrayWndRect
  2. 2007.08.11 윈도우 탐색기(shell) 재시작시 Tray에 등록하기 1

트레이 영역 구하는 함수 - GetTrayWndRect

개발 2007. 8. 12. 00:11

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

윈도우의 트레이 영역을 구하는 함수이다.
윈도우가 트레이로 최소화 될때 DrawAnimatedRects(m_hWnd, IDANI_CAPTION, rcFrom, rcTo); 함수를 이용하면 최소화 되는 것처럼 트레이 영역으로 이동하는 것을 볼 수 있다.



void GetTrayWndRect(RECT *pRect)
{
    HWND hwndTaskBar=::FindWindow(_T("Shell_TrayWnd"), NULL);
    if (hwndTaskBar){
        HWND hwndTray=::FindWindowEx(hwndTaskBar, NULL, _T("TrayNotifyWnd"), NULL);
        if (hwndTray)
            ::GetWindowRect(hwndTray, pRect);
        else
       {    //tray부분을 못찾으면 task바의 구석탱이를 그렇다고 믿게 하자.
            ::GetWindowRect(hwndTaskBar, pRect);
            pRect->left=pRect->right-20;
            pRect->top=pRect->bottom-20;
        }
    }
    else
    {   //task바를 못찾으면 그냥 화면 하단부
        int nWidth = GetSystemMetrics(SM_CXSCREEN);
        int nHeight = GetSystemMetrics(SM_CYSCREEN);
        SetRect(pRect, nWidth-40, nHeight-20, nWidth, nHeight);
    }
}


:

윈도우 탐색기(shell) 재시작시 Tray에 등록하기

개발 2007. 8. 11. 23:58

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

윈도우 탐색기가 가끔가다가 죽는 경우가 있는데, 보통은 자동으로 다시 실행이 된다.
자동으로 실행이 않되면 작업관리자를 실행시켜서 새작업 실행으로 explorer.exe 를 실행시키면 된다.
그런데 윈도우 탐색기가 다시 실행되면 Tray 영역에 있던 아이콘이 사라지게 된다. 그러나 MSN 같은 몇몇 프로그램은 Trya 에 아이콘이 있는데, 그것을 다음과 같이 하면 된다.


// 메시지 등록
UINT g_uShellRestart;
g_uShellRestart = RegisterWindowsMessage(__Text(“TaskbarCreated”));

// Message Map 에서
ON_REGISTERED_MESSAGE(g_uShellRestart, OnTrayShow)

// 메시지 핸들러
LRESULT CMyDlg::OnTrayShow(WPARAM wParam, LPARAM lParam)
{
    // TrayIcon을 다시 보여줍니다. ShowTray는 Tray를 보여주는 함수입니다.
    m_Tray.ShowTray();
}


위에서 보면 알겠지만, explorer가 다시 실행될때 TaskbarCreated 라는 메세지가 발생이 된다.
이것을 잡아서 처리하면 되는 것이다.


: