c - 在 C 中构建 Windows UI 是否有一种轻松的方法?

标签 c user-interface winapi

编辑

好吧,我猜C本质上是痛苦的——只是,这部分,特别痛苦。
此外,没有什么真正的理由让我只用 C 编写,除了,这是我现在想用它编写并精通的语言。我知道从 C 迁移到 C++ 不好,但无论如何。

对于我在程序中创建多个窗口的问题,有谁知道解决方案吗?


好吧,我将 C DLL 与 VB6 前端连接起来,但是——尝试来回传递字符串变得很丑陋,而且似乎每次我添加一个新函数时, 其他一切都会崩溃。所以,我想,为什么我要让自己经历所有这些痛苦,只是为了与一种甚至不再受支持的语言进行交互?为什么不更好地利用这种痛苦并学习用 C 语言构建前端?

好吧,我开始了,但我不得不问:有没有简单的方法来做到这一点?巨大的 switch 语句 WndProc 伤害了我的眼睛,并且违背了我学到的关于干净代码的一切(很像 12 参数 CreateWindowEx() 或 14 参数 CreateFont())。

我意识到我可以重构所有这些——在一定程度上——如果我使用 C++,我可以将窗口和它们的组件放入类中,并以我想的更自然的方式访问它们……

无论如何,我设法构建了一个名为“主窗口!”的大窗体,带有“弹出消息!”按钮,它工作正常——而且一点也不复杂。然后是“更改该文本!”更改编辑控件中文本的按钮。为此,WndProc 在收到 WM_COMMAND 时必须了解编辑控件。来自按钮的消息。我无法将编辑控件的 hWnd 传递给它,因为我不是调用它的人而且您不能只向 WndProc 添加参数。所以我不得不将编辑控件放入全局范围。

我想将按钮的字体更改为 13pt Tahoma -- 很简单,对吧?当然 - 但我不能比 WM_PARENTNOTIFY 更远了。 message... 仔细阅读了MSDN,发现有些信息在wParam的高位字,有些在低位字。所以,我不得不这样写:if(wParam==(WM_CREATE | (POPUP_COMMAND<<16))){

将控件设为全局?巨大的开关语句? 12和14参数函数调用?简单通知的位移位?我仍然不知道如何让更多的窗口(窗口窗口,而不是控制窗口)出现——这很痛苦……

请告诉我有更好的方法!

顺便说一句,如何制作多个窗口?如果我只注册两个类,或者在同一个类上注册两次 CreateWindowEx(对于两个句柄),则只会出现第一个。我尝试稍微调整一下 dwStyle 参数,但无济于事。有人吗?

最佳答案

作为 C Windows 编程的前任讲师,我可以肯定地说,使用 C 构建 GUI 并不容易——该语言不太适合这项任务。几乎任何其他东西都会是更好的选择——我自己最喜欢的 GUI 开发是 Delphi。

关于c - 在 C 中构建 Windows UI 是否有一种轻松的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929280/

相关文章:

Java&JFreeChart - 如何设置 JFreeChart 的 ChartPanel 随其容器(例如 JPanel )调整大小?

winapi - 从 Rundll32 调用的 SetCursorPos 函数?

c++ - 如何对现有颜色进行位图透明度处理?

c - 使用 stringify 运算符 '#' MISRA Rule 20.10 (MISRA C :2012) . 实现 stringify 宏的替代方法是什么

c - 如何将C中的框居中?

c - 初始化结构中的内联数组 - 如何确保我不会搞砸它?

c - 如何为简单的 C 项目正确设置 TravisCI

listview - Flutter UI:扩展小部件中的两个ListView.builders

postgresql - 在 Google Cloud SQL 中查看数据的 GUI

c++ - 无依赖编程