У меня есть два проекта: один — программа Win32, а другой — динамическая библиотека C++/cli.
в динамической библиотеке С++/cli экспортируется эта функция:
using namespace System::Windows::Forms;
using namespace System::Diagnostics;
LIB_API void Create(HWND parent){
auto c = gcnew TextBox();
c->Location = System::Drawing::Point(0, 0);
c->Name = "textBox1";
c->Size = System::Drawing::Size(100, 21);
c->Parent = Control::FromHandle(IntPtr(parent));
}
когда программа win32 вызовет эту функцию, будет создан элемент управления TextBox
.
но это не работа.
Журнал отладки показывает, что TextBox
был создан, но использование spy++ не может его найти.
@DanielW. это приложение виджетов qt, это код: ::Create((HWND)ui.widget->winId());
Смешивание QT с Winforms? Это звучит очень некрасиво. Используйте либо (вернее: ни то, ни другое...)
Я решил проблему сам.
using namespace System::Windows::Forms;
using namespace System::Diagnostics;
LIB_API void Create(HWND parent){
auto c = gcnew TextBox();
//c->Location = System::Drawing::Point(0, 0);
c->Name = "textBox1";
//c->Size = System::Drawing::Size(100, 21);
//c->Parent = Control::FromHandle(IntPtr(parent));
::SetParent((HWND)c->Handle.ToPointer(), parent);
::MoveWindow((HWND)c->Handle.ToPointer(), 0, 0, 200, 200, true);
}
Благодарим вас за вклад в сообщество Stack Overflow. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?
Где вы добавляете текстовое поле к элементам управления родительского элемента управления?