Jak w winapi ukryc okno na pasku zadan??
SetWindowLongA(HWND, GWL_STYLE, WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_CLIPSIBLINGS | WS_POPUP | WS_VISIBLE)
SetWindowLongA(HWND, GWL_EXSTYLE, WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW)
Lepiej Od razu ustaw takie style przed otwarciem okna bo jakoś przycisk na pasku nie chce zniknąć, ani po show hide/restore ani po SetWindowPos
Czy to chodzi o to, że jak zminimalizuje to ikonka programu pokaże mi się koło zegara? Tak jak w kazzie albo gadu-gadu?
niee, do ikonki w trayu jest extra funkcja Shell_NotifyIconA
Koledze chodzi o takie okienko jak ma lista kontaktów GG (albo ApiSpy by ?ereK), bez przycisku na pasku zadań
A jak można zrobić to o czym ja mówiłem?
gdzies na poczatku dajesz:
NOTIFYICONDATA tray;
HMENU hTrayMenu;
tray.cbSize = sizeof(NOTIFYICONDATA);
tray.hWnd = hwnd;
tray.uID = 101;
tray.uFlags = NIF_MESSAGE | NIF_TIP | NIF_ICON;
tray.uCallbackMessage = WM_TRAY;
tray.hIcon = LoadIcon(0, IDI_APPLICATION);
lstrcpyn(tray.szTip, "Mp3Player", sizeof(tray.szTip));
if(!Shell_NotifyIcon(NIM_ADD, &tray))
{
MessageBox(0, "Bład Tray'a", "Bład", MB_OK);
}
hTrayMenu = LoadMenu(hInstance, "TrayMenu");
hTrayMenu = GetSubMenu(hTrayMenu, 0);
a w petli komunikatow:
case WM_TRAY:
switch((UINT)lParam)
{
case WM_LBUTTONDBLCLK:
if (oknojestwidzialne)
{
ShowWindow(hwnd,SW_HIDE);
oknojestwidzialne=false;
}
else
{
ShowWindow(hwnd,SW_SHOWNORMAL);
SetFocus(hwnd);
oknojestwidzialne=true;
}
break;
case WM_RBUTTONDOWN:
POINT point;
point.x = LOWORD(lParam);
point.y = LOWORD(lParam);
ClientToScreen(hwnd, &point);
TrackPopupMenu(hTrayMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);
break;
}
break;
A tak przy okazji to mam pytanie. Jak zrobic do tego menu kontekstowe, a dokladniej jak wziasc x i y dla tego menu?
GetCursorPos(point)
ScreenToClient(okno.hwnd, point)
i już masz prawidłową pozycję w point.x i point.y
jedno moje zalecenie: co kilka sekund (np 5) należy wywoływać
x=Shell_NotifyIconA(NIM_MODIFY, NOTIFYICONDATA) - dla każdej ikonki w trayu
z tymi samymi parametrami co w NIM_ADD
i jeśli x=0 to zrobić Shell_NotifyIconA(NIM_DELETE, NOTIFYICONDATA)
i załadować ikonkę na nowo, bo wiadomo że explorer lubi padać a ikonka sama się nie naprawi
no i lepiej case WM_RBUTTONUP zamiast WM_RBUTTONDOWN
Mam jeszcze jedno pytanie do tego menu. Jak je usunac gdy nie zostanie wybrana opcja i kliknie sie poza obszar tego menu. Wtedy ono nie znika a windows zaczyna wariowac z monu podrecznym.
gdzies na poczatku dajesz:
NOTIFYICONDATA tray;
HMENU hTrayMenu;
tray.cbSize = sizeof(NOTIFYICONDATA);
tray.hWnd = hwnd;
tray.uID = 101;
tray.uFlags = NIF_MESSAGE | NIF_TIP | NIF_ICON;
tray.uCallbackMessage = WM_TRAY;
tray.hIcon = LoadIcon(0, IDI_APPLICATION);
lstrcpyn(tray.szTip, "Mp3Player", sizeof(tray.szTip));
if(!Shell_NotifyIcon(NIM_ADD, &tray))
{
MessageBox(0, "Bład Tray'a", "Bład", MB_OK);
}
hTrayMenu = LoadMenu(hInstance, "TrayMenu");
hTrayMenu = GetSubMenu(hTrayMenu, 0);
a w petli komunikatow:
case WM_TRAY:
switch((UINT)lParam)
{
case WM_LBUTTONDBLCLK:
if (oknojestwidzialne)
{
ShowWindow(hwnd,SW_HIDE);
oknojestwidzialne=false;
}
else
{
ShowWindow(hwnd,SW_SHOWNORMAL);
SetFocus(hwnd);
oknojestwidzialne=true;
}
break;
case WM_RBUTTONDOWN:
POINT point;
point.x = LOWORD(lParam);
point.y = LOWORD(lParam);
ClientToScreen(hwnd, &point);
TrackPopupMenu(hTrayMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);
break;
}
break;
A tak przy okazji to mam pytanie. Jak zrobic do tego menu kontekstowe, a dokladniej jak wziasc x i y dla tego menu?
MAM VC++6.0
i jak to dodam i kompiluje to wyskakuje błąd:
--------------------Configuration: LED lighter - Win32 Debug--------------------
Compiling...
LED lighter.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\LED\LED.cpp(30) : error C2146: syntax error : missing ';' before identifier 'tray'
C:\Program Files\Microsoft Visual Studio\MyProjects\LED\LED.cpp(30) : error C2501: 'NOTIFYICONDATA' : missing storage-class or type specifiers
C:\Program Files\Microsoft Visual Studio\MyProjects\LED \LED.cpp(30) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
LED lighter.exe - 3 error(s), 0 warning(s)
ja pisze w dev-cpp i wszystko jest dobrze