2009-12-21 4 views
0

Je sais qu'il est une question très simple, mais je ne peux pas actuellement créer une fenêtre parent ... Mon code:Parent création de fenêtre

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
static HWND paste; 
static HWND update_list; 

/*HWND changeuser = CreateWindow(0, 0,  
        0, 
        0, 0, x, y,   
        0, (HMENU)changeuser2, 0, NULL); */ 

switch(msg) 
{ 

case WM_CREATE: 
    meniu(hwnd); 

    CreateWindow(TEXT("static"), TEXT("\nSuckers online:"),  
        WS_VISIBLE | WS_CHILD | SS_CENTER, 
        0, 0, x, 55,   
        hwnd, (HMENU)delete, NULL, NULL); 

    connected = CreateWindow(TEXT("edit"), TEXT(""),  
        WS_VISIBLE | WS_CHILD | WS_VSCROLL| ES_MULTILINE , 
        0, 60, x, 340,   
        hwnd, (HMENU)delete2, NULL, NULL); 

    CreateWindow(TEXT("static"), TEXT(""),  
        WS_VISIBLE | WS_CHILD | SS_CENTER|BS_PUSHBUTTON, 
        0, 405, x, 358,   
        hwnd, (HMENU) delete3, NULL, NULL); 

    paste = CreateWindow(TEXT("Edit"), TEXT("Paste the ip here"),  
        WS_VISIBLE | WS_CHILD | SS_CENTER, 
        x/2 - 60, 410, 120, 40,   
        hwnd, (HMENU) ip, NULL, NULL); 

    CreateWindow(TEXT("Button"), TEXT("Connect!"),  
        WS_VISIBLE | WS_CHILD | SS_CENTER | BS_PUSHBUTTON, 
        x/2 - 120, 450, 120, 40,   
        hwnd, (HMENU) connect2, NULL, NULL); 

    update_list = CreateWindow(TEXT("Button"), TEXT("Update the list!"), 
        WS_VISIBLE | WS_CHILD | SS_CENTER | BS_PUSHBUTTON, 
        x/2, 450, 120, 40,   
        hwnd, (HMENU) update, NULL, NULL); 

    _beginthread(lista, 0, (void*)(0));//begin thread lista 

    break; 

case WM_CTLCOLORSTATIC : { 
    HBRUSH br = CreateSolidBrush(RGB(80,67,77)); // change background color 
    SetTextColor((HDC)wParam,RGB(0,102,51)); //the controls text color 
    return (LRESULT) br; 
    } 


case WM_COMMAND: 
    switch LOWORD(wParam) 
    { 

    case exit: 
     PostQuitMessage(0); 
     break; 

    case ip: 
     int nr; 
     nr = GetWindowTextLength(paste); 
     if (nr >= 17) 
     SetWindowText(paste, ""); 
     break;//omor textul, ca sa pot sa fac paste 

    case connect2: 
     GetWindowText(paste,adresa,16); 
     _beginthread(start, 0, (void*)(0)); //as\ici se face conexiunea principala 
     //DestroyWindow(hwnd); 
     MessageBox(0,"Connected with the user","Ok",0); 

     break; 

    case update: 
     exit2 = true; 
     Sleep(100); 
     SetWindowText(connected,""); 
     _beginthread(lista, 0, (void*)(0));//begin thread lista 
     break;  
    } 
    break; 

case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 

} 
    return DefWindowProc(hwnd, msg, wParam, lParam); 

} 

Je veux que les autres fenêtres créées pour être l'enfant de la fenêtre changeuser ... Je ne peux tout simplement pas y arriver ... Toute aide sera appréciée!

+0

Il serait utile si vous décrivez d'abord de quelle manière vous essayez. –

Répondre

0

Pour modifier la fenêtre d'un parent, utilisez SetParent().
Mais je penserais à la structure - si vous avez besoin de changer le parent d'une ou plusieurs fenêtres dans un paramètre de dialogue normal, il est probable que ces fenêtres aient un parent différent.

Dans votre cas, il y a un problème dans votre traitement des messages de fenêtre cependant:
Si votre gestionnaire de messages reçoit WM_DESTROY vous appelez PostQuitMessage(), ce qui se traduit probablement dans votre fermeture de l'application.

Il y a deux façons dont vous pouvez gérer que:

  • utilisent différents processus de fenêtre pour votre boîte de dialogue principale et les boîtes de dialogue enfant (de préférence)
  • ou utiliser le paramètre hwnd pour décider wether vous appelez PostQuitMessage()
0

Vous ne pouvez pas remplacer une fenêtre. Si vous devez démonter et remplacer votre fenêtre principale, supprimez-la et créez-en une nouvelle. Windows obtient seulement le drapeau parent quand ils ont des enfants, pas parce que vous le leur dites.

Questions connexes