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

Windows Discussion :

Input/Output des information en C Win32 API GUI


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut Input/Output des information en C Win32 API GUI
    Salut les programmeurs

    Gras a vous aide, j'ai bien avancer dans mon projet (Traitement des donner Unicode), je vous remercier en cour une fois
    J'ai un petite soucie mais pas avec Unicode!

    Je voudrai crée un simple programme en C, pour échanger les informations, comme un CONSOLE mais en GUI!, SHELL-LIKE quoi!

    J'ai développez l'interface avec une label

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #define UNICODE
    #ifdef UNICODE
    #define _UNICODE
    #else
    #define _MBCS
    #endif
    #include <windows.h>
    #include <tchar.h>
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    static HWND STATIC_LABEL;
    HBRUSH g_hbrBackground = NULL;
    
    LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    switch(msg){
    
     case WM_CREATE:
      {
       STATIC_LABEL = CreateWindow(L"STATIC",L"TEST 1\nTEST 2",WS_VISIBLE|WS_CHILD|WS_BORDER,0,0,100,100,hwnd,(HMENU)1,NULL,NULL);
      }break;
      
     case WM_COMMAND:
      {
       case WM_KEYDOWN:
    {
         switch(wParam)
         {
          
             case 'A':
    
             break;
             
             case 'B':
             
             break;
             
             default:
             break;
         }
    }
       }break;
      
      
      case WM_SIZE:
      {
       HWND hEdit;
       RECT rcClient;
       GetClientRect(hwnd, &rcClient);
       hEdit = GetDlgItem(hwnd, 1);
       SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
      }break;
      
    case WM_CTLCOLORSTATIC:
          {
            HDC  hdc  = (HDC)  wParam ;
            HWND ctrl = (HWND) lParam ;
            SetBkMode( hdc, TRANSPARENT );
            SetTextColor( hdc, RGB(0, 0, 0) );
            return (LRESULT)GetStockObject(NULL_BRUSH); 
          }break;
    
      
      case WM_DESTROY:
      {
       PostQuitMessage(0);
      }break;
      
      default:
    	 return DefWindowProc(hwnd, msg, wParam, lParam);
    	}
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    MSG msg;
    HWND hwnd;
    WNDCLASS wc;
    wc.style=CS_HREDRAW|CS_VREDRAW;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.lpszClassName=L"window";
    wc.hInstance=hInstance;
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName=NULL;
    wc.lpfnWndProc=WndProc;
    wc.hCursor=LoadCursor(NULL, IDC_ARROW);
    wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    RegisterClassW(&wc);
    hwnd=CreateWindowW( 
    wc.lpszClassName,
    L"TEST!",
    WS_OVERLAPPEDWINDOW|WS_VISIBLE,
    100,100,300,250,NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
    return(int)msg.wParam;}
    Capture d'écran


    avec KEYDOWN détection des chars Unicode est impossible
    alors je voulez utilise une InputBox, mais ça existe pas en Win32 API
    est j'ai pas le niveau pour développez une propre InputBox() Unicode !!!

    Que ce que vous me conseiller pour développez une SHELL-LIKE Unicode (Soi récupération des informations avec KEYDOWN ou InputBox ou n'importe) ?

    Merci encore

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    avec KEYDOWN détection des chars Unicode est impossible
    Tu ne traites pas le bon message. C'est WM_CHAR (ou, recommandé, WM_DEADCHAR) qu'il faut traiter, pas WM_KEYDOWN (ou WM_KEYUP).

    alors je voulez utilise une InputBox, mais ça existe pas en Win32 API
    Ca s'appelle un contrôle "Edit".

    Que ce que vous me conseiller pour développez une SHELL-LIKE Unicode (Soi récupération des informations avec KEYDOWN ou InputBox ou n'importe) ?
    WM_DEADCHAR.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Salut,

    Merci Melem, mais ça marche pas chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    case WM_COMMAND:
    {
       case WM_DEADCHAR:
      {
         switch(wParam)
         {
             case '\u0636':
                .....
             break;
         }
       }
    }
       }break;
    Est a propos de InputBox() ( je mean un dialoge avec un contrôle "Edit" est un contrôle "button" (come InpuBox dans VB) pour recupere des informations)

    --------------------------

    Récupération des donner par WM_COMMAND en come DOS ou Shell ou Terminal sous linux un peu difficile, il faut un gestion d'interface, retoure a la ligne, effacer les chars, Entrer, lire, ecrire etc...

    Alors je vois que une InputBox() en C ça va marcher, quelqu'un eu une idée ??

    J'ai trouver quelque exemplaire, mais ca marche pas !

    http://sourceforge.net/projects/cinputbox/
    http://www.gamedev.net/community/for...opic_id=458740

    Merci

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    J'espère que tu sais ce que tu fais avec ce WM_DEADCHAR enclavé dans WM_COMMAND ? C'est louche. Fais deux traitements distincts (qui appellent éventuellement la même fonction).

    - L'utilisation de la désignation unicode pour les caractères est une fonctionalité C99. Es-tu sûr que tu compiles avec -std=c99 ? En tout cas, préfère case 0x0636 à case '\u0636'.

    - 0x0636 n'est pas un caractère ANSI, es-tu sûr que tu l'as sur ton clavier ?

    a propos de InputBox() ( je voulais dire un dialoge avec un contrôle "Edit" est un contrôle "button" (come InpuBox dans VB) )
    AH oui désolé j'ai confondu avec un TextBox. En effet il n'y a pas cette boîte de dialogue sous Windows, c'est un bonus de VB. Je vais voir si j'aurai le temps d'en faire une pour toi. En tout cas ce n'est pas très compliqué.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Salut monsieur Melem,

    J'espère que tu sais ce que tu fais avec ce WM_DEADCHAR
    Non! , car c'est premier fois je vois cette fonction, j'ai chercher sur l'internet pour voire comment le utilise mais j'ai pas trouvez un bonne explication même sur MSDN!

    En tout cas, préfère case 0x0636 à case '\u0636'.
    Si vous la dit monsieur Melem, d'accord, j'ai développez une tool qui transforme tous les chars vers son code Unicode "\uXXXX", je vais le changer cette nuit vers "0xXXXX", car je suis sur que vous avez beaucoup d'expérience que moi

    es-tu sûr que tu l'as sur ton clavier ?
    Oui, est je test l'application dans plusieurs machine

    il n'y a pas cette boîte de dialogue sous Windows
    Vraiment dommage! je le need franchement

    c'est un bonus de VB
    haha!! oui vous avez raison

    Je vais voir si j'aurai le temps d'en faire une pour toi
    Ah! c'est vrais ? je vous remercier beaucoup monsieur Melem d'avance

    mon projet Unicode est vraiment très important dans ma vie, j'ai bloquer dans [Lire un fichier unicode (code en UTF8) en C] et [Input / Output des informations Unicode] est j'ai vraiment besoin de votre aide si vous avez un peut du temps pour moi

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Non! , car c'est premier fois je vois cette fonction, j'ai chercher sur l'internet pour voire comment le utilise mais j'ai pas trouvez un bonne explication même sur MSDN!
    D'abord c'est pas une fonction mais un #define d'un entier qui identifie un message Windows. Ce que je voulais dire, c'est qu'une procédure de fenêtre doit toujours ressembler à ceci :
    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
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            ...
            
            case WM_COMMAND:
            {
                ...
                break;
            }
            
            case WM_DEADCHAR:
            {
                ...
                break;
            }
            
            default:
            {
                return DefWindowProc(hwnd, message, wParam, lParam);
            }
        }
        
        return 0L;
    }
    Dès que tu auras fait ce réarrangement, ça devrait fonctionner. Si ça ne fonctionne pas, n'oublie pas de poster le code en entier. On ne sait jamais où est-ce que tu aurais pu foirer.

    Je vais voir si j'aurai le temps d'en faire une pour toi
    Ah! c'est vrai ? je vous remercier beaucoup monsieur Melem d'avance
    Oui, une fois que tu auras fais fonctionner ton application sans .

Discussions similaires

  1. Réponses: 23
    Dernier message: 16/03/2010, 15h19
  2. Réponses: 9
    Dernier message: 17/08/2004, 16h16
  3. [C#] Transférer des informations entre 2 formulaires
    Par monoeilouais dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/07/2004, 17h21
  4. Comment récuperer des informations d'un .swf (flash) ?
    Par diado dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 12/01/2004, 21h32
  5. Réponses: 6
    Dernier message: 28/09/2003, 17h49

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