IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

SetWindowLong et ConsoleWindowClass


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut SetWindowLong et ConsoleWindowClass
    Bonjour,

    Une tite question concernant la fonction SetWindowLong( ) et une fenetre console. Bon ok, l'interet est assez limité (quoique) mais je voudrais juste comprendre POURQUOI ????
    Je peux récupérer un Handle de fenetre sur une fenetre console (avec GetConsoleWindow() dans kernel32.dll), ensuite faire un moveWindow() ou getWindowLong(), tout se passe bien. Mais impossible d'utiliser la fonction SetWindowLong() avec ce Handle. Apres appel de SetWindowLong je recupère une erreur "invalid Index" (1423) via GetLastError().

    Auriez-vous une idee du pourquoi du comment que ca veut pas fonctionner le schmillblick ???

    ++
    Fred

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Quel index utilises-tu, déjà ?
    GWL_USERDATA ?


    Et aussi: Es-tu sûr que la fenêtre console appartient bien à ce process-là ?
    (si tu lances le programme depuis l'invite de commandes par exemple, c'est pas sûr...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    J'utilise l'index GWL_STYLE.

    Et aussi: Es-tu sûr que la fenêtre console appartient bien à ce process-là ?
    Peux-tu préciser ta question stp ?? Je ne suis pas sur de bien comprendre ou tu veux en venir ??

    Pour plus de détails :
    Ma fenetre est créée par un allocConsole, je recupere sans soucis les differents handle de buffer et de fenetre et les utilise ensuite sans pb !! Sauf avec SetwindowLong ... J'ai meme pu afficher un bouton dans ma fenetre Dos !! Ca merite un IgnoBel !!

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bon, si ta console est créée par AllocConsole() (oui, sous Win32, toutes les fonctions commencent par une majuscule), tu peux oublier ma question précédente. Hélas, pour SetWindowLong(), je ne peux pas trop t'aider...

    Au fait: D'après MSDN, l'erreur 1423 est ERROR_WINDOW_NOT_COMBOBOX. Es-tu sûr d'avoir fait un SetLastError(0) avant ton SetWindowLong() ?
    Edit: Ah, ERROR_INVALID_INDEX a la valeur 1413. Ce devait être une faute de frappe...

    As-tu essayé d'autres indexes ?
    Edit: Tiens, la question bête: Tu ne te goures pas entre l'index et le LONG ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Effectivement, c'est 1413 que me renvoit GetLastError().

    Oui j'ai testé d'autres index, meme resultat !!

    Voila comment j'essaie de modifier la fenetre :

    SetWindowLong(consoleWindow, GWL_STYLE, GetWindowLong (consoleWindow, GWL_STYLE) & !WS_OVERLAPPED);

    Est-ce que ca te parait correct dans la maniere de faire ??

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour commencer, je te conseillerais de procéder par étapes (ne pas tout mettre dans la même ligne). Et vérifier GetLastError() entre le get et le set.
    Essaie également en remettant le même style sans le modifier. Il est possible que le style obtenu par cette simple manip soit invalide...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [C#] Crash SetWindowLong
    Par JulienDuSud dans le forum Windows
    Réponses: 13
    Dernier message: 09/10/2008, 22h31
  2. Réponses: 8
    Dernier message: 07/12/2005, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo