问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何通过c语言从底层开发GUI库?

发布网友 发布时间:2022-04-27 13:01

我来回答

2个回答

懂视网 时间:2022-04-27 17:23

通过C#动态生成图书信息XML文件(Books.xml),文件如下:
代码如下:

<?xml version="1.0" encoding="iso-8859-1"?>
<bookstore>

<book id="1" category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<publishDate>2005-08-15</publishDate>
<price>29.99</price>
</book>

<book id="2" category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<publishDate>2003-10-18</publishDate>
<price>39.95</price>
</book>

</bookstore>

方法1:使用StringBuilder拼接XML
代码如下:

/// <summary>
/// 创建图书信息XML
/// </summary>
public void CreateBookXML(string fileName)
{
StringBuilder xmlResult = new StringBuilder("<?xml version="1.0" encoding="utf-8"?>");
List<BookInfo> bookList = GetBookList(); //获取图书列表
if (bookList != null && bookList.Count > 0)
{
xmlResult.Append("<bookstore>");
foreach (BookInfo book in bookList)
{
xmlResult.AppendFormat("<book id="{0}" category="{1}">", book.BookId, book.Category);
xmlResult.AppendFormat("<title>{0}</title>", book.Title);
xmlResult.AppendFormat("<author>{0}</author>", book.Author);
xmlResult.AppendFormat("<publishDate>{0}</publishDate>", book.PublishDate.ToString("yyyy-MM-dd"));
xmlResult.AppendFormat("<price>{0}</price>", book.Price);
xmlResult.Append("</book>");
}
xmlResult.Append("</bookstore>");
}

//写入文件
try
{
//1.创建文件流
FileStream fileStream = new FileStream(fileName, FileMode.Create);
//2.创建写入器
StreamWriter streamWriter = new StreamWriter(fileStream);
//3.将内容写入文件
streamWriter.WriteLine(xmlResult);
//4.关闭写入器
streamWriter.Close();
//5.关闭文件流
fileStream.Close();
}
catch (Exception e)
{ }
}

方法2:使用XmlTextWriter类创建XML
代码如下:

/// <summary>
/// 创建图书信息XML
/// </summary>
/// <param name="fileName"></param>
public void CreateBookXML(string fileName)
{
try
{
FileStream fileStream = new FileStream(fileName, FileMode.Create);
XmlTextWriter writer = new XmlTextWriter(fileStream, Encoding.UTF8);
List<BookInfo> bookList = GetBookList(); //获取图书列表
if (bookList != null && bookList.Count > 0)
{
writer.WriteStartDocument();
writer.WriteStartElement("bookstore"); //创建父节点
foreach (BookInfo book in bookList)
{
writer.WriteStartElement("book"); //创建子节点
writer.WriteAttributeString("id", book.BookId.ToString()); //添加属性
writer.WriteAttributeString("category", book.Category);
//图书名称节点
writer.WriteStartElement("title");
writer.WriteValue(book.Title); //节点赋值
writer.WriteEndElement();
//图书作者节点
writer.WriteStartElement("author");
writer.WriteValue(book.Author);
writer.WriteEndElement();
//出版时间节点
writer.WriteStartElement("publishDate");
writer.WriteValue(book.PublishDate.ToString("yyyy-MM-dd"));
writer.WriteEndElement();
//销售价格节点
writer.WriteStartElement("price");
writer.WriteValue(book.Price);
writer.WriteEndElement();

writer.WriteEndElement(); //子节点结束
}
writer.WriteEndElement(); //父节点结束
}
writer.WriteEndDocument();
writer.Close();
fileStream.Close();
}
catch (Exception e)
{ }
}

XmlTextWriter类:表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据的流或文件。
WriteStartDocument()方法:编写XML的声明。
WriteEndDocument()方法:关闭任何打开的元素或属性并将编写器重新设置为 Start 状态。
WriteStartElement(string localName)方法:创建一个节点的开始。
WriteAttributeString(string localName, string value)方法:给节点添加属性。
WriteValue(value)方法:给节点赋值。

3、其他代码

3.1 获取图书列表
代码如下:

/// <summary>
/// 获取图书列表
/// </summary>
/// <returns></returns>
public List<BookInfo> GetBookList()
{
List<BookInfo> bookList = new List<BookInfo>();
BookInfo book1 = new BookInfo() {
BookId = 1,
Category = "CHILDREN",
Title = "Harry Potter",
Author = "J K. Rowling",
PublishDate = new DateTime(2005,08,15),
Price = 29.99
};
bookList.Add(book1);
BookInfo book2 = new BookInfo()
{
BookId = 2,
Category = "WEB",
Title = "Learning XML",
Author = "Erik T. Ray",
PublishDate = new DateTime(2003,10,18),
Price = 39.95
};
bookList.Add(book2);
return bookList;
}

