Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258

    [C++] come si usano i tab control?

    come si fa a fare un'applicazione con più schede? come ad es mozilla... che permette la navigazione a schede... (esempio stupido...)

    devo fare un'applicazione con due di queste "tab". il Tab Control va bene? come si utilizza? come si fa a dire quanti tab ci sono, come si scrivono le descrizioni (uso Visual C++ e il progetto usa le API) e cone si fa ad assegnare dei controlli (pulsanti ecc...) alle schede in modo che un pulsante sia visibile solo quando è attiva la scheda 1?

    grazie
    Andate su BiteFight

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C++] come si usano i tab control?

    Originariamente inviato da frarugi87
    come si fa a fare un'applicazione con più schede? come ad es mozilla... che permette la navigazione a schede... (esempio stupido...)

    devo fare un'applicazione con due di queste "tab". il Tab Control va bene? come si utilizza? come si fa a dire quanti tab ci sono, come si scrivono le descrizioni (uso Visual C++ e il progetto usa le API) e cone si fa ad assegnare dei controlli (pulsanti ecc...) alle schede in modo che un pulsante sia visibile solo quando è attiva la scheda 1?
    Usare un "tab control" a livello di API Win32 non è certo il massimo della produttività/facilità .... te lo dico subito ma non per spaventarti.

    Innanzitutto il tab control si fa carico solamente di visualizzare/gestire le "linguette" che possono essere messe su un lato del controllo. E basta. Non si occupa minimamente dei contenuti associati alle singole linguette!

    Il programmatore deve farsi carico lui di:
    a) Creare/caricare le varie pagine, che in genere sono dialog-box con lo stile DS_CONTROL, cioè adatte per essere usate come se fossero controlli.

    b) Nascondere/visualizzare la corretta pagina in base alla linguetta selezionata. Questo lo si fa rispondendo alla notifica TCN_SELCHANGE inviata tramite il messaggio WM_NOTIFY.


    EDIT: trovi tutte le info sul Tab control qui
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    Usare un "tab control" a livello di API Win32 non è certo il massimo della produttività/facilità .... te lo dico subito ma non per spaventarti.
    mmmm.... cosa mi consigli di usare invece di un tab control?

    Il programmatore deve farsi carico lui di:
    a) Creare/caricare le varie pagine, che in genere sono dialog-box con lo stile DS_CONTROL, cioè adatte per essere usate come se fossero controlli.
    ok... quindi creo il tab control, creo tante dialog box quante sono le schede e le posiziono in corrispondenza del tab ctrl? ma come faccio a posizionarla nel punto giusto? e per farle apparire, le creo con la DialogBox?

    inoltre non so come gestire i tab. da dove tiro fuori l'hwnd del tab control?

    hai un breve codice di una form con un tab dentro? grazie davv
    Andate su BiteFight

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da frarugi87
    ok... quindi creo il tab control, creo tante dialog box quante sono le schede e le posiziono in corrispondenza del tab ctrl? ma come faccio a posizionarla nel punto giusto? e per farle apparire, le creo con la DialogBox?

    inoltre non so come gestire i tab. da dove tiro fuori l'hwnd del tab control?
    Troppe domande .... (e devi ancora "farti le ossa" in Win32....).

    Il controllo tab control lo puoi creare sia da codice con CreateWindow che nel template della dialog-box. Nel primo caso hai direttamente l'handle. Ma in generale (e parlo davvero molto in generale) devi conoscere una funzione che si chiama GetDlgItem, a cui passi l'handle HWND della finestra padre e il ID del controllo e ti restituisce l'handle HWND del controllo.

    Per avere informazioni sull'area disponibile, devi inviare al tab control il messaggio TCM_ADJUSTRECT (o in alternativa usare la macro TabCtrl_AdjustRect() ).

    Per creare le dialog delle pagine direi che è meglio usare CreateDialog (non modali) in quanto la gestione dei messaggi è già a carico di "quello" che tu userai per la gestione della finestra principale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    se provo a creare il tab control nell'editor del dialogbox la form non mi parte più... c'è qualche proprietà che devo selezionare?
    Andate su BiteFight

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da frarugi87
    se provo a creare il tab control nell'editor del dialogbox la form non mi parte più... c'è qualche proprietà che devo selezionare?
    Hai fatto l'init dei common controls??

    #include <commctrl.h>

    ...

    InitCommonControls();
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    dove va aggiunto?

    io ho provato prima di chiamare la DialogBox oppure nel ciclo dei messaggi dentro "WM_INITDIALOG"

    ho incluso commctrl.h e, se aggiungo anche InitCommonControls();, il linker dice

    1>Prova2.obj : error LNK2001: simbolo esterno __imp__InitCommonControls@0 non risolto
    1>C:\Documents and Settings\fra\Documenti\Visual Studio 2005\Projects\Prova2\Debug\Prova2.exe : fatal error LNK1120: 1 esterni non risolti
    Andate su BiteFight

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    non sai perchè?
    Andate su BiteFight

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    aggiungendo

    #pragma comment(lib, "D:\\Programmi\\Microsoft Visual Studio 8\\VC\\PlatformSDK\\Lib\\ComCtl32.Lib")

    invece funziona...
    Andate su BiteFight

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da frarugi87
    #pragma comment(lib, "D:\\Programmi\\Microsoft Visual Studio 8\\VC\\PlatformSDK\\Lib\\ComCtl32.Lib")
    Questa va anche bene ma: 1) Hai messo un path assoluto (già sul mio PC sarebbe diverso) e 2) era meglio se lo impostavi nelle opzioni del progetto.

    Apri 'ste proprietà del progetto e guarda un po' cosa c'è, dai!! Ci troverai una sezione "Linker" e nella sotto sezione "Input" c'è una voce "Dipendenze aggiuntive". Lì vanno messi oggetti/librerie aggiuntive con cui fare il link.

    Poi la InitCommonControls() in genere la si mette in WinMain(), prima di fare qualunque altra cosa con l'interfaccia grafica.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.