我在MSDN中看到,它说:
如果创建的窗口是子窗口,则其默认位置位于Z顺序的底部.如果创建的窗口是顶级窗口,则其默认位置位于Z顺序的顶部(但在所有最顶层窗口的下方,除非创建的窗口本身位于最顶层).(http://msdn.microsoft.com/en-us/library/windows/desktop/ms632680(v=vs.85).aspx)
但是,另一个文档说:当一个应用程序创建一个窗口时,系统将它放在同一类型窗口的z顺序的顶部 (http://msdn.microsoft.com/en-us/library/windows/ desktop/ms632599(v = vs.85).aspx)
当我像这样测试时,
btn1 = ::CreateWindow(L"button", L"OK", WS_TABSTOP|BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD
, 10, 10, 50, 30, hWnd, (HMENU)51, hInst, NULL);
btn2 = ::CreateWindow(L"button", L"Cancel", WS_TABSTOP|WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE
, 20, 20, 70, 30, hWnd, (HMENU)52, hInst, NULL);
Run Code Online (Sandbox Code Playgroud)
新创建的子窗口(例如:我在窗口中创建了两个按钮并且它们重叠,我可以看到稍后创建的按钮覆盖了创建的第一个按钮)
MSDN中的第一个声明是否与我的测试相矛盾.
文档准确无误.您正被另一个问题绊倒,您允许子窗口在其他子窗口中绘制自己.所以现在绘画顺序很重要.
您可以通过将WS_CLIPSIBLINGS样式标志添加到CreateWindowEx调用来解决此问题.您现在将看到 "确定"按钮位于顶部.固定:
btn1 = ::CreateWindow(L"button", L"OK",
WS_TABSTOP|BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS,
10, 10, 50, 30, hWnd, (HMENU)51, hInst, NULL);
// etc, use it as well on other child windows
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3601 次 |
| 最近记录: |