LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
char cChatMessage[256];
HWND hTextBox = NULL;
HWND hSendButton = NULL;
HWND hChatDisplay = NULL;
HDC hdc;
TEXTMETRIC tmFontSize;
RECT rcClientCoor;
GetClientRect(hwnd, &rcClientCoor);
RECT rcTextBoxCoor = { 0, rcClientCoor.bottom - 20, rcClientCoor.right - 200, 20 };
RECT rcSendButtonCoor = { rcTextBoxCoor.right + 20, rcClientCoor.bottom - 20, (rcClientCoor.right - rcTextBoxCoor.right), 20};
RECT rcChatDisplayCoor = { 0, 0, rcTextBoxCoor.right, rcTextBoxCoor.top - 20 };
int iMessageLength;
switch(msg)
{
case WM_CREATE:
hTextBox = CreateWindow(TEXT("Edit"), TEXT(""), WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL,
rcTextBoxCoor.left, rcTextBoxCoor.top, rcTextBoxCoor.right, rcTextBoxCoor.bottom,
hwnd, (HMENU)IDC_TEXTBOX, NULL, NULL);
hSendButton = CreateWindow(TEXT("Button"), TEXT("Send"), WS_VISIBLE | WS_CHILD | WS_BORDER | BS_PUSHBUTTON,
rcSendButtonCoor.left, rcSendButtonCoor.top, rcSendButtonCoor.right, rcSendButtonCoor.bottom,
hwnd, (HMENU)IDC_SEND, NULL, NULL);
hChatDisplay = CreateWindow(TEXT("Edit"), TEXT(""), WS_VISIBLE | WS_CHILD |WS_BORDER | ES_MULTILINE,
rcChatDisplayCoor.left, rcChatDisplayCoor.top, rcChatDisplayCoor.right, rcChatDisplayCoor.bottom,
hwnd, (HMENU)IDC_CHATDISPLAY, NULL, NULL);
break;
case WM_SIZE:
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_FILE_EXIT:
DestroyWindow(hwnd);
break;
case ID_CONNECT_CONNECTTO:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_CONNECTTO), hwnd, ConnectToDlgProc);
break;
case ID_HELP_ABOUT:
MessageBox(hwnd, "Created by SonicD007", "About", MB_OK);
break;
case IDC_SEND:
//change from hard coded 256 to get text length somehow
GetDlgItemText(hwnd, IDC_TEXTBOX, (LPSTR)cChatMessage, 256);
SetDlgItemText(hwnd, IDC_TEXTBOX, "");
//This is where the problem is. hTextBox is null (out of scope I believe)
iMessageLength = GetWindowTextLength(hTextBox);
MessageBox(hwnd, (LPCSTR)iMessageLength, "Text length", MB_OK);
InvalidateRect(hwnd, &rcClientCoor, TRUE);
break;
}
break;
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
GetDlgItemText(hwnd, IDC_TEXTBOX, (LPSTR)cChatMessage, 256);
SetDlgItemText(hwnd, IDC_TEXTBOX, "");
InvalidateRect(hwnd, &rcClientCoor, TRUE);
break;
}
break;
case WM_PAINT:
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
GetTextMetrics(hdc, &tmFontSize);
EndPaint(hwnd, &ps);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
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)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"Chat Chat v0.1",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
Any help would be appreciated. Also feel free to critique the code, I know there's no error checking and it looks pretty sloppy at the moment but I appreciate the helpful comments. Thanks.