#include #include "winlib.h" extern HINSTANCE hInst; BOOL CALLBACK InputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static INPUT_DATA id, *pid; RECT rect; int capHeight, scrWidth, scrHeight, totHeight, edge; switch (msg) { case WM_INITDIALOG: pid = (INPUT_DATA*)lParam; id = *pid; capHeight = GetSystemMetrics(SM_CYCAPTION); scrWidth = GetSystemMetrics(SM_CXSCREEN); scrHeight = GetSystemMetrics(SM_CYSCREEN); edge = GetSystemMetrics(SM_CYEDGE); totHeight = 130 + capHeight + (2 * edge) + 2; MoveWindow(hDlg, (scrWidth / 2) - (id.width / 2), (scrHeight / 2) - (totHeight / 2), id.width, totHeight, FALSE); GetClientRect(hDlg, &rect); MoveWindow(GetDlgItem(hDlg, IDC_INPUT), 20, 30, rect.right - 40, 23, FALSE); MoveWindow(GetDlgItem(hDlg, IDOK), (rect.right / 2) - 90, 90, 80, 28, FALSE); MoveWindow(GetDlgItem(hDlg, IDCANCEL), (rect.right / 2) + 10, 90, 80, 28, FALSE); SetWindowText(hDlg, id.title); SetDlgItemText(hDlg, IDC_INPUT, id.data); SetFocus(GetDlgItem(hDlg, IDC_INPUT)); return FALSE; case WM_COMMAND : switch (LOWORD (wParam)) { case IDOK: GetDlgItemText(hDlg, IDC_INPUT, id.data, 511); *pid = id; EndDialog(hDlg, 1); return TRUE; case IDCANCEL: EndDialog (hDlg, 0); return TRUE ; } break; } return FALSE; } char* GetInput(HWND hParent, char *title, char *dflt, int width) { static char input[512]; INPUT_DATA id; strcpy(input, ""); strcpy(id.title, title); strcpy(id.data, dflt); id.width = width; if (DialogBoxParam(hInst, "InputBox", hParent, InputDlgProc, (LPARAM)&id)) { strcpy(input, id.data); return input; } else return NULL; } .