[按]最近将通信管理机中的液晶条显示系统信息的功能做了一次整理和完善.搭建了一个UI的框架.现把代码贴出来.有做类似工作的可以参考一下,同时也希望能交流.
飞信:846819528
// 头文件lcd.h
// 封装了液晶条的接口
#ifndef _LCD_H
#define _LCD_H
/*
*/
class CLcd
{
CLcd( CLcd& );
CLcd& operator=( const CLcd& );
public:
CLcd();
~CLcd();
int init();
int getProperty( int& width,int& height,int& bpp );
int width(){ return m_width; }
int height(){ return m_height; }
int bpp(){ return m_bpp; }
// Ë¢ÐÂÒº¾§
void fresh();
// ÉèÖõãÏóËØ
void pixel( const int& x,const int& y,const unsigned int& colidex );
// Çå¿ÕÆÁÄ»
void clear( const unsigned int& colidex= 0 );
private:
int m_lcdFd;
unsigned char* m_lcdBuffer;
int m_width;
int m_height;
int m_bpp;
};
#endif
// 键盘接口
#ifndef _KEYBOARD_H
#define _KEYBOARD_H
/*
This document define keyboard interface.
*/
enum EKeyCode
{
KeyCode_Up,KeyCode_Down,KeyCode_Left,KeyCode_Right,KeyCode_Unknow
};
// ³õʼ»¯¼üÅÌ
int initKeyBoard();
// ¹Ø±Õ¼üÅÌ
int closeKeyBoard();
// ¶ÁÈ¡¼üÅÌʼþ,ûÓж¯×÷·µ»Øδ֪
EKeyCode getKeyStatue();
// ¶ÁÈ¡¼üÅÌ
// seconds =0 ÂíÉÏ·µ»Ø,seconds<0 ÓÀ¾ÃµÈ´ý,seconds >0 µÈ´ýʱ¼ä
EKeyCode waitKeyPressed();
#endif
// 核心部件,基类
#ifndef _WIDGET_H
#define _WIDGET_H
#include <vector>
#include "keyboard.h"
#include "lcd.h"
#include "hzk.h"
extern CLcd* WidgetLcd;
class CWidget
{
public:
CWidget( CWidget* parent=NULL );
virtual ~CWidget();
virtual void show();
virtual void refresh();
virtual void keyLeft();
virtual void keyRight();
virtual void keyUp();
virtual void keyDown();
void setStart( const int& x,const int& y );
void setStartX( const int& x );
void setStartY( const int& y );
int startX()const;
int startY()const;
void setSize( const int& width,const int& height );
void setWidth( const int& width );
void setHeight( const int& height );
int width()const;
int height()const;
void setFreshTime( const int& freshSeconds );
int freshTime()const;
void set_OnLeft( CWidget*,void (CWidget::*pf)() );
void set_OnRight( CWidget*,void (CWidget::*pf)() );
void set_OnUp( CWidget*,void (CWidget::*pf)() );
void set_OnDown( CWidget*,void (CWidget::*pf)() );
void setParent( CWidget* parent );
CWidget* parent();
const CWidget* parent()const;
// paintors on widget
void pixel(const int& x,const int& y,const unsigned int& colidex);
void clear( const unsigned int& colidex=0 );
void clearLcd( const unsigned int& colidex=0 );
void putChar( const int& x,const int& y,const unsigned int& colidex,const char& c );
void putWord( const int& x,const int& y,const unsigned int& colidex,const char* w );
void putString( const int& x,const int& y,const unsigned int& colidex,const char* str );
// ´òÓ¡Ö±Ïß
void drawLine( const int& xs,const int& ys,const int& xe,const int& ye,const unsigned int& colidex );
// ´òÓ¡Ô²
void drawCircle(const int& x,const int& y,const int& r,const unsigned int& colidex );
void paintCircle(const int& x,const int& y,const int& r,const unsigned int& colidex );
// ´òÓ¡¾ØÐÎ
void drawRectangle( const int& xleftUp,const int& yleftUp,const int& xrightDown,const int& yrightDown,const unsigned int& colidex );
void paintRectangle( const int& xleftUp,const int& yleftUp,const int& xrightDown,const int& yrightDown,const unsigned int& colidex );
// ´òÓ¡»¡Ïß
void drawArc( const int& x,const int& y,const int& r,const double& as,const double& ae,const unsigned int& colidex );
void paintArc( const int& x,const int& y,const int& r,const double& as,const double& ae,const unsigned int& colidex );
private:
int m_startX;
int m_startY;
int m_width;
int m_height;
int m_freshTime;
CWidget* m_widget_left;
CWidget* m_widget_right;
CWidget* m_widget_up;
CWidget* m_widget_down;
void (CWidget::*m_on_left)();
void (CWidget::*m_on_right)();
void (CWidget::*m_on_up)();
void (CWidget::*m_on_down)();
CWidget* m_parent;
std::vector<CWidget*> m_children;
CHzk<16,16> m_hzk;
};
#endif
// 应用对象类
#ifndef _LCD_APP_H
#define _LCD_APP_H
class CWidget;
class CApp
{
public:
static CApp* app();
public:
CApp();
~CApp();
int setShowWidget( CWidget* );
int exec();
private:
CWidget* m_showWidget;
};
#endif
// 示例
// 所有的部件都继承自widget类.
#include <unistd.h>
#include <fcntl.h>
#include "ifconfig.h"
#include <iostream>
#include <sys/ioctl.h>
#include <linux/kd.h>
#include "lcdapp.h"
#include "pagemain.h"
#include "pagemenu.h"
#include "pageip.h"
#include "pageport.h"
#include "pagehelp.h"
#include "pageabout.h"
using namespace std;
int main( int argc,char* argv[] )
{
CApp app;
CPageMain page_main;
CPageMenu page_menu;
CPageIp page_ip;
CPagePort page_port;
CPageHelp page_help;
CPageAbout page_about;
page_main.set_OnRight( &page_menu, (&CWidget::show) );
page_menu.set_OnLeft( &page_main,(&CWidget::show) );
page_menu.setCommand(0,(&CWidget::show),&page_ip );
page_menu.setCommand(1,(&CWidget::show),&page_port);
page_menu.setCommand(2,(&CWidget::show),&page_help );
page_menu.setCommand(3,(&CWidget::show),&page_about );
page_ip.set_OnLeft( &page_menu,(&CWidget::show) );
page_port.set_OnLeft( &page_menu,(&CWidget::show) );
page_help.set_OnLeft( &page_menu,(&CWidget::show) );
page_about.set_OnLeft( &page_menu,(&CWidget::show) );
page_main.show();
app.exec();
cout <<"OK"<<endl;
return 0;
}