guangye1 发表于 6 天前

选择夹如何将DLL的窗口加载进子夹呢?

我在DLL里面写主要功能,用主程序加载,可以类似多功能插件的效果,但是我现在加载不了选择夹的子夹里面,劳烦大师帮忙看看

主窗口的代码
<火山程序 类型 = "通常" 版本 = 1 />

包 火山.程序

类 启动类 <公开 基础类 = 窗口程序类>
{
    变量 主窗口对象 <类型 = 我的主窗口>

    方法 启动方法 <公开 类型 = 整数>
    {
      主窗口对象.创建主窗口 ()
      返回 (1)
    }
}

# ===

类 dll加载 <公开 @全局类 = 真>
{
    方法 载入窗口 <公开 静态 类型 = 变整数 返回值注释 = "返回创建成功的窗口句柄,失败返回0" @输出名 = "zrck" @视窗.输入 = "mfc_DLL.dll">
    参数 "//父窗口句柄" <类型 = 变整数>
    {

    }

    方法 窗口置父 <公开 静态 类型 = 变整数 @视窗.输入 = "user32" @输出名 = "SetParent">
    参数 hWndChild <类型 = 变整数 注释 = " 子窗口句柄,">
    参数 hWndNewParent <类型 = 变整数 注释 = " 父窗口句柄,">

    #
}

类 我的主窗口 <基础类 = 窗口 注释 = "样例主窗口" @视窗.布局 = "client_size = \"593, 578\"" 标题 = "我的主窗口" @视窗.附属文件 = "mfc_DLL.dll">
{
    变量 标签1 <类型 = 标签 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 101\r\npos = \"21, 14, 384, 32\"" 标题 = "标签1">
    变量 选择夹1 <类型 = 选择夹 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 102\r\npos = \"13, 54, 560, 512\"" 标题 = "选择夹1">
    变量 父窗口 <类型 = 窗口容器组件>
    变量 按钮1 <类型 = 按钮 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 104\r\npos = \"445, 14, 120, 32\"" 标题 = "载入DLL窗口">

    方法 按钮_被单击 <接收事件 类型 = 整数 注释 = "当按钮被单击后发送此事件">
    参数 来源对象 <类型 = 按钮 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
      如果 (来源对象 == 按钮1)
      {
            选择夹1.添加子夹 ("DLL窗口", 0, 空子夹, )
            选择夹1.取子夹内容组件 (0, 父窗口)
            变量 子窗口句柄 <类型 = 变整数>
            子窗口句柄 = 载入窗口 ()
            标签1.标题="DLL窗口句柄:"+到文本(子窗口句柄)
            // 窗口置父 (子窗口句柄, 父窗口.取窗口句柄 ())

      }
      返回 (0)
    }
}

类 空子夹 <基础类 = 组件布局器 隐藏值属性 = "0" @视窗.布局 = "client_size = \"353, 290\"">
{

    #
}



DLL的代码

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

包 火山.程序

类 启动类 <公开 基础类 = 动态库程序类>
{
    变量 主窗口 <类型 = DLL窗口>

    方法 启动方法 <公开 类型 = 整数 折叠>
    {
      返回 (1)
    }

    方法 _调试入口方法 <公开 注释 = "当使用火山DLL默认调试启动程序直接调试DLL时,本方法将在DLL加载后被自动调用." 注释 = "请将调试相关的代码置入本方法中,在编译DLL的发布版本时,本方法中的内容不会被加入." 折叠 折叠2>
    {

    }

    方法 载入窗口 <公开 静态 类型 = 变整数 注释 = "一个输出方法模板" @输出名 = "zrck" @视窗.输出 = 真>
    参数 "//父窗口句柄" <类型 = 变整数>
    {
      // 取程序 ().主窗口.创建子窗口 (读指针处对象 (父窗口句柄, 窗口), , , , , )
      如果 (取程序 ().主窗口.创建窗口 (, , , , ) == 真)
      {
            返回 (取程序 ().主窗口.取窗口句柄 ())
      }
      否则
      {
            返回 (0)
      }
      返回 (0)

    }
}