3.2 图书信息实体类
代码如下:

/// <summary>
/// 图书信息实体类
/// </summary>
public class BookInfo
{
public int BookId { set; get; } //图书ID
public string Title { set; get; } //图书名称
public string Category { set; get; } //图书分类
public string Author { set; get; } //图书作者
public DateTime PublishDate { set; get; } //出版时间
public Double Price { set; get; } //销售价格
}

热心网友 时间:2022-04-27 14:31

主要把几个关键问题弄清楚,每个框架都有不同的方案解决这几个问题。
1. 怎么描述界面。
一般都是类似xml的树结构来描述
2. 怎么render, refresh
拿到object tree/render tree之后, 如何把这个东西画出来到framebuffer上, cpu?gpu?以什么格式?node的状态改变之后, 怎么刷新,什么时候刷新。
3. 如何管理这个tree。
clip, transparent等等属性怎么处理, layout怎么管理,parent关掉了怎么处理子节点? ...
4. 用户点击这里该怎么办?(user event handling)
无非这几种办法
function pointer(Callback) 或者 signal/slot 或者observer interface+ registration。
5. event handle (system event handling)
这是比4更广义的问题,
a. input device trigged, 发IRQ, kernel处理, 丢给framework的handler.
b. 打包放入 event queue.
c. loop engine dispatches event: (key events sent to widget has the focus, mouse event to widget under cursor).
d. if target dont have handler for this event, bubble up to the root node until someone a*et it.
5. MVC 的具体细节和jargon
6. 多线程, IPC, shared memory问题追问可不可以简单说

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小红书怎么修改ID 专属ID更改方法 Win11如何更改字体视觉效果 Win11字体视觉效果修改方法介绍 华为团队管理模式 通信工程这个专业主要是学什么 专注力差的孩子该如何纠正 三岁的孩子专注力不好,怎么培养她的专注力呀!。 镇江关周围有什么玩的,镇江及周边旅游景点 大港南站去镇江汽车站怎么走 镇江汽车站到大港南站有多远 出国去澳大利亚留学都需要注意哪些事项呢? 澳大利亚留学条件及注意事项有哪些 土豪金光剑怎么合成 元气骑士为什么研究过光剑土豪金之后光剑土豪金没有出现在锻造台里? 光剑土豪金为什么不能打造 元气骑士合成光剑土豪金怎么弄 光剑黄红蓝怎么合成 元气骑士光剑土豪金获得蓝图,材料也够,却没法在大厅制造台制造是为什么? 元气骑士激光剑土豪金图纸怎么获得 新版本设计台找不到光剑土豪金怎么办? 元气骑士怎么快速刷出来光剑土豪金的蓝图? 用三把光剑怎么合成光剑土豪金? 深圳 一次性补缴社保 深圳市一次性补交社保条件 深圳 一次性补交社保 深圳社保一次性补交 深圳社保补缴社保补缴条件 通过c的磁通量方向是向下还是向上,为什么? 欧洲卡车模拟2 1.17下载地址 请问,欧洲卡车模拟2在哪里下载着呢 什么牌子的电线最好, - 信息提示 我是1994年12月26日出生的,摩羯座,我的幸运色,幸运数字,幸运图案都是啥啊 各种星座的幸运日和幸运花是什么? 九一年属羊农历十二月初九请问今年有什么好运? 十二星座的图案中面带什么星座是几月几日的 太阳巨蟹、月亮天蝎、金星狮子、上升射手的人怎么样啊?求综合分析、、 男 公历起卦时间:2013年 1月 29日 12时 53分 求财 ,本卦【巽宫:火雷噬嗑】变卦【艮宫:天泽履】 我儿子是阳历20120921阴历八月初六请问哪天是百天 狮子男 8.5性格 各个方面的 心理和爱情最好详细一点 谢谢 1968年12月29日辰时生算命 2013年属猴金牛座的全年运势以及幸运数字 农历2012年12月13日9时生辰八字是什么? 华为麦芒5的设置功能理怎么找到调电视的功能 我想要文件夹中的照片无序随机排列 怎么把一个文件夹里的图片打乱? 如何通过c程序编写,将程序运行结果输出到txt文件 很感兴趣换成什麼成语 这本书对我很感兴趣。修改病句 对.很感兴趣的英文 语文对我很感兴趣修改病句是什么? 这篇作文我很感兴趣.这句话怎么修改病句