我正在开始GUI编程,我对windows有疑问。我已经阅读了一些教程,他们通过创建一个新的WNDCLASS创建一个窗口,调用RegisterClass,然后使用新类的名称执行CreateWindow。我也看到要创建Button或其他东西,你在CreateWindow时使用类名Button。所以这导致我得出这样的结论:创建一个窗口(带边框和最小化/最大化按钮等的类型),你创建一个新的WNDCLASS。否则,您不需要创建WNDCLASS,而是使用其中一个预定义的类名,例如BUTTON。这是对的吗?
答案 0 :(得分:6)
正确。您需要为Windows定义自己的WNDCLASS
的主要原因是分配自己的窗口过程来处理发送到窗口的消息。标准控件(如按钮和编辑控件)已经具有由其标准窗口过程定义的明确定义的行为,因此您只需使用预定义的类名称。
答案 1 :(得分:3)
如果您使用的是旧式Win API编程,我不能完全推荐Programming Windows by Charles Petzold。最新版本绝版,IMO疯了。这篇 是关于这一主题的经典着作。因为它已绝版,所以使用版本的成本更高。如果你想更便宜,可以获得previous edition,你可以得到0.01美元。基础知识都是一样的。
答案 2 :(得分:2)
你是完全正确的。窗口类定义窗口的外观和行为;您可以通过更改样式和响应窗口消息来在一定程度上覆盖这些,但如果其中一个预定义的窗口类不起作用,最好定义自己的窗口类。
CreateWindowEx文档中有一个预定义窗口类的列表。
答案 3 :(得分:2)
是的,你是对的。有几个预定义控件\窗口具有预定义(外观和)行为。这些被称为系统类。
例如,
“按钮”是您可以用来创建按钮的类。
请查看MSDN中的表格
Button ::按钮的类。
ComboBox ::组合框的类。
编辑::编辑控件的类。
ListBox ::列表框的类。
MDIClient :: MDI客户端窗口的类。
ScrollBar ::滚动条的类。
Static ::静态控件的类。
现在,您可以在MSDN上阅读。点击这个:About Window Classes
希望它对你有所帮助。
答案 4 :(得分:1)
请记住,创建一个新的“Dialog”,就像“About”Window一样,不需要新的RegisterClass()。 我不同意John Dibling关于在Windows API之前或代替Windows API学习MFC。
MFC建立在Windows API之上,换句话说,MFC是Windows API,但包装在C ++类中,所以无论如何,如果你需要学习MFC,你必须要了解Windows API。
祝你好运。
答案 5 :(得分:0)
首先,您正在学习从WINAPI开始的Windows GUI编程。这不是我推荐的。相反,我首先要学习一个Windows GUI库,比如MFC。 Windows GUI编程很难。当你第一次学习时,不要让它变得更难。
窗口类是指屏幕上的窗口,因为C ++类是指C ++对象。它是如何在屏幕上构建窗口的蓝图,它包含有关处理消息的函数,使用什么类型的设备上下文等信息的信息。
不同类型的窗口需要不同的窗口类。在所谓的“通用控件库”中预定义了许多窗口类。常用控件包括您在典型窗口中找到的大多数控件。按钮,滑块,文本框,网格等。您可以创建这些公共控件而无需自己注册类,因为公共控件库在初始化时已经为您完成了。
屏幕上的所有内容都是某种窗口。这个网页浏览器,“后退”按钮,我正在输入的编辑框 - 每个都是一个单独的窗口。每个必须与适当的窗口类相关联。您使用的大多数控件都将与公共控件窗口类关联。如果您正在创建的wondow,例如应用程序的主窗口不是常用控件或具有预定义窗口类的其他类型的窗口,则您必须自己注册该类。