guilib.h

来自「自己实现的一个好用的嵌入式GUI」· C头文件 代码 · 共 154 行

H
154
字号
//////////////////////////////////////Guilib.h///////////////////////////////////////////////////
#include"define.h"

//data type define

//CData define
/*typedef struct data{
	int wintype;
	void* pobj;
//	CNode* phomeNode;
}CData;*/

// node struct
typedef struct node{
	void* pdata;
	struct node* next;
	
}CNode;

//vector struct
typedef struct vector{
    int size;
	CNode* head;
	CNode* tail;
    CNode* (*push_back)(void* pdata, struct vector* self);
    void (*eraseByIndex)(int nindex, struct vector* self);
	void (*eraseByKey)(const void* pdata, struct vector* self);
	void* (*getByIndex)(int nindex, struct vector* self);
	int (*getIndex)(const void* pdata, struct vector* self);
	void (*clear)(struct vector* self);
}CVector;



//CRec define
typedef struct rec{
	int x;
	int y;
	int w;
	int l;	
}CRect1;

//CMssg define
typedef struct mssg{
	void* pdata;
	int type;
	int lparam;
	int wparam;
}CMssg;
typedef void(*EVENT_PROC)(CMssg*); // event function pointer

//CWin define
typedef struct win{
	CRect1* prec;
	char* caption;
	EVENT_PROC winproc[MSSG_NUM];
	CVector* pchild_vec;
	void* pExtra;
//	void (*addComponent)( void* pobj, int wintype, struct win* pwin);
//	void (*drawWin)(struct win* self);

}CWin;

//CButtn define
typedef struct buttn{
	CRect1* prec;
	char* caption;
	CWin* parentWin;
	EVENT_PROC winproc[MSSG_NUM];
	void* pExtra;
//	void (*drawButtn)(struct buttn* self);
}CButtn;

//CText define
typedef struct ctext{
	CRect1* prec;
	char* caption;
	CWin* parentWin;
	EVENT_PROC winproc[MSSG_NUM];
	int font_x;
	int font_y;
	int curPos;
	int endPos;
	int dspLnBgn;
    int dspChBgn;
	int dspChEnd;
	char text[TEXT_BUFF_SIZE];
	CVector* pformatVec;
	int format_x[TEXT_BUFF_SIZE];
	int format_y[TEXT_BUFF_SIZE];
	void* pExtra;
}CText;

//////////////////////////////////////////////////////////////function//////////////////////////////////////////////////////
void collectPointer(void* pointer, int ptrType);
void iniGui(CWin* pstartWindow);
void freeAll();
void freeOne(void* pointer);

CVector* newCVector();
CNode* newCNode();
CNode* push_back(void* pdata, CVector* self);
void push_back_hook(CNode* pnewNode, void* pdata);
void eraseByIndex(int nindex, CVector* self);
void eraseByKey(const void* pdata, CVector* self);
void* getByIndex(int nindex, CVector* self);
int getIndex(const void* pdata, CVector* self);
void clear(CVector* self);

//CData* newCData(void* pobj, int wintype );

CRect1* newCRect(int x, int y, int w, int l);

CMssg* newCMssg(void* pdata, int type, int lparam, int wparam);
	
CWin* newCWin(CRect1* prec, char* caption);
void OnChangeFocus(CMssg* pmssg);
void OnClose(CMssg* pmssg);
void OnShow(CMssg* pmssg);
void addComponent(struct win* pwin, void* pobj);//, int wintype);
void drawWin(CWin* self);

void changeFocus();
void close(CWin* pwin);
void paint(void* pobj);//, int wintype);
void show(CWin* pwin);


CButtn* newCButtn(CWin* parentWin, CRect* prec, char* caption);
void drawButtn(CButtn* self);

CText* newCText(CWin* parentWin, CRect* prec, char* caption, int font_x, int font_y);
void drawText(CText* self);
void append(char c, CText* self);
void delet(CText* self);
void format(CText* self);
void textOut(CText* self);
void OnKeyDown(CMssg* pmssg);
void OnDbKeyDown(CMssg* pmssg);


void tagFocus();
void eraseFocus();
void setFocus(void* p);

void sendMessage(CMssg* pmssg);
CMssg* waitMessage();
int dispatchMessage(CMssg* pmssg);

int getPtrType(void* ptr);
void main();
void OnButtnClick(CMssg* pmssg);//for test
//void sendKeyMssg(UINT nChar);//for test

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?