Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] ProgressBar verde

    Ciao ragazzi, questo codice funziona eccetto che la prgress bar non è verde....come quelle che si vedono di solito.....lo stesso problema l'ho riscontrato nella classe Button.....perfavore aiutatemi

    codice:
    // SetWindowTheme.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include "SetWindowTheme.h"
    #include <windows.h>
    #include <CommCtrl.h>
    #pragma comment(lib,"Comctl32.lib")
    
    #include <tchar.h>
    #include <Uxtheme.h>
    #pragma comment(lib,"UxTheme.lib")
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";
    HINSTANCE hinst; 
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
        hinst = hThisInstance;
        
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default color as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Windows App",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               544,                 /* The programs width */
               375,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
        
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nFunsterStil);
        
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    static RECT rcClient;  // Client area of parent window 
    static int cyVScroll;  // Height of scroll bar arrow    
    static HWND hwndPB;
    
        switch (message)                  /* handle the messages */
        {
            case WM_CREATE:
            
                 SetTimer(hwnd,10,0,0);
                 InitCommonControls(); 
                 
    
                 GetClientRect(hwnd, &rcClient); 
                 cyVScroll = GetSystemMetrics(SM_CYVSCROLL); 
    
                 hwndPB = CreateWindowEx(0, PROGRESS_CLASS,(LPTSTR) NULL, WS_CHILD | WS_VISIBLE,
                 rcClient.left, rcClient.bottom - cyVScroll, rcClient.right, cyVScroll, 
                 hwnd, (HMENU) 0, hinst, NULL);
    			 SetWindowTheme(hwndPB, L"explorer", NULL);
                 SendMessage(hwndPB, PBM_SETRANGE, 0,MAKELPARAM(0, 180)); 
                 SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0); 
    
                 break;
                 
            case WM_DESTROY:
                DestroyWindow(hwndPB);
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            case WM_TIMER:
                 SendMessage(hwndPB, PBM_STEPIT, 0, 0);
                 SetTimer(hwnd,10,0,0);
                 break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }

  2. #2
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    mmmm

    forse non ho capito bene.....è giusto così?
    Nome dell'applicazione SetWindowTheme.exe

    Si parte con il codice

    SetWindowTheme.rc
    codice:
    //Microsoft Visual C++ generated resource script.
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "SetWindowTheme.exe.manifest"
    SetWindowTheme.exe.manifest
    codice:
    //Questo sorgente è stato aggiunto all'albero del progetto
    //Copiato lettere per lettera da MSDN
    
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    
    <assemblyIdentity
    
    version="1.0.0.0"
    
    processorArchitecture="X86"
    
    name="CompanyName.ProductName.YourApp"
    
    type="win32"
    
    />
    
    <description>Your application description here.</description>
    
    <dependency>
    
    <dependentAssembly>
    
    <assemblyIdentity
    
    type="win32"
    
    name="Microsoft.Windows.Common-Controls"
    
    version="6.0.0.0"
    
    processorArchitecture="X86"
    
    publicKeyToken="6595b64144ccf1df"
    
    language="*"
    
    />
    
    </dependentAssembly>
    
    </dependency>
    
    </assembly>
    Non ho caricato in memoria la .dll Comctl32.dll, ma ho usato un #pragma comment(lib,"Comctl32.lib")....

    risultato sempre quello di prima e niente barra verde

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Ecco ho fatto una modifica al codice....

    Ecco ho fatto una modifica al codice seguendo le istruzioni di MSDN....ecco il codice....e il risultato è sempre lo stesso -.-"

    Le modifiche sono state applicate dentro WM_CREATE e WM_DESTROY

    codice:
    // SetWindowTheme.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include "SetWindowTheme.h"
    #include <windows.h>
    #include <CommCtrl.h>
    #pragma comment(lib,"Comctl32.lib")
    
    #include <tchar.h>
    #include <Uxtheme.h>
    #pragma comment(lib,"UxTheme.lib")
    
    #include <Vsstyle.h> 
    #include <Vssym32.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";
    HINSTANCE hinst; 
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
        hinst = hThisInstance;
        
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default color as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Windows App",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               544,                 /* The programs width */
               375,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
        
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nFunsterStil);
        
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    static RECT rcClient;  // Client area of parent window 
    static int cyVScroll;  // Height of scroll bar arrow    
    static HWND hwndPB;
    HDC hdc; 
    
        switch (message)                  /* handle the messages */
        {
            case WM_CREATE:
    		     hdc = GetDC(hwnd);
                 SetTimer(hwnd,10,0,0);
                 InitCommonControls(); 
                 GetClientRect(hwnd, &rcClient); 
                 cyVScroll = GetSystemMetrics(SM_CYVSCROLL); 
            	 
    
                 hwndPB = CreateWindowEx(0, PROGRESS_CLASS,(LPTSTR) NULL, WS_CHILD | WS_VISIBLE,
                 rcClient.left, rcClient.bottom - cyVScroll, rcClient.right, cyVScroll, 
                 hwnd, (HMENU) 0, hinst, NULL);
    
    			 HTHEME hTheme;
    			 hTheme = OpenThemeData(hwndPB, PROGRESS_CLASSW);
    
    			 
    			 RECT rc;
    
        	 	 GetWindowRect(hwndPB, &rc);
    
    	         if(hTheme)
               		 {
       				 DrawThemeBackground(hTheme, hdc, 	PP_BAR, 0, &rc, 0);       
                     }
    
    
                 SendMessage(hwndPB, PBM_SETRANGE, 0,MAKELPARAM(0, 180)); 
                 SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0); 
    
    			 DeleteDC(hdc);
                 break;
                 
            case WM_DESTROY:
                DestroyWindow(hwndPB);
    			CloseThemeData (hTheme);
    
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            case WM_TIMER:
                 SendMessage(hwndPB, PBM_STEPIT, 0, 0);
                 SetTimer(hwnd,10,0,0);
                 break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    xD

    mItaly...avevi detto che quando finivi gli esami ci davi un occhiata più approfondita qui....
    prefavore puoi farla......


    Comunque penso che il problema sia settare un opzione in visual studio, perchè con dev-c++ funziona! basta mettere il manifest nella cartella dove ci sono gli altri file

  6. #6
    Eeeh finiti, altri due a settembre.

    Comunque, secondo me dipende dal fatto che i manifesti in VS2008 sono gestiti dallo strumento manifesti, io darei un'occhiata in quella direzione (nella tab apposita nelle proprietà del progetto).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ...

    è proprio questo il problema in internet ho trovato pochissimo...dopo provo a vedere se c'è qualche opzione che estisce i .manifest.

    Comunque ho visual studio 2010.....





    EDIT


    CE L'HO FATTA: aggiungendo il manifest nelle risorse del progetto!

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.