Visual Studio可视化界面剖析
在引用OPENGl时,应先了解一下,VS可视化界面的构建流程
Visual Studio是一款windows操作系统的编程软件,主要支持语言c/c++,当然也有扩展语言的支持,当前主要剖析图形接口的形成
流程解析
Visual Studio主要使用了消息机制(系统消息、应用消息)的概念,由繁入简构建大型可视化界面,有几个关键的API
窗口的创建
1、RegisterClassEx()
注册窗口类,需要传入一个窗口结构体,当注册窗口后,使用CreateWindowW()将此窗口创建出来,此结构体,有一个关键的回调函数(CALLBACK),此函数是对所有消息机制的一个处理
2、CreateWindowW()
创建窗口,当此函数调用后,注册的窗口才被创建,将会返回一个关键的句柄,使用此句柄可获取到一些图形相关的句柄,在扩展和绑定图形引擎时将起到关键性的作用;接下来OPENGL的引入将会牵涉到此句柄
3、ShowWindow()
显示窗口
消息的传递
1、消息的监听
while是一种不满足条件将会一直循环下去的机制,Visual Studio在处理消息监听的时候,内部也是一种条件判断+无限循环,因此界面才会一直可视化
GetMessage()
从调用线程的消息队列里取得消息并将其放于指定的结构
lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
hWnd:取得其消息的窗口的句柄。当其值取NULL时,GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
2、快捷键处理
TranslateAccelerator()
函数主要的作用就是把消息跟快捷键表里定义的按键进行比较,如果发现有快捷键,就会把这个按键消息转换为WM_COMMAND或者WM_SYSCOMMAND消息给窗口的消息处理函数发送过去;
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));由此函数关联快捷键表;
TranslateMessage(&msg);用来把快捷键消息转换为字符消息,并将转换后的新消息投递到调用线程的消息队列中
3、消息的接收者
DispatchMessage(&msg);将处理后的消息,推送给回调函数,此函数是在注册窗口结构体时,关联的回调函数(CALLBACK)(参考RegisterClassEx)
以上流程则是vs基础界面生成的流程