Иконка в системном трее
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Иконка в системном трее
Есть данный код:
И есть два вопроса)))).
1. Почему в трее не отображается иконка программы (по условию .hIcon = LoadIcon (NULL, IDI_APPLICATION)), хотя иконка основного окна отображается верно? В файле ресурсов ID иконки = 0. В чем дело?
2. Как заставить смениться иконку в трее после звукового сигнала? Она меняется разворотом и свертыванием окна. А надо самостоятельно.
- Код:
#define WIN_INCLUDEALL
#include "windows.bi"
#include "fbgfx.bi"
#define WM_SHELLNOTIFY WM_USER + 1
Declare Function NewWindowProc(As HWND,As Uinteger,wParam As WPARAM,lParam As LPARAM) As LRESULT
Dim As HWND hWin
Dim Shared As WNDPROC OldWindowProc
Dim Shared q As Integer, q1 As string
q=0
ScreenRes 640,480,32
WindowTitle "Minimize me, press any key key for quit"
ScreenControl FB.GET_WINDOW_HANDLE,cast(Integer,hWin)
OldWindowProc = cptr(WNDPROC,SetWindowLong(hWin,GWL_WNDPROC,cast(DWORD,@NewWindowProc)))
' Set up our notify icon
Dim Shared As NOTIFYICONDATA NID
With NID
.cbSize = SizeOf (NOTIFYICONDATA)
.hWnd = hWin
.hIcon = LoadIcon (NULL, IDI_QUESTION)
.uFlags = NIF_INFO Or NIF_MESSAGE Or NIF_TIP Or NIF_ICON
.uCallbackMessage = WM_SHELLNOTIFY
.szTip = "The Tip"
.szInfoTitle = "бла-бла-бла"
.szInfo = "The Info"
End With
Function NewWindowProc(Byval hWin As HWND, _
Byval Msg As Uinteger, _
Byval wParam As WPARAM, _
Byval lParam As LPARAM) As LRESULT
Dim As RECT rcWindow,rcTray
Dim As HWND hWndTaskBar,hWndTray
Select Case As Const Msg
Case WM_SYSCOMMAND
If wParam = SC_MINIMIZE Then
' Get the system tray's hWnd
hWndTaskBar = FindWindow("Shell_TrayWnd", NULL)
hWndTray = FindWindowEx(hWndTaskBar, 0, "TrayNotifyWnd", NULL)
' Show the notify icon
Shell_NotifyIcon (NIM_ADD, @NID)
' Animate the window closing to the tray
GetWindowRect hWin, @rcWindow
GetWindowRect hwndTray, @rcTray
DrawAnimatedRects hWin, IDANI_CAPTION, @rcWindow, @rcTray
' Hide the window
ShowWindow(hWin, SW_HIDE)
Return False
End If
Case WM_SHELLNOTIFY
If lParam = WM_LBUTTONDBLCLK Then
' Restore the window
ShowWindow (hWin, SW_SHOWMINIMIZED)
SendMessage(hWin, WM_SYSCOMMAND, SC_RESTORE,0)
Shell_NotifyIcon(NIM_DELETE,@NID)
End If
End Select
Return OldWindowProc(hWin, Msg, wParam, lParam)
End Function
qw:
q1=InKey
If q1=Chr(27) Then End
q=q+1
If q=5000 Then
q=0
With NID
.cbSize = SizeOf (NOTIFYICONDATA)
.hWnd = hWin
.hIcon = LoadIcon (NULL, IDI_APPLICATION)
.uFlags = NIF_INFO Or NIF_MESSAGE Or NIF_TIP Or NIF_ICON
.uCallbackMessage = WM_SHELLNOTIFY
.szTip = "ОПА!!!"
.szInfoTitle = "ОПА!!!"
.szInfo = "ОПА!!!"
End With
beep
EndIf
Print q
GoTo qw
И есть два вопроса)))).
1. Почему в трее не отображается иконка программы (по условию .hIcon = LoadIcon (NULL, IDI_APPLICATION)), хотя иконка основного окна отображается верно? В файле ресурсов ID иконки = 0. В чем дело?
2. Как заставить смениться иконку в трее после звукового сигнала? Она меняется разворотом и свертыванием окна. А надо самостоятельно.
Re: Иконка в системном трее
Со вторым вопросом разобрался. А первый все еще в силе.
Добавился другой вопрос:
периодически при запуске программы выскакивает ошибка, пробовал на нескольких ПК. В чем может быть косяк?
Добавился другой вопрос:
периодически при запуске программы выскакивает ошибка, пробовал на нескольких ПК. В чем может быть косяк?
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|