Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 27 su 27
  1. #21
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Qualcosa comincia ad andare...ho modificato in questo modo

    codice:
    			POINT Position;
    			SetForegroundWindow(fakedialog);
    			GetCursorPos(&Position);
    			TrackPopupMenuEx(Menu,GetSystemMetrics(SM_MENUDROPALIGNMENT),Position.x,Position.y,fakedialog,NULL);
    Ed ora una sottospecie di menu esce (un quadratino non selezionabile e senza niente scritto)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #22
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Mmm quella sottospecie di menu è uscito solo una volta, ora non compare piu'.bo
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #23
    Magia!
    codice:
    #include <windows.h>
    #include "resource.h"
    
    HMENU Menu;
    
    INT_PTR CALLBACK dgproc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    {
    	if (Msg == WM_USER + 1100)
    	{
    		if (lParam == WM_RBUTTONDOWN)
    		{
    			POINT Position;
    			SetForegroundWindow(hWnd);
    			GetCursorPos(&Position);
    			TrackPopupMenuEx(Menu,GetSystemMetrics(SM_MENUDROPALIGNMENT),Position.x,Position.y,hWnd,NULL);
    
    		}
    
    	}
    	return 0;
    }
    
    int __stdcall WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
    {
    	HWND hWnd = CreateDialog(hInstance,MAKEINTRESOURCE(ID_DIALOG),GetDesktopWindow(),dgproc);
    	Menu = GetSubMenu(LoadMenu(hInstance,MAKEINTRESOURCE(ID_MENU)),0);
    
    	NOTIFYICONDATA ref;
    
    	memset(&ref,0,sizeof(ref));
    	ref.cbSize = sizeof(NOTIFYICONDATA);
    	ref.uID = 10182;
    	ref.uFlags = NIF_INFO|NIF_ICON|NIF_MESSAGE;
    	ref.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDC_ARROW));
    	ref.dwInfoFlags = NIIF_ERROR;
    	ref.hWnd = hWnd;
    	ref.uVersion = NOTIFYICON_VERSION;
    	ref.uCallbackMessage = WM_USER + 1100;
    	strcpy_s(ref.szInfo,"Prova messaggio");
    	strcpy_s(ref.szInfoTitle,"Prova messaggio");
    	strcpy_s(ref.szTip,"Prova messaggio!");
    
    	Shell_NotifyIcon(NIM_ADD,&ref);
    
    	BOOL bRet;
    	MSG msg;
    	while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) 
    	{ 
    		if (bRet == -1)
    		{
    			return 1;
    		}
    		else if (!IsWindow(hWnd) || !IsDialogMessage(hWnd, &msg)) 
    		{ 
    			TranslateMessage(&msg); 
    			DispatchMessage(&msg); 
    		} 
    	}
            return 0;
    }
    ma soprattutto nel file .rc
    codice:
    ID_MENU MENU 
    BEGIN
        POPUP "Test"
        BEGIN
            MENUITEM "Test1",                 ID_TEST_TEST1
            MENUITEM "Test2",                 ID_TEST_TEST2
            MENUITEM "Test3",                 ID_TEST_TEST3
        END
    END
    per rendere meglio l'idea agevolo screenshot.
    Immagini allegate Immagini allegate
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #24
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Con il tuo menu funziona.
    Non capisco perchè debba essere costretto a creare un submenu e selezionarlo, però.
    Walk Around?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #25
    No, credo proprio che sia "by design"; l'idea di fondo credo che sia che i menu contestuali possono essere solo popup menu, e non barre dei menu. Inoltre credo che si sfrutti questo sistema per raggruppare tutti i menu contestuali in un unico "supermenu", da cui si prende il submenu adeguato alla situazione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #26
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ho inserito il dowload e parsing della painga in un thread separato: tutto ora corre piu' spedito
    L'unico problema che mi rimane è la chiusura del programma. Alla richiesta di chiusura, come devo chiudere il thread?
    Inizialmente ho messo un flag globale che se impostato su false,il thread doveva ritornare (ExitThread(0)) dopo l'ultimo download + parsing. Il fatto è che certe volte ci mette una marea di tempo a ritornare poichè prende ed esegue tutto il ciclo completo.

    Dunque: è necessario usare WaitForSingleObject e aspettare che il thread finisca prima di chiudere il tutto? O posso anche chiudere l'handle e programma e poi lasciare il thread al sistema operativo?

    Molto piu' veloce è la soluzione TerminateThread, ma a quanto pare è abbastanza pericolosa in quanto lascia stack, heap tutto così com'è.
    Considerando che subito dopo il programma viene chiuso e che quindi Windows dovrebbe pulire tutta l'area, è una "buona idea" matta?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #27
    La prima soluzione è la più classica e va bene nella maggior parte dei casi; al limite inserisci il controllo del flag in più punti (prima del download e prima del parsing). La TerminateThread va evitata, non è mai una buona soluzione. Per la questione del WaitForSingleObject, non so se è sicuro lasciare il thread "appeso" da solo, per il fatto che quando ritorna il main mi pare che venga deinizializzata la CRT, per cui il thread potrebbe avere dei problemi a richiamare le funzioni standard. Io metterei la WaitForSingleObject per andare sul sicuro, tanto il processo rimarrebbe comunque vivo finché il thread secondario non fosse terminato.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.