Jak w winapi ukryc okno na pasku zadan??

0

Jak w winapi ukryc okno na pasku zadan??

0
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

0

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?

0

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ń

0

A jak można zrobić to o czym ja mówiłem?

0

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?

0
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

0

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.

0

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)


0

ja pisze w dev-cpp i wszystko jest dobrze

1 użytkowników online, w tym zalogowanych: 0, gości: 1