Свой контрол в DLL
Пишу снова, потому что не смог найти нужного материала в интернете.
Проблема такая:
Мне приспичело создать свой "Edit" естественно с некоторыми особенностями. Но я не знаю как его всунуть в DLL. Если в библиотеке создать ф-ю "CreateMyEdit(-//-)" и далее как обычное окно, то, как мне представляется, ф-я вернёт hWnd контрола толко по завершению, когда оконная процедура прервётся. Видимо этот вариант не подходит...
Пожалуйста подскажите как быть.
Покапался ещё немного и пришёл к выводу что я не имею ни малейшего представления о создании собственного контрола в DLL.
P.S. Если это важно, то пишу в MS VS6.
Буду длагодарен за любую информацию.
Заранее спасибо.
Здравствуйте.
Пишу снова, потому что не смог найти нужного материала в интернете.
Проблема такая:
Мне приспичело создать свой "Edit" естественно с некоторыми особенностями. Но я не знаю как его всунуть в DLL. Если в библиотеке создать ф-ю "CreateMyEdit(-//-)" и далее как обычное окно, то, как мне представляется, ф-я вернёт hWnd контрола толко по завершению, когда оконная процедура прервётся. Видимо этот вариант не подходит...
Пожалуйста подскажите как быть.
Покапался ещё немного и пришёл к выводу что я не имею ни малейшего представления о создании собственного контрола в DLL.
P.S. Если это важно, то пишу в MS VS6.
Буду длагодарен за любую информацию.
Заранее спасибо.
В самых общих чертах - твоя DLL должна всего лишь регистрировать класс (RegisterWindowClass), а уж твоя прилога должна создавать окна, принадлежащие этому классу. Но это все, что я знаю - сам не делал. Копай!
Здравствуйте.
Пишу снова, потому что не смог найти нужного материала в интернете.
Проблема такая:
Мне приспичело создать свой "Edit" естественно с некоторыми особенностями. Но я не знаю как его всунуть в DLL. Если в библиотеке создать ф-ю "CreateMyEdit(-//-)" и далее как обычное окно, то, как мне представляется, ф-я вернёт hWnd контрола толко по завершению, когда оконная процедура прервётся. Видимо этот вариант не подходит...
Пожалуйста подскажите как быть.
Покапался ещё немного и пришёл к выводу что я не имею ни малейшего представления о создании собственного контрола в DLL.
P.S. Если это важно, то пишу в MS VS6.
Буду длагодарен за любую информацию.
Заранее спасибо.
Все правильно делаешь, реализуй в своей DLL метод создания окна, который возвращает HWND созданного окна, и ничего не бойся. :)
Оконная процедура для того и нужна, чтоб вызываться и завершаться в течении всей жизни окна. В данном случае она выполниться для сообщения WM_CREATE.
Ты видимо, путаешь оконную процедуру с циклом обработки сообщений...
http://web.vrn.ru/567637/PB/Technics/Tech010/pbte010.htm
Вариант Green я так и не понял...
Если я создам ф.
HWND CreateMyEdit(-//-)
{
//Регистрируем класс
//Создаём обычное окно
//Запускаем цикл обработки сообщений
return hWnd;
}
Ф. вернёт hWnd только после того как прервётся цикл обработки сообщений.
Реализацию cпособа AviDen я нашёл:
http://web.vrn.ru/567637/PB/Technics/Tech010/pbte010.htm
Вариант Green я так и не понял...
Если я создам ф.
HWND CreateMyEdit(-//-)
{
//Регистрируем класс
//Создаём обычное окно
//Запускаем цикл обработки сообщений
return hWnd;
}
Ф. вернёт hWnd только после того как прервётся цикл обработки сообщений.
А зачем запускаешь цикл обработки сообщений?
Для одного потока достаточно одного такого цикла.
Т.о.
HWND CreateMyEdit(-//-)
{
//Регистрируем класс
//Создаём окно
return hWnd;
}
А зачем запускаешь цикл обработки сообщений?
Для одного потока достаточно одного такого цикла.
Т.о.
HWND CreateMyEdit(-//-)
{
//Регистрируем класс
//Создаём окно
return hWnd;
}
Получается, что достаточно просто в WNDCLASSEX обьявит Wndproc и после он будет самостоятельно вызываться?
Получается, что достаточно просто в WNDCLASSEX обьявит Wndproc и после он будет самостоятельно вызываться?
Конечно!
while(GetMessage(&msg,hwnd,0L,0L) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Ещё созрел второй вопрос, вернее проблема:
Создаю проэкт, подключаю всё необходимое с DLL(*.lib,*.h), ве нормально компилируется.
Но при редактировании не выпадает подсказки с моей ф-ей. Это конечно не смертельно, но и не удобно.
Собственно вот "*.h", вдруг что не так:
#define EXPORT extern "C" __declspec (dllexport)
EXPORT HWND CreateMyEdit(HWND);
Я сомневался потому, что в простой "оконной" программе делал всё время так:
while(GetMessage(&msg,hwnd,0L,0L) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Ещё созрел второй вопрос, вернее проблема:
Создаю проэкт, подключаю всё необходимое с DLL(*.lib,*.h), ве нормально компилируется.
Но при редактировании не выпадает подсказки с моей ф-ей. Это конечно не смертельно, но и не удобно.
Собственно вот "*.h", вдруг что не так:
#define EXPORT extern "C" __declspec (dllexport)
EXPORT HWND CreateMyEdit(HWND);
Все нормально.
Видимо редактор не пропарсил твой файл.
Чем пользуешься?
В VisualAssist,например, есть спец. кнопочка "Reparse Current File"
Пишу в MS VC6
Ставь себе Visual Assist.
Это плагин для VC, очень удобная штука.
Где взять поищи в инете либо на лотках.
Теперь всё работает!
А Visual Assist я буду искать, видимо действительно полезная вещь.