asd0023 发表于 2026-8-30 23:37:59

设置控件锚点

<火山程序 类型 = "通常" 版本 = 1 />

类 控件锚点 <公开>
{
    变量 全被锚控件数组 <静态 类型 = 被锚控件数组类>
    变量 全父窗口 <静态 类型 = 父窗口数组类>
    变量 全子控件句柄数组 <静态 类型 = 整数数组类>

    常量 GWL_WNDPROC <公开 值 = -4>
    常量 WM_SIZE <公开 类型 = 整数 值 = 5>

    方法 设置控件锚点 <公开 静态 注释 = "指定控件的锚点以适应窗口的大小改变">
    参数 控件句柄 <类型 = 整数 注释 = "控件的句柄">
    参数 锚住左边 <类型 = 逻辑型 注释 = "是否锚住控件左边">
    参数 锚住顶边 <类型 = 逻辑型 注释 = "是否锚住控件顶边">
    参数 锚住右边 <类型 = 逻辑型 注释 = "是否锚住控件右边">
    参数 锚住下边 <类型 = 逻辑型 注释 = "是否锚住控件下边">
    {
      变量 父窗口句柄 <类型 = 整数>
      变量 父窗口过程 <类型 = 整数>
      变量 某父窗口 <类型 = 父窗口>
      变量 某被锚控件 <类型 = 被锚控件>
      变量 i <类型 = 整数>
      i = 取被锚控件索引 (控件句柄)
      如果 (i == -1)
      {
            父窗口句柄 = API.GetParent (控件句柄)
            父窗口过程 = API.GetWindowLongA (父窗口句柄, GWL_WNDPROC)
            某被锚控件.父窗口句柄 = 父窗口句柄
            某被锚控件.窗口句柄 = 控件句柄
            某被锚控件.左边距离 = 取窗口左边 (控件句柄) - 取窗口左边 (父窗口句柄) - 取窗口边界宽度 (父窗口句柄)
            某被锚控件.上边距离 = 取窗口上边 (控件句柄) - 取窗口上边 (父窗口句柄) - 取窗口标题栏高度 (父窗口句柄)
            某被锚控件.右边距离 = 取窗口右边 (父窗口句柄) - 取窗口右边 (控件句柄) - 取窗口边界宽度 (父窗口句柄)
            某被锚控件.下边距离 = 取窗口下边 (父窗口句柄) - 取窗口下边 (控件句柄) - 取窗口边界宽度 (父窗口句柄)
            某被锚控件.锚住左边 = 锚住左边
            某被锚控件.锚住顶边 = 锚住顶边
            某被锚控件.锚住右边 = 锚住右边
            某被锚控件.锚住下边 = 锚住下边
            某被锚控件.宽度 = 取窗口宽度 (控件句柄)
            某被锚控件.高度 = 取窗口高度 (控件句柄)
            全被锚控件数组.加入成员 (某被锚控件)
      }
      否则
      {
            父窗口句柄 = API.GetParent (控件句柄)
            父窗口过程 = API.GetWindowLongA (父窗口句柄, GWL_WNDPROC)
            全被锚控件数组.取成员 (i).父窗口句柄 = 父窗口句柄
            全被锚控件数组.取成员 (i).窗口句柄 = 控件句柄
            全被锚控件数组.取成员 (i).左边距离 = 取窗口左边 (控件句柄) - 取窗口左边 (父窗口句柄) - 取窗口边界宽度 (父窗口句柄)
            全被锚控件数组.取成员 (i).上边距离 = 取窗口上边 (控件句柄) - 取窗口上边 (父窗口句柄) - 取窗口标题栏高度 (父窗口句柄)
            全被锚控件数组.取成员 (i).右边距离 = 取窗口右边 (父窗口句柄) - 取窗口右边 (控件句柄) - 取窗口边界宽度 (父窗口句柄)
            全被锚控件数组.取成员 (i).下边距离 = 取窗口下边 (父窗口句柄) - 取窗口下边 (控件句柄) - 取窗口边界宽度 (父窗口句柄)
            全被锚控件数组.取成员 (i).锚住左边 = 锚住左边
            全被锚控件数组.取成员 (i).锚住顶边 = 锚住顶边
            全被锚控件数组.取成员 (i).锚住右边 = 锚住右边
            全被锚控件数组.取成员 (i).锚住下边 = 锚住下边
            全被锚控件数组.取成员 (i).宽度 = 取窗口宽度 (控件句柄)
            全被锚控件数组.取成员 (i).高度 = 取窗口高度 (控件句柄)
      }
      如果 (取父窗口索引 (父窗口句柄) == -1)
      {
            某父窗口.窗口句柄 = 父窗口句柄
            某父窗口.旧窗口过程 = 父窗口过程
            某父窗口.控制模式_锚点 = 真
            API.SetWindowLongA (父窗口句柄, GWL_WNDPROC, 取静态方法地址 (新窗口过程))
            全父窗口.加入成员 (某父窗口)
      }
    }

    方法 水平均分子控件 <公开 静态 注释 = "将该控件的第一层子控件水平均分">
    参数 父窗口句柄 <类型 = 整数 注释 = "要水平其子控件的父窗口句柄">
    参数 子控件高度 <类型 = 整数 注释 = "要固定高度,则设定一个值;要动态自适应,则设为0">
    参数 控件间距 <类型 = 整数 @默认值 = 0>
    {
      变量 某父窗口 <类型 = 父窗口>
      变量 父窗口过程 <类型 = 整数>
      如果 (控件间距 == 0)
      {
            控件间距 = 5
      }
      如果 (取父窗口索引 (父窗口句柄) == -1)
      {
            父窗口过程 = API.GetWindowLongA (父窗口句柄, GWL_WNDPROC)
            某父窗口.窗口句柄 = 父窗口句柄
            某父窗口.旧窗口过程 = 父窗口过程
            某父窗口.控制模式_水平均分 = 真
            某父窗口.间距 = 控件间距
            某父窗口.子控件高度 = 子控件高度
            API.SetWindowLongA (父窗口句柄, GWL_WNDPROC, 取静态方法地址 (新窗口过程))
            全父窗口.加入成员 (某父窗口)
      }
    }

    方法 垂直均分子控件 <公开 静态 注释 = "将该控件的第一层子控件垂直均分">
    参数 父窗口句柄 <类型 = 整数 注释 = "要均分其子控件的父控件">
    参数 子控件宽度 <类型 = 整数 注释 = "要固定宽度,则设定一个值;要动态自适应,则设为0">
    参数 控件间距 <类型 = 整数 注释 = "默认为5,可以设置" @默认值 = 0>
    {
      变量 某父窗口 <类型 = 父窗口>
      变量 父窗口过程 <类型 = 整数>
      如果 (控件间距 == 0)
      {
            控件间距 = 5
      }
      如果 (取父窗口索引 (父窗口句柄) == -1)
      {
            父窗口过程 = API.GetWindowLongA (父窗口句柄, GWL_WNDPROC)
            某父窗口.窗口句柄 = 父窗口句柄
            某父窗口.旧窗口过程 = 父窗口过程
            某父窗口.控制模式_垂直均分 = 真
            某父窗口.间距 = 控件间距
            某父窗口.子控件宽度 = 子控件宽度
            API.SetWindowLongA (父窗口句柄, GWL_WNDPROC, 取静态方法地址 (新窗口过程))
            全父窗口.加入成员 (某父窗口)
      }
    }

    方法 新窗口过程 <静态 类型 = 整数>
    参数 hwnd <类型 = 整数>
    参数 uMsg <类型 = 整数>
    参数 wParam <类型 = 整数>
    参数 lParam <类型 = 整数>
    {
      变量 旧窗口过程 <类型 = 整数>
      变量 某父窗口 <类型 = 父窗口>
      变量 索引 <类型 = 整数>
      变量 r <类型 = 整数>
      变量 i <类型 = 整数>
      变量 某被锚控件 <类型 = 被锚控件>
      变量 矩形 <类型 = 矩形_>
      变量 子控件句柄数组 <类型 = 整数数组类>
      变量 子控件个数 <类型 = 整数>
      变量 子控件宽度 <类型 = 整数>
      变量 子控件高度 <类型 = 整数>
      索引 = 取父窗口索引 (hwnd)
      某父窗口 = 全父窗口.取成员 (索引)
      旧窗口过程 = 某父窗口.旧窗口过程
      如果 (uMsg == WM_SIZE)
      {
            如果 (某父窗口.控制模式_水平均分 == 真)
            {
                取窗口第一层子控件 (hwnd, 子控件句柄数组)
                子控件个数 = 子控件句柄数组.取成员数 ()
                子控件宽度 = (取窗口客户区宽度 (hwnd) - 某父窗口.间距 * (子控件个数 + 1)) / 子控件个数
                如果 (某父窗口.子控件高度 != 0)
                {
                  子控件高度 = 某父窗口.子控件高度
                }
                否则
                {
                  子控件高度 = 取窗口客户区高度 (hwnd) - 某父窗口.间距 * 2
                }
                逆序数组 (子控件句柄数组)
                循环 (, 子控件句柄数组.取成员数 (), i)
                {
                  API.MoveWindow (子控件句柄数组.取成员 (i), 某父窗口.间距 * i + 子控件宽度 * (i - 1), 某父窗口.间距, 子控件宽度, 子控件高度, 真)
                }
            }
            如果 (某父窗口.控制模式_垂直均分 == 真)
            {
                取窗口第一层子控件 (hwnd, 子控件句柄数组)
                子控件个数 = 子控件句柄数组.取成员数 ()
                子控件高度 = (取窗口客户区高度 (hwnd) - 某父窗口.间距 * (子控件个数 + 1)) / 子控件个数
                如果 (某父窗口.子控件宽度 != 0)
                {
                  子控件宽度 = 某父窗口.子控件宽度
                }
                否则
                {
                  子控件宽度 = 取窗口客户区宽度 (hwnd) - 某父窗口.间距 * 2
                }
                逆序数组 (子控件句柄数组)
                循环 (, 子控件句柄数组.取成员数 (), i)
                {
                  API.MoveWindow (子控件句柄数组.取成员 (i), 某父窗口.间距, 某父窗口.间距 * i + 子控件高度 * (i - 1), 子控件宽度, 子控件高度, 真)
                }
            }
            如果 (某父窗口.控制模式_锚点)
            {
                循环 (, 全被锚控件数组.取成员数 (), i)
                {
                  某被锚控件 = 全被锚控件数组.取成员 (i)
                  如果 (某被锚控件.父窗口句柄 == hwnd)
                  {
                        如果 (某被锚控件.锚住左边)
                        {
                            如果 (某被锚控件.锚住右边)
                            {
                              某被锚控件.宽度 = 取窗口客户区宽度 (hwnd) - 某被锚控件.左边距离 - 某被锚控件.右边距离
                            }
                        }
                        否则
                        {
                            如果 (某被锚控件.锚住右边)
                            {
                              某被锚控件.左边距离 = 取窗口客户区宽度 (hwnd) - 某被锚控件.宽度 - 某被锚控件.右边距离
                            }
                        }
                        如果 (某被锚控件.锚住顶边)
                        {
                            如果 (某被锚控件.锚住下边)
                            {
                              某被锚控件.高度 = 取窗口客户区高度 (hwnd) - 某被锚控件.上边距离 - 某被锚控件.下边距离
                            }
                        }
                        否则
                        {
                            某被锚控件.上边距离 = 取窗口客户区高度 (hwnd) - 某被锚控件.高度 - 某被锚控件.下边距离
                        }
                        API.MoveWindow (某被锚控件.窗口句柄, 某被锚控件.左边距离, 某被锚控件.上边距离, 某被锚控件.宽度, 某被锚控件.高度, 真)
                  }
                }
            }
      }
      r = API.CallWindowProcA (旧窗口过程, hwnd, uMsg, wParam, lParam)
      返回 (r)
    }

    方法 逆序数组 <静态 注释 = "将数组的元素颠倒次序">
    参数 将要逆序的数组 <类型 = 整数数组类>
    {
      变量 i <类型 = 整数>
      变量 临时数组 <类型 = 整数数组类>
      变量 数组长度 <类型 = 整数>
      数组长度 = 将要逆序的数组.取成员数 ()
      // 复制数组 (临时数组, 将要逆序的数组)
      临时数组.从数组复制 (将要逆序的数组)

      循环 (, 数组长度, i)
      {
            将要逆序的数组.加入成员 (临时数组.取成员 (数组长度 - i + 1))
      }
    }

    方法 取父窗口索引 <静态 类型 = 整数 注释 = "找不到返回-1" 折叠>
    参数 参父窗口句柄 <类型 = 整数>
    {
      变量 i <类型 = 整数>
      循环 (, 全父窗口.取成员数 (), i)
      {
            如果 (全父窗口.取成员 (i).窗口句柄 == 参父窗口句柄)
            {
                返回 (i)
            }
      }
      返回 (-1)
    }

    方法 取窗口左边 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.取窗口矩形_ (参窗口句柄, 矩形)
      返回 (矩形.左边)
    }

    方法 取窗口上边 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.取窗口矩形_ (参窗口句柄, 矩形)
      返回 (矩形.顶边)
    }

    方法 取窗口右边 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.取窗口矩形_ (参窗口句柄, 矩形)
      返回 (矩形.右边)
    }

    方法 取窗口下边 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.取窗口矩形_ (参窗口句柄, 矩形)
      返回 (矩形.底边)
    }

    方法 取窗口宽度 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.取窗口矩形_ (参窗口句柄, 矩形)
      返回 (矩形.右边 - 矩形.左边)
    }

    方法 取窗口高度 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.取窗口矩形_ (参窗口句柄, 矩形)
      返回 (矩形.底边 - 矩形.顶边)
    }

    方法 取窗口客户区宽度 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.GetClientRect (参窗口句柄, 矩形)
      返回 (矩形.右边 - 矩形.左边)
    }

    方法 取窗口客户区高度 <静态 类型 = 整数>
    参数 参窗口句柄 <类型 = 整数>
    {
      变量 矩形 <类型 = 矩形类>
      API.GetClientRect (参窗口句柄, 矩形)
      返回 (矩形.底边 - 矩形.顶边)
    }

    方法 取窗口标题栏高度 <静态 类型 = 整数 折叠>
    参数 参窗口句柄 <类型 = 整数>
    {
      返回 (取窗口高度 (参窗口句柄) - 取窗口客户区高度 (参窗口句柄) - 取窗口边界宽度 (参窗口句柄))
    }

    方法 取窗口边界宽度 <静态 类型 = 整数 折叠>
    参数 参窗口句柄 <类型 = 整数>
    {
      返回 ((取窗口宽度 (参窗口句柄) - 取窗口客户区宽度 (参窗口句柄)) / 2)
    }

    方法 取窗口第一层子控件 <静态 注释 = "以|分隔的子控件句柄,返回整数数组">
    参数 父窗口句柄 <类型 = 整数>
    参数 接收返回的数组 <类型 = 整数数组类>
    {
      全子控件句柄数组.重置数组 (0, 假)
      接收返回的数组.重置数组 (0, 假)
      API.EnumChildWindows (父窗口句柄, 取静态方法地址 (枚举子窗口过程), 父窗口句柄)
      接收返回的数组 = 全子控件句柄数组
      接收返回的数组.从数组复制 (全子控件句柄数组)
      全子控件句柄数组.重置数组 (0, 假)
    }

    方法 枚举子窗口过程 <静态 类型 = 逻辑型 注释 = "用来被EnumChildWindows回调的窗口过程">
    参数 窗口句柄 <类型 = 整数>
    参数 lParam <类型 = 整数 注释 = "应用程序传递的参数">
    {
      如果 (API.GetParent (窗口句柄) == lParam)
      {
            全子控件句柄数组.加入成员 (窗口句柄)
      }
      返回 (真)
    }

    方法 取被锚控件索引 <公开 静态 类型 = 整数 注释 = "返回控件在全局数组中的索引,找不到则返回-1" 折叠>
    参数 参控件句柄 <类型 = 整数>
    {
      变量 i <类型 = 整数>
      循环 (, 全子控件句柄数组.取成员数 (), i)
      {
            如果 (全被锚控件数组.取成员 (i).窗口句柄 == 参控件句柄)
            {
                返回 (i)
            }
      }
      返回 (-1)
    }

    #
}

