Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 27
  1. #11
    Manca il message loop, che è necessario per i dialog modeless (è invece corretto ometterlo per i dialog modali, perché la funzione DialogBoxParam incorpora un suo message loop).
    codice:
    	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); 
    		} 
    	}
    P.S.: e non mettere mai più un
    codice:
    while(true)
    {
        ;
    }
    , che mi si stava impallando tutto!
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #12
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ok avrei altre domande.

    A) Ho creato un menu' che vorrei fosse visualizzato quando faccio click destro sull'icona che esce. Ho quindi scritto

    codice:
    INT_PTR CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	if (uMsg == WM_USER + 1100)
    		if (lParam == WM_RBUTTONDOWN)
    		{
    			SetForegroundWindow(fakedialog);
    			TrackPopupMenuEx(Menu,TPM_RIGHTALIGN,800,600,fakedialog,NULL);
    		}
    
    	return 0;
    }
    Con Menu un HMENU funzionante.

    Altro problema, come gestire il ciclo dei messaggi?
    L'applicazione fa praticamente un ciclo continuo fin quando non viene chiuso.
    Ho quindi racchiuso nel WinMain un ciclo infinto while(true).
    Dovendo fare sempre questo, dove inserire il ciclo dei messaggi?

    Inizialmente ho messo questo alla fine del codice, poco prima di ricominciare il loop. Il guaio è che premendo col tasto destro mentre viene eseguito il codice mio, i messaggi non vengono (giustamente) processati. Vengono processati soltanto alla fine.

    Altro problema, GetMessage sembra non ritornare finchè non gli arriva almeno 1 messaggio (anche se PeekMessage sembra essere la giusta soluzione).

    Devo impostare il ciclo in un'altro thread? O sto (molto probabilmente) sbagliando tutto?
    "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. #13
    Originariamente inviato da XWolverineX
    Altro problema, come gestire il ciclo dei messaggi?
    L'applicazione fa praticamente un ciclo continuo fin quando non viene chiuso.
    Ho quindi racchiuso nel WinMain un ciclo infinto while(true).
    Dovendo fare sempre questo, dove inserire il ciclo dei messaggi?
    Se tu hai delle finestre di qualunque genere (tranne i dialog modali) hai bisogno di un ciclo messaggi. Togli il while(true) e lascia il message loop.
    Inizialmente ho messo questo alla fine del codice, poco prima di ricominciare il loop. Il guaio è che premendo col tasto destro mentre viene eseguito il codice mio, i messaggi non vengono (giustamente) processati. Vengono processati soltanto alla fine.
    Non ho ben capito la questione, forse è meglio se riposti il codice modificato.
    Altro problema, GetMessage sembra non ritornare finchè non gli arriva almeno 1 messaggio (anche se PeekMessage sembra essere la giusta soluzione).
    È normale, dove sta il problema?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #14
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ok cercherò di spiegare meglio

    Riguardo al menu? Idee?

    codice:
    HMENU	Menu;
    HWND	fakedialog;
    MSG		Msg;
    
    INT_PTR CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	if (uMsg == WM_USER + 1100)
    		if (lParam == WM_RBUTTONDOWN)
    		{
    			SetForegroundWindow(fakedialog);
    			TrackPopupMenuEx(Menu,TPM_RIGHTALIGN,800,600,fakedialog,NULL);
    		}
    
    	return 0;
    }
    
    int __stdcall WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
    {
    //Varie dichiarazioni e inizializzazioni
    	Menu = LoadMenu(hInstance,MAKEINTRESOURCE(ID_MENU));
    	fakedialog = CreateDialogParam(hInstance,MAKEINTRESOURCE(FAKE_DIALOG),GetDesktopWindow(),DialogProc,NULL);
    
    	Shell_NotifyIcon(NIM_ADD,&ref);
    
    	while (true)
    	{
           //Codice codice codice codice codice
    
    	PeekMessage(&Msg,NULL,0,0,0);
    	IsDialogMessage(fakedialog,&Msg);
    
    	} //while infinito.
    
    	IPageDownloader::Delete(t);
    	return 0;
    }
    Lasciate stare se non ritorno i valori di ritorno, per ora è solo una prova.
    Come va sostituito?
    "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. #15
    Non mi piace quel
    codice:
    //Codice codice codice codice codice
    in mezzo al message loop: il message loop dovrebbe essere fatto come ho postato prima, e non bisognerebbe metterci roba in mezzo, che piuttosto va negli eventi adeguati o in un altro thread; cosa fa esattamente il codice in questione?
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #16
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Scarica una pagina HTML da internet. La parsa completamente per ottenere le informazioni che mi servono e in base a quelle costruisco le mie balloon da mostrare.

    Appena mostrate tutte la pagina va riscaricata e parsata di nuovo.
    "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. #17
    Che cosa usi per scaricare la pagina da internet? Non hai a disposizione dei metodi asincroni? In alternativa puoi mettere il download in un thread separato, e notificare al thread principale tramite un messaggio l'avvenuto download.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #18
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Essendo una pagina che richiede autenticazione, ho usato una DLL .NET e ne ho fatto un porting in C++.
    Comunque il problema è che anche durante il parsing, se premo col tasto destro non viene scatenato il messaggio: solo alla fine del parsing è possibile processare altri messaggi.
    Se mettessi download e parsing in un'altro thread, potrebbe processare meglio i messaggi della finestra, no?

    Riguardo al menu', non viene visualizzato. La procedura è corretta??
    "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

  9. #19
    Originariamente inviato da XWolverineX
    Essendo una pagina che richiede autenticazione, ho usato una DLL .NET e ne ho fatto un porting in C++.
    Se non sbaglio esiste la ottima libcurl per effettuare richieste HTTP/FTP/quellochevuoi utilizzabile direttamente in C++.
    Comunque il problema è che anche durante il parsing, se premo col tasto destro non viene scatenato il messaggio: solo alla fine del parsing è possibile processare altri messaggi.
    Se mettessi download e parsing in un'altro thread, potrebbe processare meglio i messaggi della finestra, no?
    Sì, puoi fare così; il download quando viene eseguito? Ad intervalli stabiliti, è scatenato da qualche evento o viene eseguito in continuazione?
    Riguardo al menu', non viene visualizzato. La procedura è corretta??
    L'unica cosa che mi pare errata è l'uso di TPM_RIGHTALIGN quando dovresti usare GetSystemMetrics(SM_MENUDROPALIGNMENT), ma non dovrebbe essere quello il problema...
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #20
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Sicuramente esistono altre librerie migliori (il wrapper .NET è veramente lento), ma per ora ho bisogno di arrangiarmi.

    Il download è eseguito in continuazione appena finita la visualizzazione delle balloon create.
    Proverò a mettere in un thread separato la gestione del file HTML.

    Riguardo il menu, i parametri li ho messi un pò a casaccio. Anche mettendo il GetSystemMetrics, il menu' non sembra apparire.
    "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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.