Shisheng Chen

Results 54 comments of Shisheng Chen

确实有一个BUG:如果编译器是msys2(MSYS2)里的mingw,即使程序的入口是WinMain(或wWinMain),编译出来的GUI程序在双击运行时依然会显示一个控制台(console)窗口;只有添加链接器选项` -Wl,-subsystem,windows`显式指定windows子系统后才不会显示控制台窗口。 PS:AWTK到这个阶段了还有这种BUG,说明用AWTK的人真的不多……

> mingw 是不能用 WinMain(或wWinMain) 作为程序入口的,只能使用 main 函数作为入口的,而原来的 main 部分的逻辑,是没有处理控制台窗口的,最新的代码会统一了 windows 下的控制台窗口的处理逻辑,可以通过 _CONSOLE 和 NDEBUG 以及程序第 3 个传参来开关控制台窗口。 你的mingw跟我的不一样么?我用的是MSYS2里的mingw-w64-x86_64。在windows下如果入口为`main`必定会有控制台窗口。我修改了awtk_main.inc源码来使用`WinMain`作为入口、不执行`TK_ENABLE_CONSOLE()`函数,并且必须加`-Wl,-subsystem,windows`链接选项才不会有控制台窗口。

> 好的,谢谢。用mingw编译的人比较少。 我最初也是尝试用MSVC编译的,但编译失败,似乎MSVC这东西不同版本间有差异,所以才换成mingw

哦,重新测试了下,发现我之前的说法有误。修改awtk_main.inc源码,所有测试用例都不执行`TK_ENABLE_CONSOLE()`函数,mingw为MSYS2里的mingw-w64-x86_64: - 入口函数`WinMain`、无`-Wl,-subsystem,windows`链接器选项:有控制台窗口 - 入口函数`WinMain`、有`-Wl,-subsystem,windows`链接器选项:无控制台窗口 - 入口函数`main`、无`-Wl,-subsystem,windows`链接器选项:有控制台窗口 - 入口函数`main`、有`-Wl,-subsystem,windows`链接器选项:无控制台窗口 看来有无控制台与入口函数无关而与`-Wl,-subsystem,windows`链接器选项有关。

> 我昨天测试了在 MSYS2 里的 mingw-w64-x86_64 或者直接使用 mingw64 编译入口函数为 WinMain,会在链接的时候都会出错,找不到 WinMain 函数。 我的理解在 mingw 上面就不应该有 WinMain 函数,因为 WinMain 函数是属于 windows 的东西来的。 正常来说用 vs 来编译应该可以正常编译才对的,不应该出现问题的把。 找不到`WinMain`是因为awtk_main.inc里没有这个函数而有unicode版的`wWinMain`,改下原型即可。 ```C int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE...

> 不是。mingw想链接WinMain,但你源码里没有这个函数,`awtk/src/awtk_main.inc`文件里有wWinMain。可以将wWinMain原型改为WinMain对应的原型。

AWTK在PC平台是用SDL库实现的,所以那个是SDL的标题栏,不如直接改SDL的标题栏。

做UI全靠贴图还是有点麻烦,不过话说一些面向低性能平台的GUI(如,emWin)都有支持gradient的API,AWTK的目标既然是支持多种平台,支持gradient功能应该是合理的。

李老师加油,希望能有gradient功能

> 编译时找不到库和运行时找不到库时两回事。 > > 运行时找不到,先看bin目录里是否有需要的库(而且是交叉编译的,别把PC版本的拷贝过去里),再看看LD_LIBRARY_PATH是否正确。 我也发现在嵌入式平台上mvvm很难部署,究其原因:awtk的awtk_config.py配置文件只支持x86平台,“awtk/tools”目录也没有考虑交叉编译的情况。而最根本的原因应该是官方目前对于mvvm都只是在x86平台上做测试。