Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo configurar el programa para que se minimice en la bandeja después del inicio?

¿Cómo configurar el programa para que se minimice en la bandeja después del inicio?

Para minimizar un programa en la bandeja, debe interceptar el mensaje WM_SIZE y responder al mensaje en consecuencia. (WM_SIZE se genera cuando cambia el tamaño de la ventana)

Puedes sobrecargar el método OnSize() para implementar el icono de la bandeja.

La estructura de datos NOTIFYICONDATA se utiliza para almacenar información sobre el icono de la bandeja. Su estructura es la siguiente:

typedef struct _NOTIFYICONDATA {

DWORD cbSize

; p>

HWND hWnd;

UINT uID;

UINT uFlags

UINT uCallbackMessage

HICON hIcon; p>

WCHAR szTip[64];

}NOTIFYICONDATA, *PNOTIFYICONDATA;

Primero, debes agregar la variable NOTIFYICONDATA en la clase de diálogo:

NOTIFYICONDATA nid;

Luego, debes realizar alguna inicialización de nid en OnInitDialog():

nid.cbSize = (DWORD)sizeof( NOTIFYICONDATA); data

nid.hWnd = this-gt; GetSafeHwnd(); //Obtener el identificador de la ventana actual

nid.uID = 100 //Especificar el ID de este nid

p>

nid.uFlags = NIF_NOTIFYICONDATA; #definido WM_TRAYICON_RESTORE WM_USER 101 //Este valor suele ser mayor que 100

Sobrecarga el método OnSize(), si la clase de diálogo es CTrayIconDlg;

void CTrayIconDlg:: OnSize(UINT nType, int cx, int cy)

{

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

if (nType== TAMAÑO_MINIMIZED) //si el evento está minimizado

{

Shell_ NotifyIcon(NIM_ADD, amp; nid); //agrega un icono al área de la bandeja

ShowWindow(SW_HIDE); // Ocultar la ventana principal

}

}

Ejecute el programa, minimice la ventana y compruebe si la ventana se ocultó correctamente en la bandeja del sistema.

Ahora no puede restaurar la ventana del programa. No importa si hace clic o hace doble clic en el icono pequeño, no hay respuesta. Esto se debe a que su información no se procesa.

Primero, agregue un método a la clase CTrayIconDlg:

afx_msg LRESULT OnRestore(WPARAM wParam, LPARAM lParam);

La implementación es la siguiente:

p>

LRESULT CTrayIconDlg:.OnRestore(WPARAM wParam, LPARAM lParam)

{

if( lParam == WM_LBUTTONDOWN ) //Restaurar si se hace clic izquierdo en el icono

{

ShowWindow(SW_ SHOWNORMAL); //Mostrar la ventana principal

this-gt; SetWindowPos(amp; wndTopMost, 0, 0, 0, 0, 0 , SWP_NOMOVE|SWP_NOSIZE) ; //hacer que la ventana esté siempre en la parte superior

//Shell_ NotifyIcon(NIM_DELETE, amp; nid); restaurado; de lo contrario, mantenga el ícono de la bandeja

}

devuelve 0;

}

Agregue este método al mapa de mensajes:

Insertar ON_MESSAGE (WM_TRAYICON_RESTORE, OnRestore) en la tabla de mapeo

BEGIN_MESSAGE_MAP(CForexDemoDlg, CDialog)

...

...

ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)

END_MESSAGE_MAP().