Модераторы: Daevaorn
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Структура класса Диалога 3, Профессионалам 
:(
    Опции темы
And234
Дата 28.11.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Структура класса диалога в MDI VC6
В MDI приложении для объявления и работы с дочерними диалогами
пытаюсь составить класс для каждого вида диалоговых окон.
объявление класса окна представил в виде

Код

class MyChild  
{
public:
    BOOL ShowWin();
    HWND hwndChild;
    BOOL NewForm(HWND hwnd_, HINSTANCE hInst_);
    MyChild();
    LRESULT CALLBACK WndProcChild (HWND hwnd_, UINT mMsg_, WPARAM wParam_, LPARAM lParam_);
    virtual ~MyChild();

};

MyChild::MyChild()
{}

MyChild::~MyChild()
{}

BOOL MyChild::NewForm(HWND hwnd_, HINSTANCE hInst_)
{
    hwndChild = CreateWindowEx (0L, 
        "CHILD",                                           
        "First Window", 
        WS_CHILD | WS_VISIBLE | WS_BORDER | WS_CAPTION ,                                            
        10, 
        40, 
        200, 
        200, 
        hwnd_, 
        (HMENU) 1,                                           
        hInst_, 
        NULL) ;
    
    return TRUE;
    
}

LRESULT CALLBACK MyChild::WndProcChild (HWND hwnd_, UINT mMsg_, WPARAM wParam_, LPARAM lParam_) 
{
    // обработка сообщений от формы

    return TRUE;
}

BOOL MyChild::ShowWin()
{
    ShowWindow(hwndChild, SW_SHOWNORMAL);
    return TRUE;
}



теперь необходимо зарегистрировать в объявлении класса процедуру обработки сообжений
регистрирую как указатель на член класса таким образом

Код

// класс мамки

    wclass.cbSize        = sizeof (wclass) ;
    wclass.lpszClassName = "MAIN" ;
    wclass.hInstance     = hInstance ;
    wclass.lpfnWndProc   = WndProc ;
    wclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
    wclass.hIcon         = hiconApp ;
    wclass.lpszMenuName  = NULL;
    wclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1) ;
    wclass.hIconSm       = hiconApp ;
    
    RegisterClassEx (&wclass) ;
    
// необходимый указатель 

    LRESULT (MyChild::*fgh)(HWND, UINT, WPARAM, LPARAM) const = 0;
    fgh = MyChild::WndProcChild;

// класс дочки

    wclass.lpszClassName = "CHILD" ;
    wclass.lpfnWndProc   = fgh ;
    wclass.hCursor       = LoadCursor (NULL, IDC_IBEAM) ; 
    wclass.hIcon         = NULL ;
    wclass.lpszMenuName  = NULL ;
    wclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ;
    wclass.hIconSm       = NULL ;
    
    RegisterClassEx (&wclass) ;



компилятор выдает следующее
ссылаясь на строку

Код

fgh = MyChild::WndProcChild;


Compiling...
error C2440: '=' : cannot convert from 'long (__stdcall MyChild::*)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long (__thiscall MyChild::*)(struct HWND__ *,unsigned int,unsigned int,long) const'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
error C2440: '=' : cannot convert from 'long (__thiscall MyChild::*)(struct HWND__ *,unsigned int,unsigned int,long) const' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
There is no context in which this conversion is possible
Error executing cl.exe.

Avely001.exe - 2 error(s), 0 warning(s)

PM MAIL ICQ   Вверх
Любитель
Дата 29.11.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



\Попробуй поставить, что он требует: __thiscall и const.


--------------------
PM MAIL ICQ Skype   Вверх
And234
Дата 29.11.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Насчет __thiscall, __stdcall и const если можно подробнее
Очень нужно, или источник где отрыть ЭТО.

с другим типом функций и параметров все нормально.

Для полного представления исходничек снизу.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Child.rar 6,91 Kb
PM MAIL ICQ   Вверх
Neitron
Дата 29.11.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Вопрос появляется с завидной переодичностости.
Обработчики сообщений окон, должны быть объвялены как статические.
Добавлено @ 14:04
Код


static LRESULT CALLBACK WndProcChild (HWND hwnd_, UINT mMsg_, WPARAM wParam_, LPARAM lParam_);

//skip



--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Coocky
Дата 29.11.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



And234Модератор:
Будешь дублировать тему НАКАЖУ к едрене-фене! smile
Одну тему перенес в API остальные удаляю с последним ккитайским предупреждением!


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.