트 레이 기능 구현 (MFC)

2676 단어 qqshelluserdeletemfc
트 레이 기능 은 우리 가 매일 사용 하 는 것 과 같은 많은 곳 에서 사용 된다.
QQ
, 클릭 최소 화 시
QQ
주 화면 은 자동 으로 숨겨 집 니 다. 데스크 톱 오른쪽 아래 에 있 는 것 을 볼 수 있 습 니 다.
QQ
아이콘
QQ
그림 을 그 릴 때 메 인 화면 을 표시 할 수 있다.이러한 트 레이 기능 의 실현 은 매우 간단 하 다. 다음은 트 레이 기능 의 실현 과정 을 제시한다.
 
1 클래스 에 NOTIFIICONDATA 형식의 구성원 변 수 를 추가 합 니 다 mnid
protected:
HICON m_hIcon;
NOTIFYICONDATA m_nid;
 
2 클래스 초기 화 함수 OnInitDialog 에서 구조 체 NOTIFIICONDATA 를 초기 화 합 니 다.
ZeroMemory(&m_nid, sizeof(m_nid));
m_nid.cbSize = sizeof(m_nid);
m_nid.hWnd = this->m_hWnd;
m_nid.uID = IDR_MAINFRAME;
m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
m_nid.hIcon=LoadIcon(AfxGetInstanceHandle(),
MAKEINTRESOURCEA(IDR_MAINFRAME));
//WM_NOTIFIICON 이 트 레이 아이콘 을 클릭 할 때 발생 하 는 메시지
m_nid.uCallbackMessage = WM_NOTIFYICON;
strcpy(m_nid.szTip, "hahaya");
 
3 정의 WMNOTIFIICON 의 처리 과정
#define WM_NOTIFYICON WM_USER + 100
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);
 
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
 
void CMyDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)

{

POINT pt;

GetCursorPos(&pt);

switch(lParam)
    {
        case WM_LBUTTONDBLCLK:

            ShowWindow(SW_SHOW);

            ShowWindow(SW_SHOWNORMAL);

            Shell_NotifyIcon(NIM_DELETE, &m_nid);

            break;
    }

}


4 창 에서 발생 하 는 창의 크기 가 변 하 는 WM 캡 처SIZE 메시지 (클래스 마법사 로 대화 상자 에 WM SIZE 메 시 지 를 추가 할 수 있 습 니 다)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);
afx_msg void OnSize(UINT nType, int cx, int cy);
 
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
ON_WM_SIZE()
 
void CMyDlg::OnSize(UINT nType, int cx, int cy) 

{

CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

if(nType == SIZE_MINIMIZED)
    {
        Shell_NotifyIcon(NIM_ADD, &m_nid);
        ShowWindow(SW_HIDE);
    }
}

좋은 웹페이지 즐겨찾기