Newsgroup: it.comp.programmare.win32
Titolo: che cosa uso?

Leggendo MSDN e Prosise mi sono reso conto che le dialog boxes sono pensate
per interagire con l'utente. Benissimo, ma a questo punto mi sorge il
problema. Devo implementare per una mia applicazione una dialog box che
indichi lo stato della lettura di un file, cioè devo caricare in memoria dei
dati che stanno in un file di testo e siccome il procedimento è piuttosto
lungo faccio comparire una dialog box con una barra di progressione che
indichi quanto del processo è stato completato. Non è prevista nessuna
interazione con l'utente, infatti non voglio mettere un tasto Cancel e si
esce dalla dialog box solo per eventi gestiti dall'applicazione. In effetti
ho provato a creare una dialog box del genere, ma l'unica cosa che si
avvicina (e che se volgiamo funziona) è una dialog box non modale (chiamo la
create e poi gestisco i controlli della dialog box fino alla DestroyWindow).
Però vorrei che fosse modale, il problema è che la gestione dei controlli
(la barra di progressione) non so dove metterla, non posso farlo in nessun
modo nelle varie funzioni classiche: DoModal, OnInitDialog e via
discorrendo?
Che faccio? Mi devo tenere la non modale oppure ci sono altri metodi? alla
fine vorrei avere una dialog che funzioni esattamente come le dialog che
compaiono durante le installazioni che indicano lo stato di completamento
con varie diciture (static text) che indicano cosa sta installando in quel
momento.
Ciao e scusate per la lunghezza.
--
Roberto
FV
----------
robymes#
hotmail.com
ICQ# 37732681
----------
Resistance is futile

Dipende, vuoi che l'utente possa scegliere un'altra finestra del tuo
programma oppure no? Beh, se rispondi di si, devi orientarti perforza su una
modaless. Per gestire lo scorrimento della barra dovresti creare una
funzione come questa:
// Global variable
//     g_hinst - instance handle
extern HINSTANCE g_hinst;
BOOL ParseALargeFile(HWND hwndParent, LPSTR lpszFileName)
{
    RECT rcClient;  // client area of parent window
    int cyVScroll;  // height of scroll bar arrow
    HWND hwndPB;    // handle of progress bar
    HANDLE hFile;   // handle of file
    DWORD cb;       // size of file and count of bytes read
    LPCH pch;       // address of data read from file
    LPCH pchTmp;    // temporary pointer
    // Ensure that the common control DLL is loaded and create a
    // progress bar along the bottom of the client area of the
    // parent window. Base the height of the progress bar on
    // the height of a scroll bar arrow.
    InitCommonControls();
    GetClientRect(hwndParent, &rcClient);
    cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
    hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPSTR) NULL,
        WS_CHILD | WS_VISIBLE, rcClient.left,
        rcClient.bottom - cyVScroll,
        rcClient.right, cyVScroll,
        hwndParent, (HMENU) 0, g_hinst, NULL);
    // Open the file for reading, and retrieve the size of the file.
    hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ,
        (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
    if (hFile == (HANDLE) INVALID_HANDLE_VALUE)
        return FALSE;
    cb = GetFileSize(hFile, (LPDWORD) NULL);
    // Set the range and increment of the progress bar.
    SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, cb / 2048));
    SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0);
    // Parse the file.
    pch = (LPCH) LocalAlloc(LPTR, sizeof(char) * 2048);
    pchTmp = pch;
    do {
        ReadFile(hFile, pchTmp, sizeof(char) * 2048, &cb,
            (LPOVERLAPPED) NULL);
        .
        . // Include here any code that parses the file.
        .
        // Advance the current position of the progress bar
        // by the increment.
        SendMessage(hwndPB, PBM_STEPIT, 0, 0);
    } while (cb);
    CloseHandle((HANDLE) hFile);
    DestroyWindow(hwndPB);
    return TRUE;
}
A questo punto chiami la funzione all'interno del messaggio WM_CREATE o
OnDlgCreate(), se usi MFC.
Se invece la risposta alla prima domanda č no, allora č molto piů semplice e
puoi gestire la finestra come modale.

 funzione come questa:
Molto interessante, da dove l'hai preso?
Grazie per la risposta.


DALL'MSDN! LO TROVI CON VISUAL STUDIO.
PREGO, CIAO.