minigui之其它编程主题

十二.其它编程主题
一.定时器
1.相关函数
定时器消息1次默认是10ms

定时器回调函数
typedef BOOL (* TIMERPROC)(HWND, int, DWORD);
参数
HWND:创建定时器时传入的窗口句柄。如果没有必要使用,可传任何32位值
int: 定时器id
DWORD: 该定时器被触发时的系统滴答值
当 TIMERPROC 返回值为 FALSE 时, MiniGUI 将自动删除该定时器

BOOL GUIAPI ResetTimerEx (HWND hWnd, int id, unsigned int speed,TIMERPROC timer_proc);
#define SetTimer(hwnd, id, speed) SetTimerEx(hwnd, id, speed, NULL);

//重新设置定时器间隔
#define ResetTimer(hwnd, id, speed) ResetTimerEx(hwnd, id, speed, (TIMERPROC)0xFFFFFFFF);

//检查一个定时器是否被安装到指定的窗口上 
IsTimerInstalled 

//用于检测系统中是否还有可用的定时器资源
HaveFreeTimer 

//删除定时器
KillTimer(hWnd, _ID_TIMER);

2.注意
2.1 MiniGUI-Threads 中,每个消息队列最多能管理 32 个定时器 每个应用程序最多也只能设置 32 个定时器
2.2 定时器消息的处理比较特殊,在实现上,和 Linux 的信号机制类似。当一次定时器消息尚未处理而又出现一次新的
定时器消息时,系统将忽略这个新的定时器消息。
2.3定时器消息是优先级最低的消息类型,只有消息队列中不存在其它类型的消息(比如邮寄消息、通知消息、退出消
息、绘图消息)时,系统才会去检查是否有定时器到期。

二.剪贴板
1.概念
剪贴板是一个数据传送的工具,可以用于应用程序直接和应用程序内部的数据交互
miniGUI编辑框控件支持剪贴板操作,用户选择文本"CTRL + C" -----> "CTRL + V"复制到选中的剪贴板
minigui最多只能有 NR_CLIPBOARDS 个剪贴板,在"windows.h"上是4个

2.创建和销毁剪贴板
2.1 默认的剪贴板,可以直接使用,不需要其它的操作
    CBNAME_TEXT(字符串名”text”)
    
2.2创建一个剪贴板
    int GUIAPI CreateClipBoard (const char* cb_name, size_t size);
    cb_name:剪贴板名字 不能和已有剪贴板重名
    size:剪贴板大小
    返回值:CBERR_OK 创建成功
           CBERR_BADNAME 名字重复
           CBERR_NOMEM 内存不足

2.3销毁一个自定义剪贴板
int GUIAPI DestroyClipBoard (const char* cb_name);

3.把数据传送到剪贴板
int GUIAPI SetClipBoardData (const char* cb_name, void* data, size_t n, int cbop);
cb_name:指定剪贴板的名字
data: 数据缓冲区指针
n: 数据的大小
cbop: 剪贴板操作类型 CBOP_NORMAL:默认的覆盖操作,新的数据覆盖剪贴板已有的数据;
                     CBOP_APPEND:追加操作,新的数据将被附加到剪贴板已有数据之后

4.从剪贴板上获取数据
用来获取剪贴板上数据的大小
size_t GUIAPI GetClipBoardDataLen (const char* cb_name);
cb_name:剪贴板名字
返回值:size_t 剪贴板数据大小

把剪贴板上的数据复制到指定的数据缓冲区中
size_t GUIAPI GetClipBoardData (const char* cb_name, void* data, size_t n);
cb_name:指定剪贴板的名字
data:缓冲区数据
n:缓冲区大小
返回值:size_t 获取的剪贴板数据的大小

从剪贴板数据的指定位置获取一个字节
int GUIAPI GetClipBoardByte (const char* cb_name, int index, unsigned char* byte);
cb_name:指定剪贴板的名字
index:指定位置
byte:要获取的字节

三.读写配置文件
1.文件格式
[section-name1]
key-name1=key-value1
key-name2=key-value2
[section-name2]
key-name3=key-value3
key-name4=key-value4

2.相关函数
从指定的配置文件当中获取指定的键值,键值以字符串形式返回
int GUIAPI GetValueFromEtcFile (const char* pEtcFile, const char* pSection,const char* pKey, char* pValue, int iLen);
pEtcFile:配置文件
pSection:段
pKey: 键
pValue:值(字符串)
iLen:

从指定的配置文件当中获取指定的整数型键值
int GUIAPI GetIntValueFromEtcFile (const char* pEtcFile, const char* pSection,const char* pKey, int* value);
pEtcFile:配置文件
pSection:段
pKey: 键
pValue:值(整形值)

该函数将给定的键值保存到指定的配置文件当中,如果配置文件不存在,则将新建配置文件。如果给定的键已存在,则将覆盖旧值
int GUIAPI SetValueToEtcFile (const char* pEtcFile, const char* pSection,const char* pKey, char* pValue);
pEtcFile:配置文件
pSection:段
pKey: 键
pValue:值(字符串)

把指定的配置文件读入内存,返回一个配置对象句柄,之后相关的函数可以通过该句柄来访问内存中的配置信息
GHANDLE GUIAPI LoadEtcFile (const char* pEtcFile);
pEtcFile:配置文件
返回值:GHANDLE 配置文件句柄

释放内存中的配置文件信息
int GUIAPI UnloadEtcFile (GHANDLE hEtc);
GHANDLE 配置文件句柄