类 被锚控件数组类 <公开 基础类 = 对象数组模板类 @模板实现类 = "被锚控件">

类 父窗口数组类 <公开 基础类 = 对象数组模板类 @模板实现类 = "父窗口">

类 被锚控件 <公开 折叠>
{
    变量 父窗口句柄 <公开 类型 = 整数>
    变量 窗口句柄 <公开 类型 = 整数>
    变量 左边距离 <公开 类型 = 整数>
    变量 上边距离 <公开 类型 = 整数>
    变量 右边距离 <公开 类型 = 整数>
    变量 下边距离 <公开 类型 = 整数>
    变量 宽度 <公开 类型 = 整数>
    变量 高度 <公开 类型 = 整数>
    变量 锚住左边 <公开 类型 = 逻辑型>
    变量 锚住顶边 <公开 类型 = 逻辑型>
    变量 锚住右边 <公开 类型 = 逻辑型>
    变量 锚住下边 <公开 类型 = 逻辑型>
}

类 父窗口 <公开 折叠>
{
    变量 窗口句柄 <公开 类型 = 整数>
    变量 旧窗口过程 <公开 类型 = 整数>
    变量 子控件高度 <公开 类型 = 整数>
    变量 子控件宽度 <公开 类型 = 整数>
    变量 间距 <公开 类型 = 整数>
    变量 控制模式_锚点 <公开 类型 = 逻辑型>
    变量 控制模式_水平均分 <公开 类型 = 逻辑型>
    变量 控制模式_垂直均分 <公开 类型 = 逻辑型>
}

