2009-12-21 126 views
0

我知道這是一個很簡單的問題,但我目前不能創建一個父窗口... 我的代碼:父窗口創建

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

} 

我想創建成爲changeuser窗口的子其他窗口... 我只是不能讓它發生... 任何幫助將不勝感激!

+0

如果您第一次嘗試以何種方式進行初次描述,這將有所幫助。 –

回答

0

要更改父窗口,請使用SetParent()
但是我會考慮這個結構 - 如果你需要在普通的對話框設置中改變一個或多個窗口的父窗口,那麼這些窗口應該有一個不同的父窗口。

在你的情況下,有在窗口的消息雖然處理一個問題:
如果你的消息處理程序接收WM_DESTROY你打電話PostQuitMessage(),這可能導致你的應用程序關閉。

有你能處理的方式有兩種:

  • 使用不同的窗口過程爲您的主對話框和兒童對話框(最好)
  • 或使用hwnd參數來決定將來你打電話PostQuitMessage()
0

你不能'替換'一個窗口。如果您需要拆卸並更換主窗口,請將其刪除並製作一個新窗口。當他們有孩子時,Windows只會得到父母的標誌,而不是因爲你告訴他們。