Visual Studio+Opengl剖析(一)——Visual Studio可视化界面剖析

Visual Studio可视化界面剖析

在引用OPENGl时,应先了解一下,VS可视化界面的构建流程
Visual Studio是一款windows操作系统的编程软件,主要支持语言c/c++,当然也有扩展语言的支持,当前主要剖析图形接口的形成
这是使用vs创建的基础win32项目,自动生成的代码,是最基础的图形界面的流程

流程解析

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基础界面生成的流程

水平有限,如果描述有问题,可以指出,将做出更正,感谢你的浏览!

创作不易,点点小赞,关注下次更新

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AWTK是一个基于C语言的GUI开发框架,可以用它来创建嵌入式设备的界面。下面是一个简单的示例,用AWTK创建一个包含按钮和标签的窗口界面: ```c #include "awtk.h" static ret_t on_button_click(void* ctx, event_t* evt) { widget_t* label = widget_lookup(WIDGET(ctx), "label", TRUE); widget_set_text_utf8(label, "Hello, AWTK!"); return RET_OK; } static const char* s_styles = "button {padding: 10 20; font-size: 20; border-color: #333;}"; static widget_t* create_window(void) { widget_t* window = window_create(NULL, 0, 0, 240, 160); widget_set_text_utf8(window, "AWTK Demo"); widget_set_style(window, s_styles); widget_t* button = button_create(window, 60, 60, 120, 40); widget_set_text_utf8(button, "Click me!"); widget_t* label = label_create(window, 60, 120, 120, 30); widget_set_name(label, "label"); widget_set_handler(button, EVT_CLICK, on_button_click, label); return window; } int main(int argc, char* argv[]) { awtk_init(); widget_t* window = create_window(); widget_show(window); awtk_run(); awtk_quit(); return 0; } ``` 该代码定义了一个名为`create_window`的函数,用于创建一个窗口,该窗口包含一个按钮和一个标签。按钮的单击事件会将标签的文本更改为“Hello, AWTK!”。 代码中还包括一个名为`s_styles`的字符串,用于设置按钮的样式。 在`main`函数中,首先调用`awtk_init`函数进行初始,然后创建窗口并显示,最后调用`awtk_run`函数进入消息循环,等待用户交互事件。当用户关闭窗口或程序退出时,调用`awtk_quit`函数进行清理。 编译该代码需要先安装AWTK,并且在编译时需要链接AWTK的库。例如,如果AWTK安装在`/usr/local/awtk`目录下,可以使用以下命令编译: ```bash gcc -o awtk_demo awtk_demo.c \ -I/usr/local/awtk/include -L/usr/local/awtk/lib -lawtk \ -lm -ldl -lpthread ``` 然后运行`awtk_demo`程序即可看到窗口界面。 ### 回答2: 使用AWTK(Advanced Widget Toolkit)编写一个界面非常简单且高效。AWTK是一个轻量级但功能强大的GUI(图形用户界面)开发工具,可以帮助开发者快速构建可的应用程序界面。 AWTK提供了许多预定义的小部件(widgets),如按钮、标签、文本框、滑块等,这些小部件可以直接在界面中使用。编写一个界面通常包括两个主要步骤:定义UI布局和处理事件。 首先,我们可以定义一个UI布局,可以使用AWTK提供的XML方式或者使用AWTK提供的布局编辑器进行可设计。在布局中,我们可以添加和配置各种小部件,设置它们的大小、位置和样式。 其次,我们需要编写处理事件的代码,使得小部件可以响应用户的操作。AWTK提供了事件处理机制,我们可以通过绑定事件回调函数实现对用户操作的响应。例如,当按钮被点击时,我们可以编写一个回调函数,来处理按钮点击事件。 在布局和事件处理代码编写完成后,我们可以通过编译和运行AWTK程序,在屏幕上显示我们设计的界面。AWTK提供了多种平台支持,包括Linux、Windows、嵌入式系统等。 总结来说,使用AWTK编写一个界面需要明确UI布局和处理事件的代码。借助AWTK提供的丰富的小部件库和事件处理机制,我们可以快速而高效地开发出具有良好用户体验的界面应用程序。 ### 回答3: 使用AWTK编写一个界面的过程包括以下步骤: 1. 安装AWTK:首先,我们需要在本地环境中安装AWTK,可以从官方网站上下载安装包,并按照安装指南进行安装。 2. 创建一个项目:在AWTK中创建一个项目,可以通过命令行或者图形界面进行操作。在项目中,我们可以定义界面的组件和布局方式。 3. 设计界面:在项目中,我们可以使用AWTK提供的工具和组件进行界面的设计。可以自定义各种控件的样式、大小和位置,添加图标、图片等元素,以及设置交互逻辑。 4. 编写代码:在AWTK中,我们可以使用C语言编写代码,实现界面的逻辑功能。可以添加点击事件、滑动事件等,处理用户的操作行为。还可以与数据库或网络进行交互,实现数据的读写和更新。 5. 运行和调试:在开发过程中,我们可以使用AWTK提供的调试工具,对界面进行实时查看和调试。可以测试界面的各种功能,并及时进行修改和优。 6. 编译和发布:在开发完成后,我们需要将AWTK项目编译成可执行文件,然后进行发布。可以将可执行文件打包成安装包,供其他用户使用。 通过以上步骤,我们可以使用AWTK编写一个界面,并实现各种功能。AWTK具有丰富的组件库和开发工具,可以帮助我们快速开发出漂亮、易用的界面

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值