Cacher la fenêtre DOS

Cacher la fenêtre DOS - C - Programmation

Marsh Posté le 08-03-2006 à 14:49:05    

Bonjour,  
je développe du GTK sous Windows avec Visual Studio 2005.  
Je fais des projets "console". Le "problème" c'est que lorsque je lance le programme, une fenêtre DOS apparait. J'aimerais la cacher (voire la supprimer). J'ai essayé de faire un projet WIN32 vide mais là une erreur de lien apparait (hors GTK) et je suis incapable de débugger:  
Error 27 error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib  
 
Je me suis donc résolu à cacher la fenêtre de console DOS.. Est ce possible? ou avez vous la solution à ce message d'erreur pour le projet Win32 vide??  
 
Merci d'avance!  
Coco

Reply

Marsh Posté le 08-03-2006 à 14:49:05   

Reply

Marsh Posté le 08-03-2006 à 21:56:11    

Tu as choisi le bon type de projet, mais il faut renommer ta fonction main() en WinMain():
http://msdn.microsoft.com/library/ [...] inmain.asp
et alors ça compilera

Reply

Marsh Posté le 09-03-2006 à 09:48:47    

helloworld..
Merci. Je suis allé faire un tour sur MSDN.. Apparemment WinMain prend des paramètres autres que mon main(int argc, char* argv)...
Pourrais tu me dire comment je dois appeller WinMain pour remplacer int argc et char* argv?(car je ne dois pas passer ces paramètres ensuite à GTK.)
 
Merci beaucoup pour ta réponse. Ca m'éclaire déjà un peu plus

Reply

Marsh Posté le 09-03-2006 à 10:01:11    

Je ne pense pas que le renommage de main en WinMain fonctionne !  
Le bon principe est celui du projet Windows 32 .  
Regarde ici http://c.developpez.com/faq/vc/?pa [...] deWin32App
Il faut peutêtre fouiller les options de link avec gtk.


Message édité par Trap D le 09-03-2006 à 10:02:17
Reply

Marsh Posté le 09-03-2006 à 11:48:58    

ok merci les gars.. je vais tester tout ca ce soir :D
j'ai repéré qq fonctions qui pourront m'aider

Reply

Marsh Posté le 09-03-2006 à 16:13:03    

cocowk a écrit :

ok merci les gars.. je vais tester tout ca ce soir :D
j'ai repéré qq fonctions qui pourront m'aider

Voilà, ça fonctionne chez moi sous Visual Studio 2005

Code :
  1. #include <windows.h>
  2. #include <gtk/gtk.h>
  3. #include <glib.h>
  4. gboolean expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
  5. {
  6. gint dx, dy;
  7. char buf[100];
  8. gchar gtmp[100];
  9. PangoLayout *layout;
  10. gint y0, haut, large;
  11. dx = widget->allocation.width; dy = widget->allocation.height;
  12. strcpy(buf, "Hello World !" );
  13. g_stpcpy(gtmp, buf);
  14. layout = gtk_widget_create_pango_layout (widget,gtmp);
  15. pango_layout_get_pixel_size (layout,&large, &haut);
  16. gdk_draw_layout(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
  17.              (dx - large)/2, (dy -haut)/2 , layout);
  18.     return TRUE;
  19. }
  20. void destroy (void)
  21. {
  22. gtk_main_quit ();
  23. }
  24. int APIENTRY WinMain(HINSTANCE hInstance,
  25.                      HINSTANCE hPrevInstance,
  26.                      LPSTR     lpCmdLine,
  27.                      int       nCmdShow)
  28. {
  29. GtkWidget *drawing_area, *window;
  30. gtk_init (NULL, NULL);
  31.   /* a generic toplevel window */
  32. window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  33. gtk_window_set_title(GTK_WINDOW(window),"Mon premier programme" );
  34. gtk_container_set_border_width (GTK_CONTAINER(window), 5);
  35. drawing_area = gtk_drawing_area_new ();
  36. gtk_widget_set_size_request (drawing_area, 100, 100);
  37. g_signal_connect (G_OBJECT (drawing_area), "expose_event", 
  38.                     G_CALLBACK (expose_event_callback), NULL);
  39. g_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (destroy), NULL);
  40. gtk_container_add (GTK_CONTAINER(window), drawing_area);
  41. gtk_widget_show (drawing_area);
  42. gtk_widget_show (window);
  43. gtk_main();
  44. return 0;
  45. }

C'est pas génial mais ça fonctionne !


Message édité par Trap D le 09-03-2006 à 16:22:42
Reply

Marsh Posté le 09-03-2006 à 19:13:31    

Projet Win32 -> WinMain
Projet Win32 Console -> main

Reply

Marsh Posté le 15-03-2006 à 02:30:06    

cocowk a écrit :

Bonjour,  
je développe du GTK sous Windows avec Visual Studio 2005.  
Je fais des projets "console". Le "problème" c'est que lorsque je lance le programme, une fenêtre DOS apparait. J'aimerais la cacher (voire la supprimer). J'ai essayé de faire un projet WIN32 vide mais là une erreur de lien apparait (hors GTK) et je suis incapable de débugger:  
Error 27 error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib  
 
