View Single Post
Old Oct 19th, 2005, 11:06 AM   #16
badbasser98
Hobbyist Programmer
 
Join Date: Mar 2005
Location: United States
Posts: 124
Rep Power: 4 badbasser98 is on a distinguished road
getting a linker error, probly just some stupid mistake on my part due to not fully understanding all the functions.

[Linker error] undefined reference to 'InitCommonControls@0'

Anyone know what that means?

**NOTE** Program is not finished, there is no instructions to be executed yet for when the "Recover Screens" button is clicked. nor anything for the stepping part of the progress bar.

 
/*
 * A basic Win32 program that will
 *
 * delete any locked Advantage 
 *
 * Screens from the local system.
 */
#include <windows.h>
#include <string.h>
#include <iostream>
#include <commctrl.h>

/*
 * This is the window function for the main window. Whenever a message is
 * dispatched using DispatchMessage (or sent with SendMessage) this function
 * gets called with the contents of the message.
 */
LRESULT CALLBACK
MainWndProc (HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
/* The window handle for buttons. */
static HWND hwndfinish = 0;
static int cx, cy;/* Height and width of Finish button. */
static HWND hwndrcvr = 0;
static int rx, ry;/* Height and width of Recover button. */
HWND hwndPB; /* Handle of progress bar */
HDC hdc;/* A device context used for drawing */
PAINTSTRUCT ps;/* Also used during window drawing */
RECT rc;/* A rectangle used during drawing */
/*
 * Perform processing based on what kind of message we got.
 */
switch (nMsg)
{
case WM_CREATE:
{
/* The window is being created. Create our button
 * window now. */
TEXTMETRIC tm;
/* Use the system fixed font size to choose
 * a nice button size. */
hdc = GetDC (hwnd);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));
GetTextMetrics (hdc, &tm);
cx = tm.tmAveCharWidth * 15;
cy = (tm.tmHeight + tm.tmExternalLeading) * 2;
rx = tm.tmAveCharWidth * 25;
ry = (tm.tmHeight + tm.tmExternalLeading) * 2;
ReleaseDC (hwnd, hdc);
/* Now create the button */
hwndfinish = CreateWindow (
"button",/* Builtin button class */
"Finish",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
600, 450, cx, cy,
hwnd,/* Parent is this window. */
(HMENU) 1,/* Control ID: 1 */
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
//Now create the button 
hwndrcvr = CreateWindow (
"button",// Builtin button class 
"Recover Screens",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
280, 150, rx, ry,
hwnd,// Parent is this window. 
(HMENU) 2,// Control ID: 2 
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
return 0;
break;
} 
case WM_DESTROY:
/* The window is being destroyed, close the application
 * (the child button gets destroyed automatically). */
PostQuitMessage (0);
return 0;
break;
case WM_PAINT:
/* The window needs to be painted (redrawn). */
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rc);
/* Draw directions at top of screen*/
SetTextColor(hdc, RGB(200,220,255)); SetBkColor(hdc, RGB(125,125,125));
rc.top = rc.top + 5;
DrawText (hdc, "-=| Advantage Screen Recovery |=-", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_TOP);
SetTextColor(hdc, RGB(255,255,255)); SetBkColor(hdc, RGB(125,125,125));
rc.top = rc.top + 18;
DrawText (hdc, "If you are getting a warning message saying your printers are not configured", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_TOP);
rc.top = rc.top + 18;
DrawText (hdc, "for this workstation, please run this program now. Also you should run it if", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_TOP);
rc.top = rc.top + 18;
DrawText (hdc, "your first Advantage window to open is anything other than ABCS1.", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_TOP);
rc.top = rc.top + 25;
SetTextColor(hdc, RGB(255,0,0)); SetBkColor(hdc, RGB(0,0,0));
DrawText (hdc, "**NOTICE** Close all Advantage windows before continuing!**", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_TOP);
SetTextColor(hdc, RGB(255,255,255)); SetBkColor(hdc, RGB(125,125,125));
rc.top = rc.top + 25;
DrawText (hdc, "To Continue, click the Recover Screens button.", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_TOP);
EndPaint (hwnd, &ps);
return 0;
break;
case WM_COMMAND:
/* Check the control ID, notification code and
 * control handle to see if this is a button click
 * message from our child button. */
if (LOWORD(wParam) == 1 &&
	HIWORD(wParam) == BN_CLICKED &&
	(HWND) lParam == hwndfinish)
{
/* Finish button was clicked. Close the window. */
DestroyWindow (hwnd);
}
else
{
if (LOWORD(wParam) == 2 &&
	HIWORD(wParam) == BN_CLICKED &&
	(HWND) lParam == hwndrcvr)
{
// Recover button was clicked. Delete files and show progress bar. 
	// Set the range and increment of the progress bar.
	SendMessage(hwndPB, PBM_SETRANGE, 0, 100); 
	SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0); 
/*add delete code here*/
	   // Advance the current position of the
	   // progress bar by the increment. 
	   SendMessage(hwndPB, PBM_STEPIT, 0, 0); 
}
}
return 0;
break;
}
/* If we don't handle a message completely we hand it to the system
 * provided default window function. */
return DefWindowProc (hwnd, nMsg, wParam, lParam);
}

int STDCALL
WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
{
HWND hwndMain;/* Handle for the main window. */
HWND hwndPB; /* Handle of progress bar */
MSG msg;/* A Win32 message structure. */
WNDCLASSEX wndclass;/* A window class structure. */
char*szMainWndClass = "WinTestWin";
/* The name of the main window class */
/*
 * First we create a window class for our main window.
 */
/* Initialize the entire structure to zero. */
memset (&wndclass, 0, sizeof(WNDCLASSEX));
/* This class is called WinTestWin */
wndclass.lpszClassName = szMainWndClass;
/* cbSize gives the size of the structure for extensibility. */
wndclass.cbSize = sizeof(WNDCLASSEX);
/* All windows of this class redraw when resized. */
wndclass.style = CS_HREDRAW | CS_VREDRAW;
/* All windows of this class use the MainWndProc window function. */
wndclass.lpfnWndProc = MainWndProc;
/* This class is used with the current program instance. */
wndclass.hInstance = hInst;
/* Use standard application icon and arrow cursor provided by the OS */
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
/* Color the background gray */
wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);
/*
 * Now register the window class for use.
 */
RegisterClassEx (&wndclass);
/*
 * Create our main window using that window class.
 */
hwndMain = CreateWindow (
szMainWndClass,/* Class name */
"Advantage Screen Recovery 3.0",/* Caption */
WS_OVERLAPPEDWINDOW,/* Style */
CW_USEDEFAULT,/* Initial x (use default) */
CW_USEDEFAULT,/* Initial y (use default) */
CW_USEDEFAULT,/* Initial x size (use default) */
CW_USEDEFAULT,/* Initial y size (use default) */
NULL,/* No parent window */
NULL,/* No menu */
hInst,/* This program instance */
NULL/* Creation parameters */
);
// Create Progress Bar
int cyVScroll;  // Height of scroll bar arrow 
extern HINSTANCE hInstance;
	InitCommonControls(); 
   
	hwndPB = CreateWindowEx(
	0,
	PROGRESS_CLASS,/* class name */
	(LPSTR) NULL,
	WS_CHILD | WS_EX_CLIENTEDGE,/* Style */
	100,/* Initial x */
	300,/* Initial y */
	500,/* Initial x size */
	50, /* Initial y size */
	hwndMain, /* Parent is this window. */
	(HMENU) NULL,
	hInst,/* this program instance */
	NULL /* creation parameters */
	); 
/*
 * Display the window which we just created (using the nShow
 * passed by the OS, which allows for start minimized and that
 * sort of thing).
 */
ShowWindow (hwndMain, nShow);
UpdateWindow (hwndMain);
/*
 * The main message loop. All messages being sent to the windows
 * of the application (or at least the primary thread) are retrieved
 * by the GetMessage call, then translated (mainly for keyboard
 * messages) and dispatched to the appropriate window procedure.
 * This is the simplest kind of message loop. More complex loops
 * are required for idle processing or handling modeless dialog
 * boxes. When one of the windows calls PostQuitMessage GetMessage
 * will return zero and the wParam of the message will be filled
 * with the argument to PostQuitMessage. The loop will end and
 * the application will close.
		 */
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}

Thanks,
-BB98
__________________
Learning to use C++ and loving every minute of it.
badbasser98 is offline   Reply With Quote