类 DLL窗口 <基础类 = 窗口 折叠 隐藏值属性 = "0" @视窗.布局 = "client_size = \"495, 308\"" 窗口边框 = 无边框>
{
    变量 分组框1 <类型 = 分组框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 101\r\npos = \"16, 128, 456, 160\"" 标题 = "分组框1">
    变量 颜色选择器1 <类型 = 颜色选择器 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 102\r\nparent_id = 101\r\npos = \"32, 112, 216, 24\"" 标题 = "颜色选择器1">
    变量 日期框1 <类型 = 日期框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 103\r\nparent_id = 101\r\npos = \"232, 64, 208, 24\"" 标题 = "日期框1">
    变量 进度条1 <类型 = 进度条 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 104\r\nparent_id = 101\r\npos = \"224, 24, 216, 24\"" 标题 = "进度条1" 位置 = 50>
    变量 按钮2 <类型 = 按钮 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 105\r\nparent_id = 101\r\npos = \"360, 104, 80, 32\"" 标题 = "按钮2">
    变量 选择框2 <类型 = 选择框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 106\r\nparent_id = 101\r\npos = \"144, 64, 80, 24\"" 标题 = "选择框2">
    变量 选择框1 <类型 = 选择框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 107\r\nparent_id = 101\r\npos = \"32, 64, 80, 24\"" 标题 = "选择框1">
    变量 单选框2 <类型 = 单选框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 108\r\nparent_id = 101\r\npos = \"136, 24, 80, 24\"" 标题 = "单选框2">
    变量 单选框1 <类型 = 单选框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 109\r\nparent_id = 101\r\npos = \"24, 24, 80, 24\"" 标题 = "单选框1">
    变量 按钮1 <类型 = 按钮 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 110\r\npos = \"384, 76, 80, 32\"" 标题 = "按钮1">
    变量 编辑框1 <类型 = 编辑框 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 111\r\npos = \"16, 80, 360, 24\"" 标题 = "编辑框1">
    变量 标签1 <类型 = 标签 折叠2 隐藏值属性 = "0" @视窗.布局 = "id = 112\r\npos = \"16, 24, 456, 40\"" 标题 = "这是DLL的窗口,我要动态加载到选择夹"
            字体 = ", 14, 1, 0, 0, 0, 0" 横向对齐方式 = 居中>

    #

    方法 按钮_被单击 <接收事件 类型 = 整数 注释 = "当按钮被单击后发送此事件">
    参数 来源对象 <类型 = 按钮 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
      如果 (来源对象 == 按钮1)
      {


            编辑框1.内容 = "我是插件的DLL里面的窗口哦"
            信息框 ("dll插件加载完成")

      }
      否则 (来源对象 == 按钮2)
      {
            选择框1.选中 = 取反 (选择框1.选中)
            选择框2.选中 = 取反 (选择框2.选中)

      }
      返回 (0)
    }
}


麻烦了


dengzf 发表于 6 天前

需要用 嵌入窗口 将dll的窗口嵌入到选择夹中去,,,因为dll实际是外部窗口....可以试试

guangye1 发表于 6 天前

dengzf 发表于 2026-8-16 18:39
需要用 嵌入窗口 将dll的窗口嵌入到选择夹中去,,,因为dll实际是外部窗口....可以试试 ...

// 窗口置父 (子窗口句柄, 父窗口.取窗口句柄 ())

我有这段代码都屏蔽了又,还是不行

dengzf 发表于 6 天前

guangye1 发表于 2026-8-16 18:51
// 窗口置父 (子窗口句柄, 父窗口.取窗口句柄 ())

我有这段代码都屏蔽了又,还是不行 ...

<volprg type = "normal" version = 1 />

method 按钮_被单击 <receiver type = 整数 explain = "当按钮被单击后发送此事件">
param 来源对象 <type = 按钮 explain = "提供事件产生的具体来源对象">
param 标记值 <type = 整数 explain = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
{
    如果 (来源对象 == 按钮1)
    {
      如果 (子窗口句柄 <= 0)
      {
            选择夹1.添加子夹 ("DLL窗口", 0, 空子夹, )
            选择夹1.取子夹内容组件 (0, 父窗口)
            子窗口句柄 = 载入窗口 ()
            标签1.标题 = "DLL窗口句柄:" + 到文本 (子窗口句柄)
            嵌入窗口4_ (父窗口.取窗口句柄 (), 子窗口句柄)

      }

    }
    返回 (0)
}

小白er 发表于 4 天前

学习学习
页: [1]
查看完整版本: 选择夹如何将DLL的窗口加载进子夹呢?