%source #include #include "%l.h" long FAR PASCAL %cWndProc(HWND, unsigned, WORD, LONG); BOOL FAR PASCAL TextEnterBoxFunc(HWND, unsigned, WORD, LONG); static HBRUSH hbrBlack; static HANDLE hAccelTable; static HANDLE hInst; HWND hWindow; char %ltext[LINESIZE]; /* Standard Windows feature. About box tells you something about the application */ BOOL FAR PASCAL About( hDlg, message, wParam, lParam ) HWND hDlg; unsigned message; WORD wParam; LONG lParam; { if (message == WM_COMMAND) { EndDialog( hDlg, TRUE ); return TRUE; } else if (message == WM_INITDIALOG) return TRUE; else return FALSE; } void %cPaint(hDC) HDC hDC; { TextOut(hDC,0,0,%ltext,strlen(%ltext)); } void GetText(hWnd) HWND hWnd; { FARPROC lpprocTextEnterBoxFunc; BOOL i; lpprocTextEnterBoxFunc = MakeProcInstance ((FARPROC)TextEnterBoxFunc, hInst); i = DialogBox(hInst, (LPSTR)"TextEnterBox", hWnd, lpprocTextEnterBoxFunc); FreeProcInstance((FARPROC)lpprocTextEnterBoxFunc); if (i == TRUE) { InvalidateRect (hWnd, (LPRECT) NULL, (BOOL) TRUE); } } void %cCommand(hWnd, id) HWND hWnd; int id; { HDC hDC; FARPROC lpprocAbout; char wbuffer[80]; switch (id) { case ID_EXIT: exit(id); break; case ID_ABOUT: lpprocAbout = MakeProcInstance ((FARPROC)About, hInst); DialogBox(hInst, (LPSTR)"About", hWnd, lpprocAbout); FreeProcInstance((FARPROC)lpprocAbout); break; case ID_%u: GetText(hWnd); break; default: break; } } /* Procedure called every time a new instance of the application ** is created */ int PASCAL WinMain(hInstance, hPrevInstance, lpszCmdLine, cmdShow) HANDLE hInstance, hPrevInstance; LPSTR lpszCmdLine; int cmdShow; { MSG msg; HWND hWnd; HMENU hMenu; int i; if (!hPrevInstance) { if (!%cInit(hInstance)) return FALSE; } else { GetInstanceData(hPrevInstance, (PSTR)&hbrBlack, sizeof(hbrBlack)); GetInstanceData(hPrevInstance, (PSTR)&hAccelTable, sizeof(hAccelTable)); } hWnd = CreateWindow((LPSTR) "%c", (LPSTR) "%c", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL, (HMENU)NULL, (HANDLE)hInstance, (LPSTR)NULL); /* initialize various things */ hWindow = hWnd; hInst = hInstance; /* Code to append About box to system menu removed here The About box is now the user's responsibility */ ShowWindow(hWnd, cmdShow); UpdateWindow(hWnd); /* This is the classic loop */ while (GetMessage((LPMSG)&msg, NULL, 0, 0)) { if (TranslateAccelerator(hWnd, hAccelTable, (LPMSG)&msg) == 0) { TranslateMessage((LPMSG)&msg); DispatchMessage((LPMSG)&msg); } } exit(msg.wParam); return(0); } int %cInit(hInstance) HANDLE hInstance; { PWNDCLASS p%cClass; /* set up some default brushes */ hbrBlack = GetStockObject(BLACK_BRUSH); p%cClass = (PWNDCLASS)LocalAlloc(LPTR, sizeof(WNDCLASS)); p%cClass->hCursor = LoadCursor(NULL, IDC_ARROW); p%cClass->hIcon = LoadIcon(hInstance, (LPSTR)"%c"); p%cClass->lpszMenuName = (LPSTR)"MainMenu"; p%cClass->lpszClassName = (LPSTR)"%c"; p%cClass->hbrBackground = NULL; p%cClass->hInstance = hInstance; p%cClass->style = CS_VREDRAW | CS_HREDRAW; p%cClass->lpfnWndProc = %cWndProc; if (!RegisterClass((LPWNDCLASS)p%cClass)) return FALSE; LocalFree((HANDLE)p%cClass); hAccelTable = LoadAccelerators(hInstance, (LPSTR)"%caccel"); return TRUE; } /* Procedures which make up the window class. */ long FAR PASCAL %cWndProc(hWnd, message, wParam, lParam) HWND hWnd; unsigned message; WORD wParam; LONG lParam; { PAINTSTRUCT ps; RECT rect; HBRUSH hbr, hbrOld; POINT pt; switch (message) { case WM_SYSCOMMAND: switch (wParam) { default: return(DefWindowProc(hWnd, message, wParam, lParam)); } case WM_CREATE: break; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: break; case WM_MOUSEMOVE: break; case WM_LBUTTONUP: case WM_RBUTTONUP: break; case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: %cCommand(hWnd, wParam); break; case WM_PAINT: BeginPaint(hWnd, (LPPAINTSTRUCT)&ps); %cPaint(ps.hdc); EndPaint(hWnd, (LPPAINTSTRUCT)&ps); break; case WM_ERASEBKGND: GetClientRect(hWnd, (LPRECT)&rect); hbr = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); hbrOld = SelectObject((HDC)wParam, hbr); FillRect((HDC)wParam, (LPRECT)&rect, hbr); SelectObject((HDC)wParam, hbrOld); DeleteObject(hbr); break; default: return(DefWindowProc(hWnd, message, wParam, lParam)); } return(0L); } void GrabText(hDlg,name,id,size) HWND hDlg; char name[]; short id; short size; { short i; strcpy(name,""); i = GetDlgItemText(hDlg,id,(LPSTR)name, size); name[i] = 0; } BOOL FAR PASCAL TextEnterBoxFunc(hDlg, message, wParam, lParam) HWND hDlg; unsigned message; WORD wParam; LONG lParam; { switch(message) { case WM_INITDIALOG: SetFocus(GetDlgItem(hDlg, ID_TEXT)); return(FALSE); case WM_COMMAND: switch(wParam) { case ID_OK: GrabText(hDlg,%ltext,ID_TEXT,LINESIZE); EndDialog(hDlg, TRUE); return(TRUE); case ID_CANCEL: EndDialog(hDlg,FALSE); return(FALSE); default: return(FALSE); } default: return(FALSE); } } %end %include #define LINESIZE 80 /* Menu choice to display the About dialog box */ #define ID_ABOUT 0x100 /* Menu choice to display the text */ #define ID_%u 0x200 /* Menu choice to exit the application */ #define ID_EXIT 0x300 /* Dialog box control identifiers */ #define ID_ETEXT 0x400 #define ID_TEXT 0x401 #define ID_OK 0x402 #define ID_CANCEL 0x403 %end %def NAME %c DESCRIPTION '%d' CODE MOVEABLE DATA MOVEABLE MULTIPLE STUB 'WINSTUB.EXE' EXETYPE WINDOWS HEAPSIZE 1024 STACKSIZE 4096 EXPORTS %cWndProc About TextEnterBoxFunc %end %resource #include "windows.h" #include "%l.h" %l ICON %l.ico MainMenu MENU BEGIN POPUP "&File" BEGIN MENUITEM "&Exit", ID_EXIT MENUITEM "&About This Application", ID_ABOUT END MENUITEM "&Get Text", ID_%u END About DIALOG LOADONCALL MOVEABLE DISCARDABLE 22, 17, 144, 85 STYLE WS_POPUP | WS_DLGFRAME BEGIN CTEXT "%c" -1, 38, 10, 68, 8 ICON "%l" -1, 9, 5, 18, 28 CTEXT "%d" -1, 0, 33, 144, 8 CTEXT "Version 1.00" -1, 0, 43, 144, 8 CTEXT "Copyright (c) 1991 by %n" -1, 0, 53, 144, 9 DEFPUSHBUTTON "Ok" ID_OK, 53, 67, 32, 14, WS_GROUP END TEXTENTERBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 66, 52, 155, 69 STYLE WS_DLGFRAME | WS_POPUP BEGIN CONTROL "Enter text:" ID_ETEXT, "static", SS_LEFT | WS_CHILD, 15, 10, 124, 16 CONTROL "" ID_TEXT, "edit", ES_LEFT | WS_BORDER | WS_TABSTOP | WS_CHILD, 15, 22, 126, 12 CONTROL "OK" ID_OK, "button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_CHILD, 30, 46, 31, 14 CONTROL "Cancel" ID_CANCEL, "button", BS_PUSHBUTTON | WS_TABSTOP | WS_CHILD, 87, 46, 31, 14 END %end %make ALL: %l.exe %l.obj: %l.c %l.h cl -d -c -AM -Gsw -Oas -Zpe -Fl %l.obj %l.c %l.exe: %l.obj %l.def link %l , %l /align:16,%l/map, mlibcew libw ,%l.def; rc %l %end