类 API <公开 注释 = "API" 折叠>
{
    方法 GetParent <公开 静态 类型 = 整数 折叠 @输出名 = "GetParent" @视窗.输入 = "">
    参数 hWnd <类型 = 整数>

    方法 SetWindowLongA <公开 静态 类型 = 整数 折叠 @输出名 = "SetWindowLongA" @视窗.输入 = "">
    参数 hWnd <类型 = 整数>
    参数 nIndex <类型 = 整数>
    参数 dwNewLong <类型 = 变整数>

    方法 GetWindowLongA <公开 静态 类型 = 整数 折叠 @输出名 = "GetWindowLongA" @视窗.输入 = "">
    参数 hWnd <类型 = 整数>
    参数 nIndex <类型 = 整数>

    方法 CallWindowProcA <公开 静态 类型 = 整数 折叠 @输出名 = "CallWindowProcA" @视窗.输入 = "">
    参数 lpPrevWndFunc <类型 = 整数 注释 = "可能为一个 WNDPROC 子程序指针。">
    参数 hWnd <类型 = 整数>
    参数 Msg <类型 = 整数>
    参数 wParam <类型 = 整数>
    参数 lParam <类型 = 整数>

    方法 取窗口矩形_ <公开 静态 类型 = 整数 @输出名 = "GetWindowRect" @视窗.输入 = "user32">
    参数 窗口句柄 <类型 = 整数>
    参数 矩形区域 <类型 = 矩形类>

    方法 "//GetWindowRect" <公开 静态 类型 = 逻辑型 折叠 @输出名 = "GetWindowRect" @视窗.输入 = "">
    参数 hWnd <类型 = 整数>
    参数 lpRect <类型 = 矩形_ 注释 = "未知类型:LPRECT。">

    方法 MoveWindow <公开 静态 类型 = 逻辑型 折叠 @输出名 = "MoveWindow" @视窗.输入 = "">
    参数 hWnd <类型 = 整数>
    参数 X <类型 = 整数>
    参数 Y <类型 = 整数>
    参数 nWidth <类型 = 整数>
    参数 nHeight <类型 = 整数>
    参数 bRepaint <类型 = 逻辑型>

    方法 GetClientRect <公开 静态 类型 = 逻辑型 @输出名 = "GetClientRect" @视窗.输入 = "user32">
    参数 hWnd <类型 = 整数>
    参数 lpRect <类型 = 矩形类 注释 = "未知类型:LPRECT。">

    方法 EnumChildWindows <公开 静态 类型 = 逻辑型 @输出名 = "EnumChildWindows" @视窗.输入 = "">
    参数 hWndParent <类型 = 整数>
    参数 lpEnumFunc <类型 = 变整数 注释 = "可能为一个 WNDENUMPROC 子程序指针。">
    参数 lParam <类型 = 整数>

    方法 IsWindowVisible <公开 静态 类型 = 逻辑型 折叠 @输出名 = "IsWindowVisible" @视窗.输入 = "">
    参数 hWnd <类型 = 整数>

    #
}

