开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 372|回复: 10
收起左侧

[精币悬赏] 黑月界面类 窗口 的问题

[复制链接]
结帖率:22% (2/9)
发表于 2025-1-4 19:23:19 | 显示全部楼层 |阅读模式   河北省石家庄市
50精币
我的本意是想写一个 Dll 用于外部调用,该 Dll 负责用户界面部分。然后我写了这些代码,运行时窗口弹出了一下立马就关闭了。请教一下大佬。谢谢!
代码:
  
窗口程序集名保 留  保 留备 注
MainWnd   
子程序名返回值类型公开备 注
CreateMainWindow整数型 返回窗口句柄
变量名类 型静态数组备 注
mainw窗口类 
size黑月坐标 
pos黑月坐标 
verMajor整数型 
style整数型 
wstrTitle字节集 
wstrWndClass字节集 
mainw.事件_创建完毕 (&mainw_eventOnCreate)
mainw.事件_可否被关闭 (&mainw_eventOnClose)
GetSystemVersion (verMajor, , , , , , )
如果真 (verMajor > 5)
SetProcessDPIAware ()
pos = NewWndPos (0, 0)
如果 (是否为调试版 ())
如果 (verMajor > 5)
size = NewWndSize (GetSystemMetrics (33) × 2 + 1024, GetSystemMetrics (32) × 2 + GetSystemMetrics (4) + 768)
size = NewWndSize (GetSystemMetrics (33) × 2 + 1024, GetSystemMetrics (32) × 2 + GetSystemMetrics (4) + 768)
style = 位或 ( #窗口风格_组样式, 位或 ( #窗口风格_标题栏, #窗口风格_系统菜单, #窗口风格_对话框边框, #窗口风格_最大化按钮, #窗口风格_单边框, #窗口风格_可视, #窗口风格_可调边框 ))
如果 (verMajor > 5)
size = NewWndSize (取屏幕宽度 () × DPI, 取屏幕高度 () × DPI)
size = NewWndSize (取屏幕宽度 (), 取屏幕高度 ())
style = 位或 ( #窗口风格_组样式, #窗口风格_无边框 )
wstrTitle = RCGetStringW (189, )
wstrWndClass = L (“WindowsSetup_GUI”)
mainw.创建W (, wstrTitle, pos, size, style, , 假, wstrWndClass)
mainw.位置 ( #窗口位置_居中 )
mainw.背景图显示方式 ( #图片显示方式_缩放 )
mainw.Esc关闭 ()
返回 (mainw.取窗口句柄 ())
子程序名返回值类型公开备 注
mainw_eventOnCreate  
参数名类 型参考可空数组备 注
hWnd整数型
变量名类 型静态数组备 注
mainw窗口类 
mainw.置窗口句柄 (hWnd)
mainw.背景图 (RCGetImgObj (W32UiRCGetFitBackImgResID (3, mainw.取用户区宽度 (), mainw.取用户区高度 ())))
mainw.置图标 (RCGetIconObj (129), )
子程序名返回值类型公开备 注
mainw_eventOnClose整数型 返回 0 表示可关闭,1 表示不可关闭
返回 (0)
窗口程序集名保 留  保 留备 注
WinMain   
子程序名返回值类型公开备 注
_启动子程序整数型 请在本子程序中放置动态链接库初始化代码
DPI = 系统_取系统DPI () ÷ 100
判断 (是否为调试版 ())

返回 (NewDllMain (&DllMain))
判断 (是否为调试版 ())
winmain.初始化 (, , )
winmain.初始化 (hInstance, , )
Api静态加速优化 ()_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。
子程序名返回值类型公开备 注
DllMain逻辑型 
参数名类 型参考可空数组备 注
hModule整数型
ul_reason_for_call整数型
lpReserved整数型
判断 (ul_reason_for_call = 0)  ' 卸载模块
如果真 (是否为调试版 ())
信息框 (“释放模块”, 0, , )

判断 (ul_reason_for_call = 1)  ' 装载模块
如果真 (是否为调试版 ())
信息框 (“模块句柄:”到文本 (hModule), 0, , )
hInstance = hModule
判断 (ul_reason_for_call = 2)  ' 创建线程
如果真 (是否为调试版 ())
信息框 (“创建线程”, 0, , )

判断 (ul_reason_for_call = 3)  ' 线程销毁
如果真 (是否为调试版 ())
信息框 (“线程销毁”, 0, , )



返回 ()
子程序名返回值类型公开备 注
_临时子程序  
变量名类 型静态数组备 注
mainw窗口类 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
mainw.置窗口句柄 (CreateMainWindow ())
winmain.运行 (mainw, )

用的是黑月界面类 3.9.0 目前最新版本。
谢谢!



补充内容 (2025-1-4 19:27):
一些代码没有用,主要是窗口出了什么问题,而不是图标、背景图的设置问题

结帖率:57% (4/7)

签到天数: 1 天

发表于 2025-1-4 19:41:20 | 显示全部楼层   重庆市重庆市
既然dll管理窗口 那么消息循环呢 如果外部exe有消息循环 你内部也必须是主线程呢  建议你外部搞一个窗口载入你dll中窗口 外部主窗口载入进来 即可挂在主线程上 或者就是内部消息循环
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 1 天

发表于 2025-1-4 19:45:12 | 显示全部楼层   河南省洛阳市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
APP应用程序类  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
APP.初始化 (, , )


需要初始化应用才可以调用黑月

补充内容 (2025-1-4 19:47):
需要让初始化代码最先执行。只有初始化完成后才能调用黑月
回复

使用道具 举报

结帖率:100% (14/14)

签到天数: 1 天

发表于 2025-1-4 20:25:20 | 显示全部楼层   浙江省温州市
窗口消息循环没有,窗口直接退出了,你在窗口创建后加个Sleep延迟,看看窗口会不会延迟关闭
回复

使用道具 举报

结帖率:22% (2/9)

签到天数: 1 天

 楼主| 发表于 2025-1-4 21:40:54 | 显示全部楼层   河北省石家庄市
deleisoft 发表于 2025-1-4 20:25
窗口消息循环没有,窗口直接退出了,你在窗口创建后加个Sleep延迟,看看窗口会不会延迟关闭 ...

确实,还真是,我修改了以下代码确实窗口能显示几秒钟:

  
子程序名返回值类型公开备 注
_临时子程序  
变量名类 型静态数组备 注
mainw窗口类 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
mainw.置窗口句柄 (CreateMainWindow ())
winmain.运行 (mainw, )
延迟 (10000)‘延时测试


i支持库列表   支持库注释   
spec特殊功能支持库

但是这样的话我设置的mainw_eventOnCreate虽然能执行,代码中设置图标的代码也正常执行,但是设置背景图片的代码执行后没有显示背景图片。即使重画了也没有用。
屏幕截图 2025-01-04 213700.png
但是“winmain.运行 (mainw, 真)”加入到“CreateMainWindow”中反而显示背景图片了。
屏幕截图 2025-01-04 213828.png
可惜这样写没法达到我想要的效果,可能我学 Java 编程有点习惯这样设计了。
请问大佬这是怎么回事?谢谢!
回复

使用道具 举报

结帖率:22% (2/9)

签到天数: 1 天

 楼主| 发表于 2025-1-4 22:08:07 | 显示全部楼层   河北省石家庄市
Nick5469 发表于 2025-1-4 19:45
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
[/quote]
其实已经执行了,在 _启动子程序,因为是调试时启动,所以那段看起来有问题的代码其实照常执行了。
感谢您的提醒,我已经修改成了这样,已经确保能正常初始化了:[e=0].版本 2
窗口程序集名保 留  保 留备 注
WinMain   
子程序名返回值类型公开备 注
_启动子程序整数型 请在本子程序中放置动态链接库初始化代码
变量名类 型静态数组备 注
ret整数型 
ret = 0
DPI = 系统_取系统DPI () ÷ 100
如果真 (是否为调试版 ())
ret = NewDllMain (&DllMain)
Api静态加速优化 ()
InitDllInstance ()
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (ret)  ' 返回值被忽略。
子程序名返回值类型公开备 注
DllMain逻辑型 
参数名类 型参考可空数组备 注
hModule整数型
ul_reason_for_call整数型
lpReserved整数型
判断 (ul_reason_for_call = 0)  ' 卸载模块
如果真 (是否为调试版 ())
信息框 (“释放模块”, 0, , )

判断 (ul_reason_for_call = 1)  ' 装载模块
如果真 (是否为调试版 ())
信息框 (“模块句柄:”到文本 (hModule), 0, , )
hInstance = hModule
判断 (ul_reason_for_call = 2)  ' 创建线程
如果真 (是否为调试版 ())
信息框 (“创建线程”, 0, , )

判断 (ul_reason_for_call = 3)  ' 线程销毁
如果真 (是否为调试版 ())
信息框 (“线程销毁”, 0, , )



返回 ()
子程序名返回值类型公开备 注
_临时子程序  
变量名类 型静态数组备 注
mainw窗口类 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
mainw.置窗口句柄 (CreateMainWindow ())
winmain.运行 (mainw, )
子程序名返回值类型公开备 注
InitDllInstance  
判断 (是否为调试版 ())
winmain.初始化 (, , )
winmain.初始化 (hInstance, , )

回复

使用道具 举报

结帖率:22% (2/9)

签到天数: 1 天

 楼主| 发表于 2025-1-4 22:22:55 | 显示全部楼层   河北省石家庄市
Esma001 发表于 2025-1-4 19:41
既然dll管理窗口 那么消息循环呢 如果外部exe有消息循环 你内部也必须是主线程呢  建议你外部搞一个窗口载 ...

请教一下该怎么写呢?谢谢!
回复

使用道具 举报

结帖率:100% (14/14)

签到天数: 1 天

发表于 2025-1-4 23:01:32 | 显示全部楼层   浙江省温州市
yyyxb 发表于 2025-1-4 21:40
确实,还真是,我修改了以下代码确实窗口能显示几秒钟:

[e=0].版本 2

我的意思是加个延迟试试,如果窗口没关闭,说明就是你创建的窗口没有监听窗口消息,所以窗口直接退出了,你要做的就是怎么解决这个窗口没消息循环,黑月没用过不太熟悉帮不了你哦
回复

使用道具 举报

发表于 2025-1-5 00:53:06 | 显示全部楼层   江苏省无锡市
加个消息循坏
回复

使用道具 举报

结帖率:22% (2/9)

签到天数: 1 天

 楼主| 发表于 2025-1-5 12:17:16 | 显示全部楼层   河北省石家庄市
deleisoft 发表于 2025-1-4 23:01
我的意思是加个延迟试试,如果窗口没关闭,说明就是你创建的窗口没有监听窗口消息,所以窗口直接退出了, ...

谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表