Создание родительского окна - PullRequest
0 голосов
/ 21 декабря 2009

Я знаю, что это очень простой вопрос, но в настоящее время я не могу создать родительское окно ... Мой код:

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);

}   

Я хочу, чтобы другие созданные окна были дочерними для окна смены пользователя ... Я просто не могу сделать это ... Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 26 декабря 2009

Вы не можете «заменить» окно. Если вам нужно снести и заменить главное окно, удалите его и создайте новое. Windows получает родительский флаг только тогда, когда у них есть дети, а не потому, что вы говорите им.

0 голосов
/ 22 декабря 2009

Чтобы изменить окно родителя, используйте SetParent().
Но я бы подумал о структуре - если вам нужно изменить родителя одного или нескольких окон в обычном диалоговом режиме, скорее всего, у этих окон должен быть другой родитель.

В вашем случае есть проблема с обработкой оконных сообщений:
Если ваш обработчик сообщений получает WM_DESTROY, вы звоните PostQuitMessage(), что, вероятно, приведет к закрытию вашего приложения.

Есть два способа справиться с этим:

  • использовать различные оконные процессы для основного и дочерних диалогов (желательно)
  • или используйте параметр hwnd, чтобы определить, звоните ли вы PostQuitMessage()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...