编译时出错
错误: 使用所指定的本地编译器编译当前程序失败
错误:
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1265): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1287): warning C4244: “=”: 从“float”转换到“unsigned int”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1288): warning C4244: “=”: 从“float”转换到“unsigned int”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1289): warning C4244: “=”: 从“float”转换到“unsigned int”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1487): warning C4244: “初始化”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1495): warning C4244: “初始化”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(1537): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(2631): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(2635): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(2639): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvg.h(2643): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvgrast.h(334): warning C4244: “参数”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\svg\nanosvgrast.h(334): warning C4244: “参数”: 从“double”转换到“float”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(291): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(291): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(565): warning C4311: “类型强制转换”: 从“const HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(565): warning C4302: “类型强制转换”: 从“const HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(786): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(786): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(807): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(807): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(814): warning C4244: “return”: 从“BOOL_P”转换到“逻辑型”,可能丢失数据
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(833): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(833): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(925): warning C4311: “类型强制转换”: 从“const HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(925): warning C4302: “类型强制转换”: 从“const HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1016): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1016): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1093): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1093): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1152): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1152): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1173): warning C4311: “类型强制转换”: 从“HMENU”到“UINT”的指针截断
    H:\voldev25\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_menu.cpp(1173): warning C4302: “类型强制转换”: 从“HMENU”到“UINT”截断
    vpkg_全局.cpp
    vpkg_列表类.cpp
    vpkg_功能类.cpp
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 428: 错误:
    error C2733: “GetParent”: 无法重载具有外部 "C" 链接的函数
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(10029): note: 参见“GetParent”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 430: 错误:
    error C2733: “SetWindowLongA”: 无法重载具有外部 "C" 链接的函数
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(9803): note: 参见“SetWindowLongA”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 434: 错误:
    error C2733: “GetWindowLongA”: 无法重载具有外部 "C" 链接的函数
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(9785): note: 参见“GetWindowLongA”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 437: 错误:
    error C2733: “CallWindowProcA”: 无法重载具有外部 "C" 链接的函数
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(4172): note: 参见“CallWindowProcA”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 449: 错误:
    error C2733: “MoveWindow”: 无法重载具有外部 "C" 链接的函数
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(4718): note: 参见“MoveWindow”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 459: 错误:
    error C2733: “EnumChildWindows”: 无法重载具有外部 "C" 链接的函数
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(10042): note: 参见“EnumChildWindows”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 428: 错误:
    error C2664: “HWND GetParent(HWND)”: 无法将参数 1 从“整数”转换为“HWND”
    note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(10029): note: 参见“GetParent”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 430: 错误:
    error C2664: “LONG SetWindowLongA(HWND,int,LONG)”: 无法将参数 1 从“整数”转换为“HWND”
    note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(9803): note: 参见“SetWindowLongA”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 434: 错误:
    error C2664: “LONG GetWindowLongA(HWND,int)”: 无法将参数 1 从“整数”转换为“HWND”
    note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(9785): note: 参见“GetWindowLongA”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 437: 错误:
    error C2664: “LRESULT CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM)”: 无法将参数 1 从“整数”转换为“WNDPROC”
    note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(4172): note: 参见“CallWindowProcA”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 449: 错误:
    error C2664: “逻辑型 MoveWindow(HWND,int,int,int,int,逻辑型)”: 无法将参数 1 从“整数”转换为“HWND”
    note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(4718): note: 参见“MoveWindow”的声明
