当前位置:  开发笔记 > 编程语言 > 正文

在C中构建Windows UI是否有一种无痛的方法?

如何解决《在C中构建WindowsUI是否有一种无痛的方法?》经验,为你挑选了3个好方法。

作为C Windows编程的前任讲师,我可以肯定地说,使用C构建GUI没有简单的方法 - 语言不适合这项任务.几乎任何其他东西都是更好的选择 - 我自己最喜欢的GUI开发是Delphi.



1> 小智..:

作为C Windows编程的前任讲师,我可以肯定地说,使用C构建GUI没有简单的方法 - 语言不适合这项任务.几乎任何其他东西都是更好的选择 - 我自己最喜欢的GUI开发是Delphi.



2> Jason Owen..:

Win32 + C是一种非常低级的方法,它有其优点和缺点.也就是说,有办法让事情变得更容易.

首先,关于位移,有几个宏可用于WPARAM和LPARAM.事实上,您可能不应该编写位移,因为WPARAM和LPARAM的大小多年来已经发生了变化,您可能正在创建未来的错误.

其次,关于WindowProc函数中的巨型switch语句,虽然它会存在,但有一种方法可以使它更易于管理. #include 获得一大堆有用的宏,最值得一提的是HANDLE_MSG.而不是需要写

LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)    {
    switch(Message) {
    case WM_COMMAND:
        ...
    }
}

你可以写:

void MyOnCommand(HWND hwnd, int controlID, HWND hwndCtl, UINT codeNotify);
LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)    {
    switch(Message) {
    HANDLE_MSG(hwnd, WM_COMMAND, MyOnCommand);
    }
}

并且宏自动将该消息类型的所有不同参数转换并分离为适当命名的&typed变量.浏览windowsx.h以查看处理的消息以及所需的函数原型.并非所有不同的消息都被处理,但不少消息.

至于同时拥有多个窗口,不应该阻止你多次调用CreateWindow或其亲属.虽然你只有一个HINSTANCE(给你的WinMain),你可以拥有任意数量的HWNDs.

您可能会发现Raymond Chen的临时程序非常有用,因为它应该为您提供一个合适的骨架.您还可以考虑使应用程序使用对话框而不仅仅是窗口; 你可以免费获得一堆东西,你可以使用资源编辑器来设计窗口及其所有控件. Visual C++ Standard及以上版本包括一个资源编辑器,还有几个免费版本: XN Resource Editor似乎是一个流行的开源编辑器,我相信你可以在Google上找到更多.所有这些生产资源的脚本,你应该在你的工具链的资源编译器:RC.EXE为Visual Studio(包括速成版,或可作为SDK的一部分),或windres在Cygwin的GNU的BINUTILS的一部分或者mingw.



3> RBerteig..:

我将抛弃我传统的开箱即用建议:将Lua添加到您的应用程序中,并使用Lua和合适的工具包模块组合构建GUI.一个很好的选择是IUP,另一个是wxWidgets.两者都有不错的Lua绑定.更好的是,Lua本身连同wxLua和IUP都可以在一个安装中与Lua for Windows项目中的一堆其他有用的Lua模块一起使用.

Lua很容易与C代码集成,因为它从一开始就是为此目的而设计的.

使用Lua作为将应用程序保持在一起的粘合剂也很容易,其核心功能在C中实现或作为本机API调用的接口实现.

如果您有一个广泛的库来适应,SWA也支持Lua .

当然,您可以直接使用来自C的wxWidgets或IUP,因为它们都具有C可调用API,但事件驱动的GUI通常充满了极易处理的小型管家回调函数,这些函数易于用脚本语言处理.

另一个需要考虑的工具包是Tk,它最常见于Tcl脚本语言.Tcl的开发也考虑了嵌入更大的应用程序,尽管它已经从它作为主要用例发展而来.Tk已经被各种其他语言所包括,包括Perl.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有