Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从窗口类访问应用程序变量的正确/公认设计是什么?_C++_Windows_Oop_User Interface - Fatal编程技术网

C++ 从窗口类访问应用程序变量的正确/公认设计是什么?

C++ 从窗口类访问应用程序变量的正确/公认设计是什么?,c++,windows,oop,user-interface,C++,Windows,Oop,User Interface,我的直接上下文是Windows平台,但是在为另一个gui主机处理ui时,我可能也会问同样的问题。我在相当的C++ WiLAPI中工作,没有ATL/MFC。我对使用globals不感兴趣,而是一种更为面向对象的实践,即使用“应用程序”数据执行与“窗口”相关的任务 我已经考虑过实现mvvw或mvc风格的模式,但在我继续之前,我想听听社区的意见,我想他们都是数不清的有经验的开发人员和设计师 我的应用程序类有窗口成员。Window类是否应使用应用程序引用进行设计?或者还有比这更好的方法吗?窗口的Win

我的直接上下文是Windows平台,但是在为另一个gui主机处理ui时,我可能也会问同样的问题。我在相当的C++ WiLAPI中工作,没有ATL/MFC。我对使用globals不感兴趣,而是一种更为面向对象的实践,即使用“应用程序”数据执行与“窗口”相关的任务

我已经考虑过实现mvvw或mvc风格的模式,但在我继续之前,我想听听社区的意见,我想他们都是数不清的有经验的开发人员和设计师


我的应用程序类有窗口成员。Window类是否应使用应用程序引用进行设计?或者还有比这更好的方法吗?

窗口的Win API为您提供了一个Set/GetProperty(),它允许您定义指向您想要的任何对象(即您自己的窗口对象)的指针。但是,根据经验,我知道这相当慢

另一种可能是使用一个映射,其中WinAPI窗口的指针用作键,值是您的窗口对象。这要快得多,但是如果你没有全球地图,你会把地图放在哪里呢

正如Samuel所建议的,一个单件可以让你得到一个与全局对象几乎相同的对象。然后,您可以使用WinAPI窗口指针作为键获取窗口对象,它将返回您的对象

这是将传入事件映射到窗口对象所必需的。无论如何,其他所有操作都应该以另一种方式进行(正如您所期望的那样,只对以与系统窗口类似的方式映射的窗口对象调用函数)


你为什么不使用Qt呢?它已经在C++中了,你不必担心那些细节……

指针到你的代码> tStult//Cux>类进入线程本地存储。类
TThread
将指向
TApplication
对象的指针作为其数据成员。无论如何,将
TApplication
设置为全局是有意义的,因为它的构造函数在调用
main
之前提供了一个进行初始化的地方。我知道人们为了避免全局变量做了很多努力(有理由),但有时这是最能反映现实的机制。如果设计上总是有一个且只有一个
应用程序的实例,那么为什么不把它变成一个全局的?或者一个单例的。但是我更愿意将对模型的引用传递给我的所有窗口对象,在您的例子中,这将是应用程序对象AFAIU。