Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Трабл с Wndclass

11K
10 февраля 2006 года
coder_in_law
11 / / 19.10.2005
Доброго времени суток вам, уважаемые!
У меня возник трабл с 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
Как можно исправить?
246
10 февраля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
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
Как можно исправить?


Для начала если взялся писать на API, то создай проект без VCL. Надо просто объявить WndProc как static.

11K
10 февраля 2006 года
coder_in_law
11 / / 19.10.2005
Цитата:
Originally posted by GIZMO
Для начала если взялся писать на API, то создай проект без VCL. Похоже компиллер путает св-во TWinControl::WndProc (напр. формы) и твою процедуру. Ну или обзови процедуру по другому напр. MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam).


Дык у меня console application без VCL, даже процедуру переименовал, а свё равно точно так же теми же словами ругаецца на ту же строку! Что делать?

246
10 февраля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by coder_in_law
Дык у меня console application без VCL, даже процедуру переименовал, а свё равно точно так же теми же словами ругаецца на ту же строку! Что делать?


Код в студию.

11K
11 февраля 2006 года
coder_in_law
11 / / 19.10.2005
Цитата:
Originally posted by GIZMO
Код в студию.


Код:
#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();
}
11K
11 февраля 2006 года
coder_in_law
11 / / 19.10.2005
Вот ещё файл:
585
13 февраля 2006 года
honeybeer
297 / / 06.09.2004
Этот код 100% не рабочий.
Во первых, попробуйте вынести объявление WndProc из области видимости класса в глобальную. И код откомпилируется.
Во вторых, вы никогда не обращали внимание на результат выполнения CreateWindow?
В третьих, нет цикла обработки сообщений. Ваше приложение не получает сообщений и не посылает их.
и так далее, и тому подобное....
11K
16 февраля 2006 года
coder_in_law
11 / / 19.10.2005
Цитата:
Originally posted by honeybeer
Этот код 100% не рабочий.
Во первых, попробуйте вынести объявление WndProc из области видимости класса в глобальную. И код откомпилируется.
Во вторых, вы никогда не обращали внимание на результат выполнения CreateWindow?
В третьих, нет цикла обработки сообщений. Ваше приложение не получает сообщений и не посылает их.
и так далее, и тому подобное....


А можно поподробнее о результате выполнения CreateWindow...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог