⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Unit tests for window handling * * Copyright 2002 Bill Medland * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <assert.h>#include <stdlib.h>#include <stdarg.h>#include <stdio.h>#include "windef.h"#include "winbase.h"#include "wingdi.h"#include "winuser.h"#include "wine/test.h"#ifndef SPI_GETDESKWALLPAPER#define SPI_GETDESKWALLPAPER 0x0073#endif#define LONG_PTR INT_PTR#define ULONG_PTR UINT_PTRstatic HWND (WINAPI *pGetAncestor)(HWND,UINT);static HWND hwndMain, hwndMain2;/* check the values returned by the various parent/owner functions on a given window */static void check_parents( HWND hwnd, HWND ga_parent, HWND gwl_parent, HWND get_parent,                           HWND gw_owner, HWND ga_root, HWND ga_root_owner ){    HWND res;    if (pGetAncestor)    {        res = pGetAncestor( hwnd, GA_PARENT );        ok( res == ga_parent, "Wrong result for GA_PARENT %p expected %p", res, ga_parent );    }    res = (HWND)GetWindowLongA( hwnd, GWL_HWNDPARENT );    ok( res == gwl_parent, "Wrong result for GWL_HWNDPARENT %p expected %p", res, gwl_parent );    res = GetParent( hwnd );    ok( res == get_parent, "Wrong result for GetParent %p expected %p", res, get_parent );    res = GetWindow( hwnd, GW_OWNER );    ok( res == gw_owner, "Wrong result for GW_OWNER %p expected %p", res, gw_owner );    if (pGetAncestor)    {        res = pGetAncestor( hwnd, GA_ROOT );        ok( res == ga_root, "Wrong result for GA_ROOT %p expected %p", res, ga_root );        res = pGetAncestor( hwnd, GA_ROOTOWNER );        ok( res == ga_root_owner, "Wrong result for GA_ROOTOWNER %p expected %p", res, ga_root_owner );    }}static HWND create_tool_window( LONG style, HWND parent ){    HWND ret = CreateWindowExA(0, "ToolWindowClass", "Tool window 1", style,                               0, 0, 100, 100, parent, 0, 0, NULL );    ok( ret != 0, "Creation failed" );    return ret;}/* test parent and owner values for various combinations */static void test_parent_owner(void){    LONG style;    HWND test, owner, ret;    HWND desktop = GetDesktopWindow();    HWND child = create_tool_window( WS_CHILD, hwndMain );    trace( "main window %p main2 %p desktop %p child %p\n", hwndMain, hwndMain2, desktop, child );    /* child without parent, should fail */    test = CreateWindowExA(0, "ToolWindowClass", "Tool window 1",                           WS_CHILD, 0, 0, 100, 100, 0, 0, 0, NULL );    ok( !test, "WS_CHILD without parent created" );    /* desktop window */    check_parents( desktop, 0, 0, 0, 0, 0, 0 );    style = GetWindowLongA( desktop, GWL_STYLE );    ok( !SetWindowLongA( desktop, GWL_STYLE, WS_POPUP ), "Set GWL_STYLE on desktop succeeded" );    ok( !SetWindowLongA( desktop, GWL_STYLE, 0 ), "Set GWL_STYLE on desktop succeeded" );    ok( GetWindowLongA( desktop, GWL_STYLE ) == style, "Desktop style changed" );    /* normal child window */    test = create_tool_window( WS_CHILD, hwndMain );    trace( "created child %p\n", test );    check_parents( test, hwndMain, hwndMain, hwndMain, 0, hwndMain, hwndMain );    SetWindowLongA( test, GWL_STYLE, 0 );    check_parents( test, hwndMain, hwndMain, 0, 0, hwndMain, test );    SetWindowLongA( test, GWL_STYLE, WS_POPUP );    check_parents( test, hwndMain, hwndMain, 0, 0, hwndMain, test );    SetWindowLongA( test, GWL_STYLE, WS_POPUP|WS_CHILD );    check_parents( test, hwndMain, hwndMain, 0, 0, hwndMain, test );    SetWindowLongA( test, GWL_STYLE, WS_CHILD );    DestroyWindow( test );    /* child of desktop */    test = create_tool_window( WS_CHILD, desktop );    trace( "created child of desktop %p\n", test );    check_parents( test, desktop, 0, desktop, 0, test, desktop );    SetWindowLongA( test, GWL_STYLE, WS_POPUP );    check_parents( test, desktop, 0, 0, 0, test, test );    SetWindowLongA( test, GWL_STYLE, 0 );    check_parents( test, desktop, 0, 0, 0, test, test );    DestroyWindow( test );    /* child of child */    test = create_tool_window( WS_CHILD, child );    trace( "created child of child %p\n", test );    check_parents( test, child, child, child, 0, hwndMain, hwndMain );    SetWindowLongA( test, GWL_STYLE, 0 );    check_parents( test, child, child, 0, 0, hwndMain, test );    SetWindowLongA( test, GWL_STYLE, WS_POPUP );    check_parents( test, child, child, 0, 0, hwndMain, test );    DestroyWindow( test );    /* not owned top-level window */    test = create_tool_window( 0, 0 );    trace( "created top-level %p\n", test );    check_parents( test, desktop, 0, 0, 0, test, test );    SetWindowLongA( test, GWL_STYLE, WS_POPUP );    check_parents( test, desktop, 0, 0, 0, test, test );    SetWindowLongA( test, GWL_STYLE, WS_CHILD );    check_parents( test, desktop, 0, desktop, 0, test, desktop );    DestroyWindow( test );    /* owned top-level window */    test = create_tool_window( 0, hwndMain );    trace( "created owned top-level %p\n", test );    check_parents( test, desktop, hwndMain, 0, hwndMain, test, test );    SetWindowLongA( test, GWL_STYLE, WS_POPUP );    check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain );    SetWindowLongA( test, GWL_STYLE, WS_CHILD );    check_parents( test, desktop, hwndMain, desktop, hwndMain, test, desktop );    DestroyWindow( test );    /* not owned popup */    test = create_tool_window( WS_POPUP, 0 );    trace( "created popup %p\n", test );    check_parents( test, desktop, 0, 0, 0, test, test );    SetWindowLongA( test, GWL_STYLE, WS_CHILD );    check_parents( test, desktop, 0, desktop, 0, test, desktop );    SetWindowLongA( test, GWL_STYLE, 0 );    check_parents( test, desktop, 0, 0, 0, test, test );    DestroyWindow( test );    /* owned popup */    test = create_tool_window( WS_POPUP, hwndMain );    trace( "created owned popup %p\n", test );    check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain );    SetWindowLongA( test, GWL_STYLE, WS_CHILD );    check_parents( test, desktop, hwndMain, desktop, hwndMain, test, desktop );    SetWindowLongA( test, GWL_STYLE, 0 );    check_parents( test, desktop, hwndMain, 0, hwndMain, test, test );    DestroyWindow( test );    /* top-level window owned by child (same as owned by top-level) */    test = create_tool_window( 0, child );    trace( "created top-level owned by child %p\n", test );    check_parents( test, desktop, hwndMain, 0, hwndMain, test, test );    DestroyWindow( test );    /* popup owned by desktop (same as not owned) */    test = create_tool_window( WS_POPUP, desktop );    trace( "created popup owned by desktop %p\n", test );    check_parents( test, desktop, 0, 0, 0, test, test );    DestroyWindow( test );    /* popup owned by child (same as owned by top-level) */    test = create_tool_window( WS_POPUP, child );    trace( "created popup owned by child %p\n", test );    check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain );    DestroyWindow( test );    /* not owned popup with WS_CHILD (same as WS_POPUP only) */    test = create_tool_window( WS_POPUP | WS_CHILD, 0 );    trace( "created WS_CHILD popup %p\n", test );    check_parents( test, desktop, 0, 0, 0, test, test );    DestroyWindow( test );    /* owned popup with WS_CHILD (same as WS_POPUP only) */    test = create_tool_window( WS_POPUP | WS_CHILD, hwndMain );    trace( "created owned WS_CHILD popup %p\n", test );    check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain );    DestroyWindow( test );    /******************** parent changes *************************/    trace( "testing parent changes\n" );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -