Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создание дочерних окон в DLL - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите какую-нибудь книгу по базам данных в С++ http://www.cyberforum.ru/cpp-beginners/thread494311.html
Подскажите, пожалуйста, есть ли книга по БД в С++?
C++ Как изменить первые 5 байт в строке типа char Ламерский вопрос! Есть строка,как изменить в ней первые 5 байт, в них должна храниться длина строки http://www.cyberforum.ru/cpp-beginners/thread494283.html
Как поменять цвет scrollbox'a у listbox'a C++
Как поменять цвет scrollbox'a у listbox'a.......... И сделать его двухмерным....(бордеры scrollbox'a линия......)
C++ Как внедрить dll в чужой процесс
Как внедрить длл в чужой процесс, и отлавливать все его сообщения...... если возможно, то небольшой пример или ссылка рус. ресурс.........или объясните на пальцах
C++ Форматированный ввод/вывод в файл http://www.cyberforum.ru/cpp-beginners/thread494235.html
подскажите как читать из файла или писать в файл например int ( не используя при этом fprintf & fscanf )
C++ Преобразование типов кое-что о преобразовании типов. float F; __int32 DW; DW=*(__int32 *)&F; значение DW должно совпадать с F побитово, без всяких преобразований, правильно? будет ли компилятор выполнять какие-либо... подробнее

Показать сообщение отдельно
arist
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 100

Создание дочерних окон в DLL - C++

10.04.2011, 20:03. Просмотров 1049. Ответов 4
Метки (Все метки)

Ситуация такая:
Из СОМ-объекта (в виде DLL-ки) грузится (LoadLibrary) другая DLL-ка.
Потом из последней вызывается функция, например CreateView, которой передаётся HWND родителя.
Функция должна создать дочернее окно и окно(диалог) должно реагировать на все сообщения (WM_xxx) как обычно.
1) Пробовал сделать это на VC7:
Делаем СОМ-объект в виде DLL с помощью ATL. Здесь вроде проблем нет.
Делаем DLL-ку из которой будет вызываться функция CreateView. Делаем ресурс диалог и его класс (MFC).
Функция CreateView:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HRESULT CAAMDefaultApp::CreateView(HWND hwndOwner)
{
    pWndParent = new CWnd;
    if(pWndParent->Attach(hwndOwner)){
        dlg.DoModal();
        //или
        //dlg.Create(IDD_ARISTARCH, pWndParent);
        
    }
    return S_OK;
}
extern 'C' HRESULT inline __declspec(dllexport) CreateView(HWND hwndOwner){
    return theApp.CreateView(hwndOwner);
}
В результате при вызове DoModal или Create происходит Debug Assertion Failure! в функции AfxGetResourceHandle.
Т.е., на сколько я понимаю, не может найтись ресурс (диалог)...
2) Пробовал сделать это на BCB6:
СОМ-объект остаётся тот же (написан на VC7+ATL).
Делаем DLL-ку...
Делаем форму...
Функция CreateView:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
extern 'C' HRESULT _export CreateView(HWND hwndOwner){
    frm = new TForm2(0);
    if(frm){
        frm->ParentWindow = hwndOwner;
 
        frm->ControlStyle << (csCaptureMouse|csClickEvents|csReflector);    //пробовал
        frm->ControlStyle >> csNoStdEvents;
        frm->Edit1->ControlStyle << (csCaptureMouse|csClickEvents|csReflector); //и так
        frm->Edit1->ControlStyle >> csNoStdEvents;
                                            //и без
        frm->ControlState << (csLButtonDown|csFocusing);
        frm->Edit1->ControlState << (csLButtonDown|csFocusing);         //этого
 
        frm->Show();
    }
    return S_OK;
}
В результате всё вроде-бы работает... нажимаются кнопки (Button), ставятся галочки (CheckBox), но когда нажимаешь левую кнопку на поле ввода (Edit, ComboBox и т.п.) поле ввода фокус не получает. Если нажать правую кнопку, то всё работает нормально (поле получает фокус и можно вводить текст).
Пробовал задавать обработчик TEdit::OnMouseUp, он не вызывается. А TForm::OnMouseUp вызывается.

Как быть?
(желательно чтобы решение было на VC7, но и на BCB6 тоже потянет)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru