【发布时间】:2010-10-30 01:55:36
【问题描述】:
编辑
好吧,我猜C本质上是痛苦的--只是,这部分,特别痛苦。
此外,我只使用 C 编写并没有真正的原因,除了,这是我现在想要编写并精通的语言。我知道从 C 迁移到 C++ 很糟糕,但无论如何。
对于我在程序中创建多个窗口的问题,有人知道解决方案吗?
嗯,我 将一个 C DLL 与一个 VB6 前端接口,但是 -- 尝试来回传递字符串变得很难看,而且似乎每次我添加一个新函数时, 其他一切都会坏掉。所以,我想,我为什么要让自己经历所有这些痛苦,只是为了与一种甚至不再受支持的语言交互?为什么不更好地利用这些痛苦并学习用 C 构建前端?
好吧,我开始了,但我不得不问:有没有简单的方法可以做到这一点? WndProc 的巨大 switch 语句伤害了我的眼睛,与我学到的关于干净代码的一切背道而驰(很像 12 参数 CreateWindowEx() 或 14 参数 CreateFont())。
我意识到我可以在一定程度上重构这一切——如果我使用 C++,我可以将窗口及其组件放入类中,并以一种更自然的方式访问它们……
无论如何,我设法构建了一个名为“主窗口!”的大表单,带有“弹出消息!”按钮,效果很好——而且一点也不复杂。然后是“更改该文本!”更改编辑控件中的文本的按钮。为此,WndProc 必须在从按钮接收WM_COMMAND 消息时了解编辑控件。我不能将编辑控件的 hWnd 传递给它,因为我不是调用它的人,而且您不能只向 WndProc 添加参数。所以我必须将编辑控件放入全球范围。
我想将按钮的字体更改为 13pt Tahoma —— 很简单,对吧?当然——但我无法比WM_PARENTNOTIFY 消息更进一步……在仔细阅读MSDN 之后,我发现有些信息在wParam 的高位字中,而有些在低位字中。所以,我不得不写这个:if(wParam==(WM_CREATE | (POPUP_COMMAND<<16))){
使控件全局化?巨大的switch语句? 12和14参数函数调用?简单通知的位移?我什至不知道如何让更多的一个窗口(窗口窗口,而不是控制窗口)出现——这很痛苦......
请告诉我有更好的方法!
顺便说一句,我如何制作多个窗口?如果我只注册两个类,或者在同一个类上两次 CreateWindowEx(对于两个句柄),则只会出现第一个。我尝试了一点 dwStyle 参数,但无济于事。有人吗?
【问题讨论】:
-
无痛? C?你是在开玩笑吧? ;)
-
我猜你用 C 写这个是有原因的,虽然你没有提到它是什么
-
还有其他方法,例如使用DIALOGEX resource。 .rc 文件提供了一种简洁的方式来编写与 C 一起使用的 GUI 脚本。虽然编写 C 可能会让人觉得冗长而痛苦,但它有一个显着的优势:C 代码实际上是可读的。几乎没有不可见的代码,与 C++ 完全相反。这也使得 C 代码更容易调试。您必须做出决定:您是否想要一种编写速度快的语言,选择 C++。如果您想要一种易于阅读的语言,请坚持使用 C。
标签: c user-interface winapi