Dialog created after first becomes unresponsive unless created first?

Posted by Justin Sterling on Stack Overflow See other posts from Stack Overflow or by Justin Sterling
Published on 2010-04-29T03:05:06Z Indexed on 2010/04/29 3:17 UTC
Read the original article Hit count: 261

Filed under:
|
|
|
|

After creating the initial dialog box that works perfectly fine, I create another dialog box when the Join Game button is pressed. The dialog box is created and show successfully, however I am unable to type in the edit box or even press or exit the dialog. Does anyone understand how to fix this or why it happens? I made sure the dialog box itself was not the problem by creating and displaying it from the main loop in the application. It worked fine when I created it that way. So why does it error when being created from another dialog? My code is below.

This code is for the DLGPROC function that each dialog uses.

#define WIN32_LEAN_AND_MEAN
#include "Windows.h"
#include ".\Controllers\Menu\MenuSystem.h"
#include ".\Controllers\Game Controller\GameManager.h"
#include ".\Controllers\Network\Network.h"
#include "resource.h"
#include "main.h"
using namespace std;
extern GameManager g;
extern bool men;
NET_Socket server;
extern HWND d;
HWND joinDlg;
char ip[64];

void JoinMenu(){
 joinDlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_GETADDRESSINFO), NULL, (DLGPROC)GameJoinDialogPrompt);
 SetFocus(joinDlg);
// ShowWindow(joinDlg, SW_SHOW);
 ShowWindow(d, SW_HIDE);
}
LRESULT CALLBACK GameJoinDialogPrompt(HWND Dialogwindow, UINT Message, WPARAM wParam, LPARAM lParam){
 switch(Message){
  case WM_COMMAND:{ 
   switch(LOWORD(wParam)){
    case IDCONNECT:{
      GetDlgItemText(joinDlg, IDC_IP, ip, 63);
      if(server.ConnectToServer(ip, 7890, NET_UDP) == NET_INVALID_SOCKET){
       LogString("Failed to connect to server! IP: %s", ip);
       MessageBox(NULL, "Failed to connect!", "Error", MB_OK);
       ShowWindow(joinDlg, SW_SHOW);
       break;
      }
       }
     LogString("Connected!");
     break;
    case IDCANCEL:
     ShowWindow(d, SW_SHOW);
     ShowWindow(joinDlg, SW_HIDE);
     break;
   }
   break;
  }
  case WM_CLOSE:
   PostQuitMessage(0);
   break;
 }
 return 0;
}
LRESULT CALLBACK GameMainDialogPrompt(HWND Dialogwindow, UINT Message, WPARAM wParam, LPARAM lParam){
 switch(Message){
 case WM_PAINT:{
   PAINTSTRUCT ps;
   RECT rect;
   HDC hdc = GetDC(Dialogwindow);
      hdc = BeginPaint(Dialogwindow, &ps);
   GetClientRect (Dialogwindow, &rect);
   FillRect(hdc, &rect, CreateSolidBrush(RGB(0, 0, 0)));
      EndPaint(Dialogwindow, &ps);
      break;
      }
  case WM_COMMAND:{
   switch(LOWORD(wParam)){
    case IDC_HOST:
     if(!NET_Initialize()){
      break;
     }
     if(server.CreateServer(7890, NET_UDP) != 0){
      MessageBox(NULL, "Failed to create server.", "Error!", MB_OK);
      PostQuitMessage(0);
      return -1;
     }
     ShowWindow(d, SW_HIDE);
     break;
    case IDC_JOIN:{
     JoinMenu();
     }
     break;
    case IDC_EXIT:
     PostQuitMessage(0);
     break;
    default:
     break;
   }
   break;
  }
 return 0;
 }
}

I call the first dialog using the below code

void EnterMenu(){
// joinDlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_GETADDRESSINFO), g_hWnd, (DLGPROC)GameJoinDialogPrompt);//
 d = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_SELECTMENU), g_hWnd, (DLGPROC)GameMainDialogPrompt);

}

The dialog boxes are not DISABLED by default, and they are visible by default. Everything is set to be active on creation and no code deactivates the items on the dialog or the dialog itself.

© Stack Overflow or respective owner

Related posts about c++

Related posts about win32