原创——窗口化事件处理机制
我当年写的,某一次的突发奇想,因为吾爱不允许出现广告,所以我把名字改成论坛帐号名了单片机窗口化事件处理机制的理论分析与实现(定稿)lizhirui编写 2014年1月9日 星期四
我在编写一些复杂的单片机程序的时候总感觉顺序性程序难以使用,逻辑顺序混乱,联想到Windows、Linux等平台下操作。的事件处理机制后,便提出了以下构想:
本文所提出的"窗口"这一概念并不是指得可以显示的窗口,而是指窗口的性质:代码独立有条理;生命周期开始和结束并不取决于通电和断电的时间,而是取决于用户的操作。本文所提出的事件处理机制仅以窗口为单位,为了最大的省资源和应用性,本文的事件处理机制并不支持控件。
以下是程序(附带注释,理论上可支持任何编程语言和平台(PC、嵌入式等)):
注:函数主体不在本文件出现,而是在用户文件中出现的函数,会在注释开头标注一个U
注:本文章仅提供C语言版本,其它语言版本请自己移植,以下代码均可以按照自己的想法及需要进行调整,本代码遵循GPL协议,允许用于商业用途。
Window.c(公共窗口管理程序,建议放置到编程软件的include目录中,以便程序随时调用):
//函数声明
void main();//事件监视主程序
void Init();//U主程序启动初始化子程序
void Deal(uchar hwnd);//U事件处理子程序
void InitWindow(uchar hwnd);//U窗口初始化管理主程序
void ChangeWindow(uchar hwnd);//切换窗口子程序
uchar GetStartWindow();//U获取启动窗口
uchar GetWindow();//获取当前窗口
//全局变量初始化声明
uchar Window=0;//设置当前无打开窗口
//程序主体
void main()
{
Init();//调用主程序启动初始化子程序
ChangeWindow(GetStartWindow());//设置当前窗口为启动窗口
while(1)//事件监视循环
Deal(Window);//调用事件处理子程序
}
//-----------------------------------------
void ChangeWindow(uchar hwnd)
{
if(hwnd>0)//判断窗口句柄是否合法,范围为1~255的整数
{
Window=hwnd;//设置当前窗口
InitWindow(hwnd);//调用窗口初始化管理主程序调用句柄为hwnd的窗口初始化子程序
}
}
//----------------------------------------
uchar GetWindow()
{
return Window;//返回当前窗口句柄
}
MainDeal.c(用户处理程序,放置在程序目录下即可,以下示例代码可根据需要进行改动):
#include //包含公共窗口管理程序
#define w1 1
void Deal(uchar hwnd)//事件处理子程序
{
switch(hwnd)//分窗口处理事件
{
case w1:w1Deal();break;//调用w1窗口事件处理子程序,代码不在此列出
}
}
void Init()//主程序启动初始化子程序
{
}
uchar GetStartWindow()//设置启动窗口
{
return w1;//设置为w1窗口
}
void InitWindow(uchar hwnd)//窗口初始化管理主程序
{
clean1602();
switch(hwnd)//分窗口初始化
{
case w1:w1Init();break;//调用w1窗口初始化子程序,代码不在此列出
}
}
要加精的节奏? 很给力支持 感谢楼主分享!
页:
[1]