<H:\火山编程\PC端\机运站\存车表\新大表\003\新大表\功能类.v>, 459: 错误:
    error C2664: “逻辑型 EnumChildWindows(HWND,WNDENUMPROC,LPARAM)”: 无法将参数 1 从“整数”转换为“HWND”
    note: 从整型强制转换为指针类型要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
    H:\voldev25\plugins\vprj_win\sdk\winsdk\10\include\10.0.22000.0\um\winuser.h(10042): note: 参见“EnumChildWindows”的声明
    vpkg_外部组件操作库_.cpp
    vpkg_存车大表_布局.cpp
    正在生成代码...
    正在编译...
    vpkg_数据匹配库_.cpp
    vpkg_日期时间库_.cpp
    vpkg_程序综合库_.cpp
    vpkg_股道图表_布局.cpp
    正在生成代码...
编译生成目标文件"H:\火山编程\PC端\机运站\存车表\新大表\003\_int\新大表\debug\x64\linker\新大表.exe"失败,耗费时间 56437 毫秒.
--- 项目"新大表"编译或链接失败. 编译过程中共遇到了 0 个警告, 14 个错误.

创世魂 发表于 2026-8-31 01:42:46

API封错了,建议用嵌入式代码封。

asd0023 发表于 2026-8-31 11:09:02

嵌入式代码,不会啊
页: [1]
查看完整版本: 设置控件锚点