2012-06-28 5 views
0

У меня есть родительское окно и несколько дочерних окон, связанных с этим. С SpyXX я могу видеть, что у всех детей есть определенный стиль, скажем ChildWindowClass.Невозможно создать окно (CreateWindowEx) с существующим дочерним классом

Когда я создаю окно с именем этого конкретного класса, 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 
     ); 
+0

Вы должны показать нам свой вызов CreateWindowEx. –

+0

Кроме того, просто убедитесь, что класс окон, который вы хотите использовать, зарегистрирован в вашем пространстве процесса? – nielsj

+0

Тот же процесс, тот же поток! –

ответ

1

Проверить GetLastError. Если это отличное от нуля, вы, скорее всего, злоупотребляете API. Если это 0, это означает, что оконная процедура явно провалила создание, вернув FALSE из WM_NCCREATE или WM_CREATE.

При обработке этих сообщений оконная процедура имеет доступ ко всем параметрам, которые вы передаете функции (стили, название, координаты, родительское окно и меню), и для этого конкретного класса окна могут потребоваться дополнительные данные для передачи через lpCreateParams, или даже в заголовке или координатах, в противном случае это может привести к созданию другого.

Установить точку останова или крючок WM_CREATE для окон этого класса и изучить, как были созданы существующие дочерние окна, каковы были параметры. (Предполагая, что у вас есть не только документация на нем!)

+0

Я пытаюсь подключиться к FSX (Microsoft Flightimulator). По моим сведениям, нет документации), как добавить дочернее окно. Единственное, что я вижу, это то, как он организован с помощью spyxx. –

Смежные вопросы