+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [Win32] SetLayeredWindowAttribute

  1. #1
    lucagalbu non  in linea Scolaretto
    Luogo
    Italy
    Post
    244

    [Win32] SetLayeredWindowAttribute

    Ciao a tutti. In un mio progetto dovrei inserire la funzione SetLayeredWindowAttribute, con VB non ho problemi a caricarla dalla libreria user32.dll, ma con visual c++ net non riesco. In che include si trova?

  2. #2
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,631
    Blogs
    5
    L'include e' Winuser.h

    Pero', se non usi un compilatore recente, non trovi in questo include la SetLayeredWindowAttribute perche' e' di recente introduzione (per intenderci, la trovi in VC7 ma non in VC6 ...).

    Puoi rimediare richiamando "dinamicamente" la API dopo aver caricato la User32.dll ...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    lucagalbu non  in linea Scolaretto
    Luogo
    Italy
    Post
    244
    Io uso msvc 7, ma la funzione non c' in winuser. Ho provato a scaricare la platform sdk dal sito della microsoft e adesso la funzione c'. Per quando vado a compilare mi dice che non la trova, eppure in winuser c':
    c:\Documents and Settings\Administrator\My Documents\Visual Studio Projects\LagunaSetup\LagunaSetup.cpp(153) : error C3861: 'SetLayeredWindowAttributes': identifier not found, even with argument-dependent lookup
    Ultima modifica di bottomap; 22-06-2007 12:43 

  4. #4
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,631
    Blogs
    5
    Apri il file stdafx.h e aggiungi alla fine la riga

    #define _WIN32_WINNT 0x0500

    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    lucagalbu non  in linea Scolaretto
    Luogo
    Italy
    Post
    244
    Non funziona ancora [img]smileys/smiley11.gif[/img]
    Ho provato anche a compilarlo con msvc 6, ma niente da fare

  6. #6
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,631
    Blogs
    5
    Non funziona in che senso ... ti da' lo stesso errore?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    lucagalbu non  in linea Scolaretto
    Luogo
    Italy
    Post
    244
    S, mi dice sempre che non trova la funzione:
    error C3861: 'SetLayeredWindowAttributes': identifier not found, even with argument-dependent lookup
    Ultima modifica di bottomap; 22-06-2007 12:44 

  8. #8
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,631
    Blogs
    5
    E' strano ... mi fai vedere

    1) le include che usi e il codice che chiama la API
    2) il contenuto del file stdafx.h

    mi dici anche il tipo di progetto che hai creato (DLL, Console ...)

    e la versione esatta del compilatore ...

    E soprattutto, controlla nelle cartelle del compilatore, se esiste il file winuser.h e il contenuto (cerca il nome della API ...).
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  9. #9
    lucagalbu non  in linea Scolaretto
    Luogo
    Italy
    Post
    244
    Dunque, il compilatore Microsoft Visual Studio Net 2003 versione 7.1.3088.
    Il progetto un windows 32 application project.
    Le include che uso sono
    codice:
    #include "stdafx.h"
    #include "Apri.h"
    #include <stdio.h>
    #include <string.h>
    #include <winuser.h>
    Il codice che chiama l'api :
    codice:
    hWnds.Apri=CreateWindowEx(GWL_ EXSTYLE, "Apri", "", WS_POPUP, 3, 3, 549, 388, NULL, NULL, hInstance, 0);
     SetLayeredWindowAttributes(hWn ds.Apri, 0, 25, 0x00000002);
    e il contenuto di stdafx :
    codice:
    #pragma once
    
    #define  WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
    // Windows Header Files:
    #include <windows.h>
    // C RunTime Header Files
    #include <stdlib.h>
    #include <malloc.h>
    #include <memory.h>
    #include <tchar.h>
    #define _WIN32_WINNT 0x0500
    Nel file winuser c' la funzione setlayeredwindowattributes e anche la costante LWA_ALPHA
    Ultima modifica di bottomap; 22-06-2007 12:45 

  10. #10
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,631
    Blogs
    5
    No ! Devi inserire quella costante nel file stdafx, in quest'ordine

    #pragma once

    #define _WIN32_WINNT 0x0500

    #define WIN32_LEAN_AND_MEAN

    e poi il resto
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi