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