2012-06-28 59 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,则意味着窗口过程明确地通过从WM_NCCREATEWM_CREATE返回FALSE而失败。

在处理这些消息时,窗口过程可以访问传递给函数(样式,标题,坐标,父窗口和菜单)的所有参数,并且该特定窗口类可能需要通过lpCreateParams传递附加数据,甚至在标题或坐标中,否则创作失败。

为该类的窗口设置断点或钩子WM_CREATE并检查这些现有子窗口是如何创建的,参数是什么。 (假设你不只是有文档!)

+0

我尝试挂钩到FSX(Microsoft Flightsimulator)。根据我的知识,没有文档)如何添加子窗口。我能看到的唯一的事情是它是如何与spyxx组织的。 –