From: "G Gravagne" Subject: RSXNTDJ compile error Date: Thu, 14 May 1998 02:57:23 -0400 Lines: 161 Message-ID: <#sD8NWwf9GA.352@upnetnews03> Newsgroups: comp.os.msdos.djgpp To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk When attempting to compile the menudemo program from Petzold, the following error message occurred: menudemo.c: In function 'WndProc': menudemo.c:91: 'GCL_HBRBACKGROUND' undeclared (first use this function) menudemo.c:91: (Each undeclared identifier is reported only once menudemo.c:91: for each function it appears in.) The source code which produced this error - with the offending line marked - is as follows: #include #include "menudemo.h" LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); char szAppName[] = "MenuDemo"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); 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 = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = szAppName; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName, "Menu Demonstration", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static int iColorID[5] = {WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, BLACK_BRUSH}; static int iSelection = IDM_WHITE; HMENU hMenu; switch (iMsg) { case WM_COMMAND: hMenu = GetMenu(hwnd); switch (LOWORD(wParam)) { case IDM_NEW: case IDM_OPEN: case IDM_SAVE: case IDM_SAVEAS: MessageBeep(0); return 0; case IDM_EXIT: SendMessage(hwnd,WM_CLOSE,0,0L); return 0; case IDM_UNDO: case IDM_CUT: case IDM_COPY: case IDM_PASTE: case IDM_DEL: MessageBeep(0); return 0; case IDM_WHITE: // Note: Logic below case IDM_LTGRAY: // assumes that IDM_WHITE case IDM_GRAY: // through IDM_BLACK are case IDM_DKGRAY: // consecutive number in case IDM_BLACK: // the order shown here. CheckMenuItem(hMenu, iSelection, MF_UNCHECKED); iSelection = LOWORD(wParam); CheckMenuItem(hMenu, iSelection, MF_CHECKED); //************************************************************************** ************************ SetClassWord(hwnd, GCL_HBRBACKGROUND, // line 91 (LONG)GetStockObject(iColorID[LOWORD(wParam) - IDM_WHITE])); //************************************************************************** ************************ InvalidateRect(hwnd,NULL,TRUE); return 0; case IDM_START: if (SetTimer(hwnd,1,1000,NULL)) { EnableMenuItem(hMenu, IDM_START, MF_GRAYED); EnableMenuItem(hMenu, IDM_STOP, MF_ENABLED); } return 0; case IDM_STOP: KillTimer(hwnd,1); EnableMenuItem(hMenu,IDM_START,MF_ENABLED); EnableMenuItem(hMenu,IDM_STOP,MF_GRAYED); return 0; case IDM_HELP: MessageBox(hwnd,"Help not yet implemented.", szAppName,MB_ICONINFORMATION | MB_OK); return 0; case IDM_ABOUT: MessageBox(hwnd,"Menu Demonstration Program.", szAppName,MB_ICONINFORMATION | MB_OK); return 0; } break; case WM_TIMER: MessageBeep(0); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } The source code was modified later on by pasting in the #define statements for the GCL_ and GWL_ constants from the winuser.h file in the Microsoft SDK; however, problems continued to persist. The program managed to compile cleanly, but accessing any of the background color choices from the menu led to an execution error: Exception at 0x0000000001 Application got signal at SIGSEGV I suspect there is a very straightforword solution to my difficulties - perhaps I must use makelib to create a new library, and include the new library as a link library - but as a newbie to Win32 programming, C, and RSXNTDJ the debugging is quite a task. Any input would be greatly appreciated. Thanks in advance.