MiniGUI——第一个程序helloworld
文章目录
- 一、窗口过程和句柄是什么?
- 二、helloworld代码部分以及部分代码的解释
一、窗口过程和句柄是什么?
提示:以下是本篇文章正文内容
1、窗口过程是什么?
窗口过程是一个特定类型的函数,用来接收和处理所有发送到该窗口的消息。每个控件类都有一个窗口过程,属于同一控件类的所有控件共用一个窗口过程来处理消息。窗口过程函数是MiniGUI程序的主体部分,应用程序实际所做的工作大部分都发生在窗口过程函数中,因为MiniGUI程序的主要任务就是接收和处理窗口收到的各种消息。窗口过程函数由MiniGUI调用,是一个回调函数。
窗口过程函数一般定义的形式:
static int HelloWinPro(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
hWnd:接收消息的窗口的句柄,与CreateMainWindow函数的返回值相同,该值标识了接收该消息的特定窗口。(何为句柄? 下面会说)
message:与MSG结构中的message域相同,是一个标识窗口所收到消息的整数值。
wParam和IParam:都是32位的消息参数。
2、句柄是什么?
句柄(Handle)是一个用来标识对象或项目的标识符,可以用来描述窗体、文件等。在 MiniGUI 中,使用句柄访问窗口、控件、菜单、图标等。
eg: 窗口句柄:是用来标识窗口的唯一值。每个窗口都对应一个句柄,所有的句柄都不会重复,根据句柄可以获取对应窗口的相关信息。
二、代码部分
1.helloworld代码部分
#include <stdio.h>
#include <minigui/common.h> //包括MiniGUI常用的宏以及数据类型的定义
#include <minigui/minigui.h> //包含全局接口函数和通用接口函数以及某些杂项函数的定义
#include <minigui/gdi.h> //包含MiniGUI绘图函数的接口定义
#include <minigui/window.h> //包含窗口有关的宏、数据类型、数据结构定义以及函数接口声明
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)//窗口过程函数
{HDC hdc;switch (message) {case MSG_PAINT: //该消息在需要进行窗口重绘时发送到窗口过程,处理完该消息后 直接返回hdc = BeginPaint (hWnd); //获取设备上下文句柄//TextOut (hdc, 100, 100, "Hello world!");//文本的输出SetPenColor(hdc, PIXEL_red);Rectangle (hdc, 100, 100, 200, 200);EndPaint (hWnd, hdc); //释放设备上下文句柄return 0;case MSG_CLOSE: //点击关闭按钮时,应用程序在响应消息时会调用销毁窗口DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0;}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
int MiniGUIMain (int argc, const char* argv[])
{MSG Msg;HWND hMainWnd;MAINWINCREATE CreateInfo;#ifdef _LITE_VERSIONSetDesktopRect(0, 0, 800, 600);#endifCreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;CreateInfo.dwExStyle = WS_EX_NONE;CreateInfo.spCaption = "HelloWorld";CreateInfo.hMenu = 0;CreateInfo.hCursor = GetSystemCursor(0);CreateInfo.hIcon = 0;CreateInfo.MainWindowProc = HelloWinProc;CreateInfo.lx = 0;CreateInfo.ty = 0;CreateInfo.rx = 320;CreateInfo.by = 240;CreateInfo.iBkColor = COLOR_lightwhite;CreateInfo.dwAddData = 0;CreateInfo.hHosting = HWND_DESKTOP;hMainWnd = CreateMainWindow (&CreateInfo);if (hMainWnd == HWND_INVALID)return -1;ShowWindow(hMainWnd, SW_SHOWNORMAL);while (GetMessage(&Msg, hMainWnd)) {TranslateMessage(&Msg);DispatchMessage(&Msg);}MainWindowThreadCleanup (hMainWnd);return 0;
}
#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif
2.部分代码解释
PostQuitMessage (hWnd);
该消息在消息队列中设置一个QS_QUIT标志。GetMessage在从指定消息队列中获取消息时,会检查该标准,如果有QS_QUIT标志,GetMessage消息将返回FALSE,从而可以利用该返回值终止消息循环 。
SetDesktopRect(0, 0, 800, 600);
在MiniGUI-Lite版本中,每个MiniGUI客户端程序在调用其它MiniGUI函数之前必须调用该函数以设置程序的桌面显示矩形区域。
CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
CreateInfo.dwStyle——窗口的风格。
WS_VISIBLE——创建⼀个初始状态为可见的窗⼝
WS_BORDER——创建⼀个单边框的窗⼝
WS_CAPTION——标题栏
CreateInfo.dwExStyle = WS_EX_NONE;
CreateInfo.dwExStyle——窗口的附加风格。
WS_EX_NONE——表示无附加窗口风格
CreateInfo.spCaption = "HelloWorld";
CreateInfo.spCaption ——窗口的标题。
CreateInfo.hMenu = 0;
CreateInfo.hMenu——附加在窗口上的菜单句柄,设置窗口的主菜单
CreateInfo.hMenu = 0;表示该窗口无主菜单
CreateInfo.hCursor = GetSystemCursor(0);
CreateInfo.hCursor—— 在窗口中所使用的鼠标光标句柄
GetSystemCursor(0);——设置主窗口的光标为系统缺省光标。(即系统默认的光标)
CreateInfo.hIcon = 0;
CreateInfo.hIcon ——程序的图标
CreateInfo.hIcon = 0;表示该窗口没有图标
CreateInfo.MainWindowProc = HelloWinProc;
CreateInfo.MainWindowProc= HelloWinProc ——设置主窗口的过程函数为HelloWinProc,发往该 窗口的消息由该函数处理
CreateInfo.lx = 0;CreateInfo.ty = 0;CreateInfo.rx = 320;CreateInfo.by = 240;
设置窗口在屏幕的位置,该窗口左上角位于(0,0),右下角位于(320,240).
CreateInfo.lx——窗口左上角相对屏幕的绝对横坐标
CreateInfo.ty ——窗口左上角相对屏幕的绝对纵坐标
CreateInfo.rx ——窗口右下角相对屏幕的绝对横坐标
CreateInfo.by ——窗口右下角相对屏幕的绝对纵坐标
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.iBkColor——设置窗口的背景颜色
CreateInfo.iBkColor = COLOR_lightwhite;表示设置主窗口的颜色为白色
CreateInfo.dwAddData = 0;
CreateInfo.dwAddData ——窗口的附加数据
CreateInfo.dwAddData = 0; 表示窗口无附加数据
CreateInfo.hHosting = HWND_DESKTOP;
CreateInfo.hHosting——设置主窗口的托管窗口
CreateInfo.hHosting = HWND_DESKTOP;表示设置主窗口的托管窗口为桌面窗口
ShowWindow(hMainWnd, SW_SHOWNORMAL);
显示窗口;
第一个参数为所要显示的窗口的窗口句柄,第二个参数指明显示方式(显示或者隐藏,SW_SHOWNORMAL说明要显示主窗口,并把它置为顶窗口)。 调用ShowWindow函数后主窗口会出现在屏幕上,之后便进入消息循环
TranslateMessage(&Msg);
TranslateMessage函数把击键消息转化为MSG_CHAR消息,然后直接发送到窗口过程函数。
DispatchMessage(&Msg);
DispatchMessage函数最终将把消息发往该消息的目标窗口过程,让它进行处理。
MainWindowThreadCleanup (hMainWnd);
清除主窗口所使用的消息队列、内存等系统资源,并由MiniGUIMain返回。
参考资料———《MiniGUI编程指南》
MiniGUI——第一个程序helloworld相关推荐
- actionscript 3.0 怎么写android 程序,(ActionScript3.0笔记)第一个程序HelloWorld!
(ActionScript3.0笔记)第一个程序HelloWorld! 创建我的第一个ActionScript3.0程序--HelloWord! 首先下载ActionScript3.0的集成开发环境, ...
- 2018年9月28日第一个程序HelloWorld
A编写第一个程序 HelloWorld public class HelloWorld { //一个文件只能有一个public的class // 一个文件中可以有多个类,但是只能有一个公开的类 pub ...
- java怎么开始学dos,第一阶段-Java基础知识:【第一章 DOS命令与开发环境的配置 + 第一个程序HelloWorld】...
加油Ideal星河滚烫 你是人间理想 第一阶段 JAVA基础知识 第一章 开发环境的配置 Dos 命令 在正式进入Java学习之前我们来了解一个看起来B格很高的东西--Dos命令 DOS命令,计算机 ...
- 【Spring 4.0】Spring入门之第一个程序HelloWorld实现
一.什么是Spring? Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache License 2.0开源许可协议的形式 ...
- java第一个程序编译失败,零基础java第一个程序HelloWorld,编译,环境变量,运行,注释...
1.开发第一个java程序:HelloWorld public class HelloWorld{ // 这是一个类,类名叫做HelloWorld public static void main(St ...
- JAVA 第一个程序“HelloWorld”
大三上学期我们开设了"JAVA程序设计"这门课程,所用的教材是Bruce Eckel的<Java编程思想>也就是<Thinking in Java Fourth ...
- java学习笔记1:第一个程序HelloWorld
public class HelloWorld{/**该方法是程序的入口*/public static void main(String[] args){//这是一个输出语句System.out.pr ...
- java游戏一开始去山上打狐狸_。。。这才是Java的第一个程序------HelloWorld
这个是别人程序的错误,拿来给自己借鉴一下,以免发生同样的错误 不多说了...看程序 class helloworld { public static void main (St ...
- Servlet的第一个程序HelloWorld
如果按照本流程,一定可以完成自己的第一个servlet程序. 首先Tomcat要安装好,在Tomcat的webapps文件夹下建立自己的项目,我这里取名为my,按照servlet的规则,项目下必须有一 ...
最新文章
- android app 自动更新,AndroidUpdateDemo
- 计算机辅助园林设计ps,计算机辅助园林设计III
- python操作Excel的5种方式
- Android中edittext一些属性设置
- for(;;)是什么,for(;;)的作用
- 什么叫大地高_涨得高不是不买的理由,更不是卖出的理由,什么叫追涨杀跌?(附最简单选股方法)---交易那些事儿...
- MySQL的学习--触发器
- java(IO)读写文件乱码转换UTF-8问题
- Storm精华问答 | 为什么要用Storm?不用Spark?
- java中异常+连接重置_java.net.SocketException:连接重置
- 框架-vue-cli
- 一级指针易犯错误模型
- 属性动画和补间动画的原理及区别
- Qt Android treeWidget树状单击展开
- ZigBee Routing Tables 路由表
- 保研经验贴 某不知名211上岸华南理工大学
- Python+Excel 华尔街的一股清流
- 【Linux】Linux目录
- Micro(二)[环境搭建]
- Angular4中使用DomSanitizer
热门文章
- 安霸Ambarella CV系列芯片
- AWS Route53里使用Godady注册的域名
- vue集成汉字转拼音并提取首字母
- 未来第五代计算机的发展方向,走进新时代 从五代酷睿看未来电脑发展
- Thingworx 调用外部接口
- 在Win10下搭建web服务器,使用本机IP不能访问,但是使用localhos或127.0.0.1可以正常访问的解决办法...
- 速度与压缩比如何兼得?压缩算法在构建部署中的优化
- Typora 常用快捷键
- php怎么压缩文件夹,PHP压缩文件夹 php
- Unity 的 Scroll View组件