- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 Windows API 使用“类”,依赖于 WNDCLASS/WNDCLASSEX结构。
通过windows API Hello World应用程序,了解到这个类被我们自己的windows使用,也被Windows核心控件使用,如“EDIT”、“BUTTON”等。我也明白它在某种程度上与 WndProc 相关(它允许我为它定义一个函数)
虽然我可以找到关于这个类的文档,但我找不到任何解释概念的内容。
到目前为止,我唯一发现的是:
A Window Class has NOTHING to do with C++ classes.
哪个真的没有帮助(它告诉我它不是但没有告诉我它是什么)。事实上,这只会让我更加困惑,因为我很想将 WNDCLASSEX 与 C++ 类相关联,并认为“WNDCLASSEX”代表一个控件类型.所以,我的第一个问题是它是什么?
其次,我知道可以在类中定义 WndProc。但是,窗口也可以从子控件(或窗口,或在 Windows API 中调用的任何内容)获取消息。 怎么会这样?
最后,什么时候定义新类是一个好的编程习惯?每个应用程序(对于主框架)、每个框架、每个我定义的控件(例如,如果我创建自己的进度条类)?
我知道 Java/Swing、C#/Windows.Form、C/GTK+ 和 C++/wxWidgets,所以我可能会理解与这些工具包的比较。
最佳答案
窗口类描述将用于该类的所有实例的属性。除了颜色、图标等,这些属性之一就是窗口过程。这是回调函数,负责处理来自系统的所有消息并根据需要进行处理。
虽然不相关,但该概念类似于 C++ 类 - 一段代码定义了一个类的数据和功能,并且该类可能有许多实例。
作为一个非常粗略的示例,“BUTTON”类 WndProc 将 WM_LBUTTONDOWN/WM_LBUTTONUP
序列转换为“点击”。在此序列期间,WndProc 还将以“按下”状态绘制按钮,作为对 WM_PAINT
消息的响应。
如果窗口需要向父窗口传达一个 Action (例如点击),它会发送消息作为“通知”或“命令”。这些消息由子控件手动创建,并包含标识符和任何相关数据。
所有这一切的好处只是通过创建按钮类的窗口(使用 CreateWindow)我自动获得所有这些行为。
除了 Windows 提供的窗口外,我还可以创建自己的窗口,这些窗口可以在我的应用程序中重新使用。您必须至少为您的主窗口注册一个类(否则它将没有任何功能,因此不会很有趣),但除此之外由您决定。
很有可能只包含常规控件(按钮、 ListView 、进度条)的应用程序,但有时您可能希望创建自定义类。这可能是为了封装特定行为,或者是因为您希望通过您的程序使用该控件的许多实例。
例如,如果我的应用程序的 UI 需要长颈鹿的图像,当鼠标悬停在它们上方时会旋转,我可以在 WindowProcedure 中编写代码来执行此操作并将其注册为新类(“SPINNYGIRAFFE”)。我的应用程序的其余部分只是创建“SPINNYGIRAFFE”类的窗口,一切正常。
关于WNDCLASSEX的概念,良好的编程习惯和系统类的WndProc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635847/
我编写的代码主要供个人使用,但我正在考虑发布我最初开发供个人使用的应用程序(科学模拟/可视化)。 我的一个习惯是在类中使用一个main方法来单独测试类的运行情况。我认为这在某种程度上可能是不好的(毫无
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I convince programmers in my team to do TDD? 在从
假设我想测试是否有一个名为“Z”的驱动器。第一步是这样的; Get-PSProvider | Select-Object -Property Drives 这个给我; Drives: ... {C,
这是对 an old answer to a question about the necessity of functools.partial 的一种跟进: 虽然这个答案非常清楚地解释了这种现象及其
Perl 习惯很难改掉。两种语言之间的变量声明、作用域、全局/局部是不同的。是否有一组推荐的 python 语言习语可以使从 perl 编码到 python 编码的过渡不那么痛苦。 细微的变量拼写错误
我是一名优秀的程序员,十分优秀!