从指定的配置文件句柄当中获取指定的键值,键值以字符串形式返回
int GUIAPI GetValueFromEtc (GHANDLE hEtc, const char* pSection,const char* pKey, char* pValue, int iLen);:
hEtc:配置文件句柄
pSection:段
pKey: 键
pValue:值(字符串)

从指定的配置文件句柄当中获取指定的整数型键值
int GUIAPI GetIntValueFromEtc (GHANDLE hEtc, const char* pSection,const char* pKey, int *value);
hEtc:配置文件句柄
pSection:段
pKey: 键
pValue:值(整形值)

使用方法和 SetValueToEtcFile 类似,不过该函数只改变内存中的配置键值,不影响配置文件的内容
int GUIAPI SetValueToEtc (GHANDLE hEtc, const char* pSection,const char* pKey, char* pValue);
hEtc:配置文件句柄
pSection:段
pKey: 键
pValue:值(字符串)

从内存中的配置文件信息中删除指定的段信息
int GUIAPI RemoveSectionInEtc (GHANDLE hEtc, const char* pSection);
hEtc:配置文件句柄
pSection:段

从指定的配置文件当中删除指定的段信息
int GUIAPI RemoveSectionInEtcFile (const char* pEtcFile, const char* pSection);
pEtcFile:配置文件
pSection:段

从内存中的配置文件信息的指定段中获取指定的键值
int GUIAPI GetValueFromEtcSec (GHANDLE hSect,const char* pKey, char* pValue, int iLen);
hSect:段句柄
pKey:键
pValue:值(字符串)

从内存中的配置文件信息的指定段中获取指定的整数型键值
int GUIAPI GetIntValueFromEtcSec (GHANDLE hSect,const char* pKey, int* pValue);
hSect:段句柄
pKey:键
pValue:值(整数值)

保存键值到内存中的配置文件信息的指定段中
int GUIAPI SetValueToEtcSec (GHANDLE hSect,const char* pKey, char* pValue);
hSect:段句柄
pKey:键
pValue:值

将内存中的配置文件信息保存到指定的文件中
int GUIAPI SaveEtcToFile (GHANDLE hEtc, const char* file_name);
hEtc:对象句柄
file_name:文件名

在内存中的配置文件信息中查找指定的字段,如果没有指定的字段存在,当参量 bCreateNew 为TRUE 时将新建一空字段
GHANDLE GUIAPI FindSectionInEtc (GHANDLE hEtc,const char* pSection, BOOL bCreateNew);
hEtc:对象句柄
pSection:段
bCreateNew: TRUE:创建一空字段
            FALSE:不会创建一空字段

四.编写可移植程序
1.字节顺序
Intel x86 cpu: 低字节存在低地址中,高字节存在高地址中 小端模式
PowerPC : 低字节存在高地址中 大端模式

2.理解并使用 MiniGUI 的 Endian 读写函数
2.1用来交换字节序的函数。包括 ArchSwapLE16、 ArchSwapBE16 
2.2用来读写标准 I/O 流的函数。包括 MGUI_ReadLE16、 MGUI_ReadBE16 

• ArchSwapLE16 (X) 将指定的以 Little Endian 字节序存放的 16 位整数值转换为系统私有整数值。如果系统本身是
Little Endian 系统,则该函数不作任何工作,直接返回 X;如果系统本身是 Big Endian 系统,则调用 ArchSwap16 函
数交换字节序。
• ArchSwapLE32 (X) 将指定的以 Little Endian 字节序存放的 32 位整数值转换为系统私有整数值。如果系统本身是
Little Endian 系统,则该函数不作任何工作,直接返回 X;如果系统本身是 Big Endian 系统, 则调用 ArchSwap32 函
数交换字节序。
• ArchSwapBE16 (X) 将指定的以 Big Endian 字节序存放的 16 位整数值转换为系统私有整数值。如果系统本身是 Big
Endian 系统,则该函数不作任何工作,直接返回 X;如果系统本身是 Little Endian 系统,则调用 ArchSwap16 函数
交换字节序。
• ArchSwapBE32 (X) 将指定的以 Big Endian 字节序存放的 32 位整数值转换为系统私有整数值。如果系统本身是 Big
Endian 系统,则该函数不作任何工作,直接返回 X;如果系统本身是 Little Endian 系统,则调用 ArchSwap32 函数
交换字节序。

MGUI_ReadLE16 和 MGUI_ReadLE32 等函数读取整数值
文件存放在小端模式上  ------ 小端数据 ------- 系统数据
MGUI_WriteLE16 和 MGUI_WriteLE32
系统数据 ------- 小端数据  -------- 文件

五.定点数运算
• 整数、浮点数和定点数之间的转换。利用 itofix 和 fixtoi 函数可实现整数和定点数之间的相互转换;利用 ftofix 和
fixtof 函数可实现浮点数和定点数之间的转换。
• 定点数加、减、乘、除等基本运算。利用 fixadd、 fixsub、 fixmul、 fixdiv、 fixsqrt 等函数可实现定点数加、减、乘、
除以及平方根运算。
• 定点数的三角运算。利用 fixcos、 fixsin、 fixtan、 fixacos、 fixasin 等函数可求给定定点数的余弦、正弦、正切、反余
弦、反正弦值。
• 矩阵、向量等运算。矩阵、向量相关运算在三维图形中非常重要,限于篇幅,本文不会详细讲述这些运算,读者可
参阅 MiniGUI 的 <minigui/fixedmath.h> 头文件。
 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值