ie43gn12@serss0.fiu.edu (Student - 33) (03/20/91)
I have a question. The following code listing comes from pages 17-19 in Petzold's book "Programming Windows". According to the book, "the window displays 'Hello Windows!' in the center of its client area". The painting of the text comes about when WndProc() gets the WM_PAINT message. When the program is initialized, the WM_PAINT message is sent (according to my Windows Turbo Debugger) and the appropriate DrawText() function is called but the text does not appear in the window until a second WM_PAINT message is received (e.g. resizing the window). Can someone tell me why Windows behaves in this fashion? I am using the Borland C++ compiler with the Windows application parameter of all functions exportable. George Santamarina. ie43gn12@serss0.fiu.edu /* Hellowin.c Displays "Hello, Windows!" in client area */ #include <windows.h> long FAR PASCAL WndProc(HWND, WORD, WORD, LONG); int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { static char szAppName[]="HelloWin"; HWND hwnd; MSG msg; WNDCLASS wndclass; if(!hPrevInstance) { wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; RegisterClass(&wndclass); } hwnd=CreateWindow(szAppName, // window class name "The Hello Program", // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL); // creation parameters ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } long FAR PASCAL WndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch(message) { case WM_PAINT: hdc=BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); DrawText(hdc, "Hello Windows!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd, &ps); return (0); case WM_DESTROY: PostQuitMessage(0); return (0); } return DefWindowProc(hwnd, message, wParam, lParam); } ;------------------------------------- ; HELLOWIN.DEF module definition file ;------------------------------------- NAME HELLOWIN DESCRIPTION 'Hello Windows Program (c) Charles Petzold, 1990' EXETYPE WINDOWS CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE MULTIPLE HEAPSIZE 1024 STACKSIZE 8192 -- ------------------------------------------------------------------------ George Santamarina INTERNET:ie43gn12@serss0.fiu.edu "Life is only as good as you want to make it" - Unknown
ebergman@isis.cs.du.edu (Eric Bergman-Terrell) (03/24/91)
Problems with dialogs often result from failing to "export" the functions that manage the dialogs. See Petzold, p. 19 - add the export line to your .def file. That'll probably fix your problem. Terrell