Невозможно создать окно (CreateWindowEx) с существующим дочерним классом
У меня есть родительское окно и несколько дочерних окон, прикрепленных к этому. С помощью SpyXX я вижу, что у всех детей есть определенный класс стилей, скажем, ChildWindowClass
,
Когда я создаю окно с именем этого конкретного класса, CreateWindowEx
возвращает NULL
справиться. Если я использую свой собственный класс и просто устанавливаю родителя, окно является дочерним окном, но - конечно - имеет другой класс, как и все другие дочерние.
Если я получу стиль и затем установлю его, стиль будет найден, но не установлен для моего дочернего окна. Он по-прежнему показывает стиль, используемый с CreateWindowEx
HWND firstChild = FindWindowEx(MyClass::_parent, NULL, szFsxChildWindowClass, NULL);
LONG childStyle = GetWindowLong(firstChild, GWL_STYLE);
...
SetWindowLong(MyClass::_child,GWL_STYLE, childStyle);
ChildWindowClass
не зарегистрировано мной, поэтому я не могу проверить, как оно зарегистрировано. Итак, как я могу установить этот стиль для моего дочернего окна?
- Редактировать звонок по запросу -
child = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR,
szWindowClass, // this is where I want to place the name of the child class
_T("Test"),
WS_CHILDWINDOW | WS_VISIBLE,
x,y, // 0,0
w, h, // 500,100
MyClass::_parent, // parent
NULL,
MyClass::_hInstance, // must this be 0??
NULL
);
1 ответ
Проверьте GetLastError
, Если он ненулевой, вы, скорее всего, неправильно используете API. Если это 0, это означает, что оконная процедура явно провалила создание, возвращая FALSE из WM_NCCREATE
или же WM_CREATE
,
При обработке этих сообщений оконная процедура имеет доступ ко всем параметрам, которые вы передаете функции (стили, заголовок, координаты, родительское окно и меню), и этот конкретный класс окна может потребовать передачи дополнительных данных через lpCreateParams
или даже в заголовке или координатах, в противном случае создание невозможно.
Установить точку останова или крючок WM_CREATE
для окон этого класса и изучить, как были созданы эти существующие дочерние окна, каковы были параметры. (Предполагая, что у вас нет только документации на это!)