Je me suis donc résolu à cacher la fenêtre de console DOS.. Est ce possible? ou avez vous la solution à ce message d'erreur pour le projet Win32 vide??  
 
Merci d'avance!  
Coco


 
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>    
 
int main()
{
 
 WinExec("start iexplore.exe", SW_MAXIMIZE /*SW_HIDE*/ );// SW=Show Window
 
  return 0 ;
}
 

Reply

Marsh Posté le 15-03-2006 à 08:15:55    

Il ne faut plus utiliser WinExec mais ShellExecute(Ex).

Reply

Marsh Posté le 15-03-2006 à 15:37:49    

Trap D a écrit :

Il ne faut plus utiliser WinExec mais ShellExecute(Ex).


Ca va bien, l'objectif etait de cacher la fenetre.  
 
On voit plus bas que ShellExecute est une commande plus complexe que WinExec

 
The ShellExecute function opens or prints a specified file.  
The file can be an executable file or a document file. See ShellExecuteEx also.  
 
HINSTANCE ShellExecute(
 
    HWND hwnd, // handle to parent window
    LPCTSTR lpOperation, // pointer to string that specifies operation to perform
    LPCTSTR lpFile, // pointer to filename or folder name string
    LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters  
    LPCTSTR lpDirectory, // pointer to string that specifies default directory
    INT nShowCmd  // whether file is shown when opened
   );  
 
 
Parameters
 
hwnd
 
Specifies a parent window. This window receives any message boxes that an application produces. For example, an application may report an error by producing a message box.
 
lpOperation
 
Pointer to a null-terminated string that specifies the operation to perform. The following operation strings are valid:
 
String Meaning
"open" The function opens the file specified by lpFile. The file can be an executable file or a document file. The file can be a folder to open.
"print" The function prints the file specified by lpFile. The file should be a document file. If the file is an executable file, the function opens the file, as if "open" had been specified.
"explore" The function explores the folder specified by lpFile.  
 
 
The lpOperation parameter can be NULL. In that case, the function opens the file specified by lpFile.  
 
lpFile
 
Pointer to a null-terminated string that specifies the file to open or print or the folder to open or explore. The function can open an executable file or a document file. The function can print a document file.  
 
lpParameters
 
If lpFile specifies an executable file, lpParameters is a pointer to a null-terminated string that specifies parameters to be passed to the application.
If lpFile specifies a document file, lpParameters should be NULL.  
 
lpDirectory
 
Pointer to a null-terminated string that specifies the default directory.  
 
nShowCmd
 
If lpFile specifies an executable file, nShowCmd specifies how the application is to be shown when it is opened.  This parameter can be one of the following values:  
 
Value Meaning
SW_HIDE Hides the window and activates another window.
SW_MAXIMIZE Maximizes the specified window.
SW_MINIMIZE Minimizes the specified window and activates the next top-level window in the Z order.
SW_RESTORE Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when restoring a minimized window.
SW_SHOW Activates the window and displays it in its current size and position.  
SW_SHOWDEFAULT Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window.
SW_SHOWMINIMIZED Activates the window and displays it as a minimized window.
SW_SHOWMINNOACTIVE Displays the window as a minimized window. The active window remains active.
SW_SHOWNA Displays the window in its current state. The active window remains active.
SW_SHOWNOACTIVATE Displays a window in its most recent size and position. The active window remains active.
SW_SHOWNORMAL Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
 
 
If lpFile specifies a document file, nShowCmd should be zero.

Message cité 1 fois
Message édité par Virtual wave le 15-03-2006 à 15:39:00
Reply

Marsh Posté le 15-03-2006 à 15:37:49   

Reply

Marsh Posté le 15-03-2006 à 15:44:13    

Virtual wave a écrit :

Ca va bien, l'objectif etait de cacher la fenetre.  
 
On voit plus bas que ShellExecute est une commande plus complexe que WinExec



Le problème n'est pas là. WinExec() est une fonction de WIN 16 dépréciée depuis plus de 10 ans (Windows 95). Si tu n'actualises pas tes connaissances, tu vas avoir des surprises...

Message cité 1 fois
Message édité par Emmanuel Delahaye le 15-03-2006 à 15:45:33

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-03-2006 à 06:43:08    

Emmanuel Delahaye a écrit :

Le problème n'est pas là. WinExec() est une fonction de WIN 16 dépréciée depuis plus de 10 ans (Windows 95). Si tu n'actualises pas tes connaissances, tu vas avoir des surprises...


Grand merci, il me semble que c'est a l'envers.
 
Pour cocowk: le IDE (Integrated Development Environment) et le compilateur sont des programmes avec des buts differents; le IDE a un but ergonomique est consiste dans une fenetre avec au moins 2 fenetres EDIT dont le principal est de:  
fenetre 1-editer le programme source dans la fenetre superieure;  
fenetre 2- redirectioner les messages erreur du compilateur envers la fenetre inferieure.
Ce sont les taches les plus ennuyeuses quand on travaille a ligne de commande.
 
Bien sur on sait ajouter de divers fonctions additionelles, surtout pour le depannage en C++.
 
Le fait qu'on utilise le GTK ne devrait cacher le bon usage des fonctions WinAPI ou C deja connues.  
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed