- Oct 21, 2003
- 99
- 0
- 0
Im reading a book about programming windows forms. I entered an example from the book into Visual C++ 6, and I get the following:
// PROGRAM FROM BOOK
#include <WINDOWS.H>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
WNDCLASS WndClass;
WndClass.style = 0;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.lpfnWndProc = WndProc;
WndClass.hInstance = hInstance;
WndClass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = "WinProg";
RegisterClass(&WndClass);
HWND hWindow = CreateWindow("WinProg", "Window",
WS_OVERLAPPEDWINDOW,
0, 0, 600, 460, NULL, NULL,
hInstance, NULL);
ShowWindow(hWindow, nCmdShow);
UpdateWindow(hWindow);
MSG Message;
while (GetMessage(&Message, NULL, 0, 0))
{
DispatchMessage(&Message);
}
return (Message.wParam);
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
switch(uiMessage)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
HPEN hPen;
HPEN hPenalt;
HBRUSH hBrush;
HBRUSH hBrushalt;
hBrush = CreateSolidBrush(RGB(255,100,0));
hPen = CreatePen(PS_SOLID, 2, RGB(0,255,255));
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
hBrushalt = SelectObject(hdc, hBrush); // <<
// These two lines cause the errors below
hPenalt = SelectObject(hdc, hPen); // <<
MoveToEx(hdc, 20, 20, NULL);
LineTo(hdc, 100, 100);
Rectangle(hdc, 120, 20, 240, 140);
RoundRect(hdc, 260, 20, 420, 140, 20, 20);
RECT rect;
SetRect(&rect, 20, 260, 240, 420);
FrameRect(hdc, &rect, hBrush);
SetRect(&rect, 260, 260, 420, 420);
FillRect(hdc, &rect, hBrush);
Ellipse(hdc, 440, 260, 480, 420);
SelectObject(hdc, hBrushalt);
SelectObject(hdc, hPenalt);
DeleteObject(hPen);
DeleteObject(hBrush);
EndPaint(hWnd, &ps);
return 0;
default:
return DefWindowProc(hWnd, uiMessage, wParam, lParam);
}
}
// COMPILER ERRORS
c:\programs\window\window.cpp(59) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
c:\programs\window\window.cpp(60) : error C2440: '=' : cannot convert from 'void *' to 'struct HPEN__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.
I've downloaded a chm version of the Win32 API Reference, and looked through it, but can't figure out for the life of me what is wrong... If anyone is interested, the book is Windows Programming with C++ by Henning Hansen.
Thanks in advance for any help provided...
// PROGRAM FROM BOOK
#include <WINDOWS.H>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
WNDCLASS WndClass;
WndClass.style = 0;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.lpfnWndProc = WndProc;
WndClass.hInstance = hInstance;
WndClass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = "WinProg";
RegisterClass(&WndClass);
HWND hWindow = CreateWindow("WinProg", "Window",
WS_OVERLAPPEDWINDOW,
0, 0, 600, 460, NULL, NULL,
hInstance, NULL);
ShowWindow(hWindow, nCmdShow);
UpdateWindow(hWindow);
MSG Message;
while (GetMessage(&Message, NULL, 0, 0))
{
DispatchMessage(&Message);
}
return (Message.wParam);
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
switch(uiMessage)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
HPEN hPen;
HPEN hPenalt;
HBRUSH hBrush;
HBRUSH hBrushalt;
hBrush = CreateSolidBrush(RGB(255,100,0));
hPen = CreatePen(PS_SOLID, 2, RGB(0,255,255));
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
hBrushalt = SelectObject(hdc, hBrush); // <<
// These two lines cause the errors below
hPenalt = SelectObject(hdc, hPen); // <<
MoveToEx(hdc, 20, 20, NULL);
LineTo(hdc, 100, 100);
Rectangle(hdc, 120, 20, 240, 140);
RoundRect(hdc, 260, 20, 420, 140, 20, 20);
RECT rect;
SetRect(&rect, 20, 260, 240, 420);
FrameRect(hdc, &rect, hBrush);
SetRect(&rect, 260, 260, 420, 420);
FillRect(hdc, &rect, hBrush);
Ellipse(hdc, 440, 260, 480, 420);
SelectObject(hdc, hBrushalt);
SelectObject(hdc, hPenalt);
DeleteObject(hPen);
DeleteObject(hBrush);
EndPaint(hWnd, &ps);
return 0;
default:
return DefWindowProc(hWnd, uiMessage, wParam, lParam);
}
}
// COMPILER ERRORS
c:\programs\window\window.cpp(59) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
c:\programs\window\window.cpp(60) : error C2440: '=' : cannot convert from 'void *' to 'struct HPEN__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.
I've downloaded a chm version of the Win32 API Reference, and looked through it, but can't figure out for the life of me what is wrong... If anyone is interested, the book is Windows Programming with C++ by Henning Hansen.
Thanks in advance for any help provided...