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

C# Discussion :

[C#/Win API] Supprimer bordure fenêtre windows - Bug graphique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut [C#/Win API] Supprimer bordure fenêtre windows - Bug graphique
    Bonsoir à tous,

    Je tente désespéramment de supprimer la bordure de la console Windows (DOS) appelée par Process.Start() à partir de mon application C#.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
                IntPtr hWndDocked = IntPtr.Zero;
     
                Process pDocked = new Process();
                pDocked.StartInfo.FileName = @"cmd";
                pDocked.Start();
                while (hWndDocked == IntPtr.Zero)
                {
                    pDocked.Refresh();              //update process info
                    if (pDocked.HasExited)
                    {
                        return null; //abort if the process finished before we got a handle.
                    }
                    hWndDocked = pDocked.MainWindowHandle;  //cache the window handle
                }
     
                uint lStyle = GetWindowLong(hWndDocked, GWL_STYLE);
                lStyle &= ~(
                                WindowStyles.WS_SYSMENU
                                | WindowStyles.WS_THICKFRAME
     
                                //| WindowStyles.WS_BORDER 
                                | WindowStyles.WS_CAPTION
                                | WindowStyles.WS_OVERLAPPED
     
                              );
     
                SetWindowLong(hWndDocked, GWL_STYLE, lStyle);
     
                SetWindowPos(hWndDocked, HWND_TOP, 0, 0, 0, 0,
                     SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
    Le code fonctionne, la bordure est bien supprimée en enlevant le flag WindowStyles.WS_CAPTION mais par contre, j'ai un bug graphique à droite et en bas et je n'arrive pas à rafraichir la zone concernée. Même problème j'essaye de supprimer le flag WindowStyles.WS_BORDER... ou même les deux en même temps.

    J'ai essayé plein de fonctions de l'API windows mais sans succès. Je dois mal m'y prendre

    Voilà en PJ une capture du résultat.

    Merci à vous et bonne soirée
    Images attachées Images attachées  
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    hello !!

    Tu es en face d'un problème de conflit entre "une fenetre Dos" et la fenetre créee par une application ligne de commande qui est plus haute et plus large que la surface affichée, peut être qu'en limitant la taille de la fenêtre, ça évitera l'apparition des barres de défilement indésirables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Console.BufferHeight = 25;
                Console.BufferWidth = 80;
    @+

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Salut,

    J'ai oublié de préciser que mon application C# est une winForm qui lance une application DOS via la classe Process.

    Je ne peux donc pas utiliser Console pour modifier la taille de la fenêtre DOS

    PS : En utilisant l'API windows, j'ai réussi à virer les scrollbars en utilisant SetConsoleScreenBufferSize mais le problème reste le même
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Bonsoir,

    J'ai beau essayé plein de fonctions de l'API Windows mais aucune ne semble influer sur la zone concernée par les problèmes de rafraichissement (je crois que c'est la Non-client Area)

    J'ai tenté les fonctions suivantes : RedrawWindow, UpdateWindow, SendMessage, MoveWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    uint lStyle = GetWindowLong(hWndProcess, GWL_STYLE);
                lStyle &= ~(
                                WindowStyles.WS_SYSMENU
                                | WindowStyles.WS_THICKFRAME
     
                                | WindowStyles.WS_BORDER
                                | WindowStyles.WS_CAPTION
                                | WindowStyles.WS_OVERLAPPED
                              );
     
                SetWindowLong(hWndProcess, GWL_STYLE, lStyle);
    Je rappelle que le problème vient du fait que je supprime les bordures avec le code ci-haut et que le fait d'enlever : WindowStyles.WS_BORDER et WindowStyles.WS_CAPTION créé le problème de rafraichissement de la fenêtre (le bug graphique se trouve toujours en bas et à droite au niveau des scrollbars).

    Voilà, j'espère que vous aurez des idées, ca fait quelques jours que je sèche sur ce problème

    Bonne soirée
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

Discussions similaires

  1. Redimensionner fenêtre en WIN API
    Par nike547 dans le forum Windows
    Réponses: 2
    Dernier message: 04/05/2010, 14h00
  2. Réponses: 5
    Dernier message: 28/07/2009, 22h21
  3. Réponses: 4
    Dernier message: 05/09/2005, 16h01
  4. [API] Supprimer un objet
    Par Halleck dans le forum Windows
    Réponses: 11
    Dernier message: 10/04/2004, 01h34
  5. Style d'un fenêtre Windows
    Par Zazeglu dans le forum Windows
    Réponses: 4
    Dernier message: 12/10/2003, 18h19

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