M
#include <windows.h>
#define MAX_BUFSIZE 100u
typedef struct{
HWND childButton;
HWND childEdit;
TCHAR buffer[MAX_BUFSIZE];
}GlobalData;
GlobalData* ParentWnd;
LRESULT CALLBACK MessageHandler(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam){
switch(iMsg){
case WM_COMMAND: /* <== !!? (1) */
if((HWND) lParam == ParentWnd->childButton && HIWORD(wParam) == BN_CLICKED){
ZeroMemory(ParentWnd->buffer, sizeof(TCHAR) * MAX_BUFSIZE);
GetWindowText(ParentWnd->childEdit, ParentWnd->buffer, MAX_BUFSIZE); /* <== !!? (2) */
MessageBox(NULL, ParentWnd->buffer, TEXT("Nachricht"), MB_OK);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
break;
}
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE phInst, LPSTR commLine, int showStyle){
HWND hParent;
MSG msg;
WNDCLASSEX mWndClass;
SIZE Screen = {GetSystemMetrics(SM_CXMAXIMIZED) >> 1, GetSystemMetrics(SM_CYMAXIMIZED) >> 1};
if(!(ParentWnd = HeapAlloc(GetProcessHeap(), 0, sizeof(GlobalData))))
return 0;
ZeroMemory(&mWndClass, sizeof(WNDCLASSEX));
mWndClass.hInstance = hInst;
mWndClass.lpfnWndProc = MessageHandler;
mWndClass.lpszClassName = TEXT("M");
mWndClass.cbSize = sizeof(WNDCLASSEX);
mWndClass.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
mWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
if(!RegisterClassEx(&mWndClass))
return 0;
if(!(hParent = CreateWindowEx(0, TEXT("M"), TEXT("Text eingeben"),
WS_SYSMENU|WS_VISIBLE|WS_CAPTION,
0, 0,
Screen.cx, Screen.cy,
NULL, NULL, hInst, NULL)))
return 0;
ParentWnd->childButton = CreateWindowEx(0, TEXT("button"), TEXT("OK"),
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_CENTER|BS_VCENTER,
3 * (Screen.cx >> 3), Screen.cy >> 1,
Screen.cx >> 2, Screen.cy >> 3,
hParent, (HMENU)1, hInst, NULL);
ParentWnd->childEdit = CreateWindowEx(0, TEXT("edit"), TEXT("eingabe hier"),
WS_CHILD|WS_VISIBLE|WS_BORDER|ES_CENTER,
3 * (Screen.cx >> 3), 7 * (Screen.cy >> 4),
Screen.cx >> 2, Screen.cy >> 4,
hParent, (HMENU)2, hInst, NULL);
if(!ParentWnd->childEdit){
if(ParentWnd->childButton)
DestroyWindow(ParentWnd->childButton);
DestroyWindow(hParent);
return 0;
}
while(GetMessage(&msg, NULL, 0, 0) > 0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return HeapFree(GetProcessHeap(), 0, ParentWnd) && msg.wParam;
}