#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <gl\gl.h>
#include <gl\glu.h>
//---------------------------------------------------------------------------
class window
{
protected:
WNDCLASS window_class;
DWORD window_style; // window style
HINSTANCE instance; // the instance that the window procedure of this class is within
HWND window_handle; // handle of window
MSG msg;
HDC device_context; // Device context to search for a best pixel format match
HGLRC rendering_context; // OpenGL rendering context to be made calling thread's current rendering context
PIXELFORMATDESCRIPTOR pixel_format_descriptor;
int pixel_format;
public:
int height;
int width;
int x;
int y;
char* class_name;
char* window_name;
void SetupPixelFormat();
void Create();
void CreateGLContext();
LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
void window::SetupPixelFormat()
{
pixel_format_descriptor.nSize=sizeof(PIXELFORMATDESCRIPTOR); // size
pixel_format_descriptor.nVersion=1; // version
pixel_format_descriptor.dwFlags=PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER; // support double-buffering
pixel_format_descriptor.dwLayerMask=PFD_MAIN_PLANE;
pixel_format_descriptor.iPixelType=PFD_TYPE_COLORINDEX;
pixel_format_descriptor.cColorBits=8;
pixel_format_descriptor.cDepthBits=16;
pixel_format_descriptor.cAccumBits=0;
pixel_format_descriptor.cStencilBits=0;
pixel_format=ChoosePixelFormat(device_context, &pixel_format_descriptor);
SetPixelFormat
(
device_context,
pixel_format,
&pixel_format_descriptor
);
}
LRESULT window::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_MOUSEMOVE:
break;
case WM_TIMER :
break;
case WM_CREATE :
break;
case WM_KEYDOWN :
break;
case WM_CLOSE :
break;
case WM_DESTROY :
PostQuitMessage(0);
break;
default :
return(DefWindowProc(hWnd, uMsg, wParam, lParam ));
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
void window::Create()
{
window_class.style =/*CS_HREDRAW | CS_VREDRAW |*/ CS_OWNDC;
window_class.lpfnWndProc =(WNDPROC)WndProc; //points to the window procedure
window_class.cbClsExtra =0;
window_class.cbWndExtra =0;
window_class.hInstance =instance; //instance that the window procedure of this class is within
window_class.hIcon =LoadIcon(NULL,IDI_WINLOGO);
window_class.hCursor =LoadCursor(NULL, IDC_ARROW);
window_class.hbrBackground =(HBRUSH)(4);
window_class.lpszMenuName ="No Menu";
window_class.lpszClassName =class_name;
RegisterClass(&window_class);
window_handle=CreateWindow
(
class_name, // pointer to registered class name
window_name, // pointer to window name
window_style, // window style
x, // horizontal position of window
y, // vertical position of window
640+width, // window width
480+height, // window height
NULL, // handle to parent or owner window
NULL, // handle to menu or child-window identifier
instance, // handle to application instance
0 // pointer to window-creation data
);
ShowWindow
(
window_handle, // handle of window
SW_NORMAL // show state of window
);
UpdateWindow(window_handle);
}
void window::CreateGLContext()
{
wglCreateContext(device_context);
wglMakeCurrent(device_context, rendering_context);
ReleaseDC(window_handle, device_context);
}
void main()
{
window wind;
wind.class_name="Thank you, ALLAH!!!!!!!";
wind.window_name="Thank you, ALLAH!!!!!!!";
wind.height=640;
wind.width=480;
wind.x=100;
wind.y=100;
wind.SetupPixelFormat();
wind.Create();
wind.CreateGLContext();
}
Трабл с Wndclass
У меня возник трабл с WNDCLASS: есть функция WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam), но Билдер материцца
WNDCLASS window_class;
/*--------------------------------------*/
window_class.lpfnWndProc=(WNDPROC)WndProc;//-вот тут ошибка:[C++ Error] main_unit.cpp(87): E2235 Member function must be called or its address taken
Как можно исправить?
Цитата:
Originally posted by coder_in_law
Доброго времени суток вам, уважаемые!
У меня возник трабл с WNDCLASS: есть функция WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam), но Билдер материцца
WNDCLASS window_class;
/*--------------------------------------*/
window_class.lpfnWndProc=(WNDPROC)WndProc;//-вот тут ошибка:[C++ Error] main_unit.cpp(87): E2235 Member function must be called or its address taken
Как можно исправить?
Доброго времени суток вам, уважаемые!
У меня возник трабл с WNDCLASS: есть функция WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam), но Билдер материцца
WNDCLASS window_class;
/*--------------------------------------*/
window_class.lpfnWndProc=(WNDPROC)WndProc;//-вот тут ошибка:[C++ Error] main_unit.cpp(87): E2235 Member function must be called or its address taken
Как можно исправить?
Для начала если взялся писать на API, то создай проект без VCL. Надо просто объявить WndProc как static.
Цитата:
Originally posted by GIZMO
Для начала если взялся писать на API, то создай проект без VCL. Похоже компиллер путает св-во TWinControl::WndProc (напр. формы) и твою процедуру. Ну или обзови процедуру по другому напр. MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam).
Для начала если взялся писать на API, то создай проект без VCL. Похоже компиллер путает св-во TWinControl::WndProc (напр. формы) и твою процедуру. Ну или обзови процедуру по другому напр. MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam).
Дык у меня console application без VCL, даже процедуру переименовал, а свё равно точно так же теми же словами ругаецца на ту же строку! Что делать?
Цитата:
Originally posted by coder_in_law
Дык у меня console application без VCL, даже процедуру переименовал, а свё равно точно так же теми же словами ругаецца на ту же строку! Что делать?
Дык у меня console application без VCL, даже процедуру переименовал, а свё равно точно так же теми же словами ругаецца на ту же строку! Что делать?
Код в студию.
Вот ещё файл:
Во первых, попробуйте вынести объявление WndProc из области видимости класса в глобальную. И код откомпилируется.
Во вторых, вы никогда не обращали внимание на результат выполнения CreateWindow?
В третьих, нет цикла обработки сообщений. Ваше приложение не получает сообщений и не посылает их.
и так далее, и тому подобное....
Цитата:
Originally posted by honeybeer
Этот код 100% не рабочий.
Во первых, попробуйте вынести объявление WndProc из области видимости класса в глобальную. И код откомпилируется.
Во вторых, вы никогда не обращали внимание на результат выполнения CreateWindow?
В третьих, нет цикла обработки сообщений. Ваше приложение не получает сообщений и не посылает их.
и так далее, и тому подобное....
Этот код 100% не рабочий.
Во первых, попробуйте вынести объявление WndProc из области видимости класса в глобальную. И код откомпилируется.
Во вторых, вы никогда не обращали внимание на результат выполнения CreateWindow?
В третьих, нет цикла обработки сообщений. Ваше приложение не получает сообщений и не посылает их.
и так далее, и тому подобное....
А можно поподробнее о результате выполнения CreateWindow...