博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用wxWidgets for C++从资源文件中静态装载图像
阅读量:5844 次
发布时间:2019-06-18

本文共 4318 字,大约阅读时间需要 14 分钟。

在wxWidgets中装载图像是非常容易的,但是如果将图像文件和可执行文件放到一起,在发布时只需要发布可执行文件,要实现这种功能,一般可以使用资源文件来解决。在windows下的资源文件的源文件是*.rc,编译后叫*.res。在linux下类似,源文件为*.xrc,编译后叫*.xres。但它们是xml格式的,要装载这种资源文件也得动态进行装载。相当于配置文件。


    如果想将其直接编译进可执行文件。需要一个工具wxrc。这个工作在wxWidgets中的untils目录中,可自己编译。可使用这个工具将*.xrc 生成c++代码,如果是图像,就将其转换成字符数组。然后和其它程序一起进行编译。可使用wxrc -c main.xrc -v -o main.h


main.xrc的格式如下:

<?
xml version="1.0"
?>
 
<
resource 
version
="2.3.0.1"
>
    
   
<
object 
class
="wxBitmap"
 name
="background"
>
background.jpg
</
object
>
 
</
resource
>

生成的main.h的格式如下:
//
//
 This file was automatically generated by wxrc, do not edit by hand.
//
#include 
<
wx
/
wxprec.h
>
#ifdef __BORLANDC__
    
#pragma
 hdrstop
#endif
#include 
<
wx
/
filesys.h
>
#include 
<
wx
/
fs_mem.h
>
#include 
<
wx
/
xrc
/
xmlres.h
>
#include 
<
wx
/
xrc
/
xh_all.h
>
static
 size_t xml_res_size_0 
=
 
55966
;
static
 unsigned 
char
 xml_res_file_0[] 
=
 {
255
,
216
,
255
,
224
,
0
,
16
,
74
,
70
,
73
,
70
,
0
,
1
,
2
,
0
,
0
,
100
,
0
,
100
,
0
,
0
,
255
,
236
,
0
,
17
,
68
,
117
,
99
,
107
,
121
,
0
,
1
,
0
,
4
,
0
,
0
,
0
,
60
,
0
,
0
,
255
,
238
,
0
,
14
,
65
,
100
,
111
,
98
,
101
,
0
,
100
,
192
,
0
,
0
,
0
,
1
,
255
,
219
,
0
,
132
,
0
,
6
,
4
,
4
,
4
,
5
,
4
,
6
,
5
,
5
,
6
,
9
,
6
,
5
,
6
,
9
,
11
,
8
,
6
,
6
,
8
,
11
,
12
,
10
,
10
,
11
,
10
,
10
,
12
,
16
,
12
,
12
,
12
,
12
,
12
,
12
,
16
,
12
,
14
,
15
,
16
,
15
,
14
,
12
,
19
,
19
,
20
,
20
,
19
,
19
,
28
,
27
,
27
,
27
,
28
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
1
,
7
,
7
,
7
,
13
,
12
,
13
,
24
,
16
,
16
,
24
,
26
,
21
,
17
,
21
,
26
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
31
,
255
,
192
,
0
,
17
,
8
,
2
,
201
,
3
,
248
,
3
,
1
,
17
,
0
,
2
,
.
.
102
,
222
,
191
,
202
,
130
,
94
,
195
,
45
,
21
,
39
,
169
,
149
,
113
,
241
,
11
,
45
,
173
,
84
,
25
,
120
,
94
,
18
,
190
,
190
,
196
,
107
,
2
,
216
,
129
,
52
,
90
,
4
,
128
,
1
,
130
,
160
,
201
,
16
,
36
,
0
,
147
,
0
,
84
,
68
,
164
,
164
,
47
,
80
,
44
,
0
,
96
,
168
,
202
,
0
,
201
,
145
,
130
,
178
,
49
,
229
,
32
,
127
,
255
,
217
};
static
 size_t xml_res_size_1 
=
 
161
;
static
 unsigned 
char
 xml_res_file_1[] 
=
 {
60
,
63
,
120
,
109
,
108
,
32
,
118
,
101
,
114
,
115
,
105
,
111
,
110
,
61
,
34
,
49
,
46
,
48
,
34
,
32
,
101
,
110
,
99
,
111
,
100
,
105
,
110
,
103
,
61
,
34
,
85
,
84
,
70
,
45
,
56
,
34
,
63
,
62
,
10
,
60
,
114
,
101
,
115
,
111
,
117
,
114
,
99
,
101
,
32
,
118
,
101
,
114
,
115
,
105
,
111
,
110
,
61
,
34
,
50
,
46
,
51
,
46
,
48
,
46
,
49
,
34
,
62
,
10
,
32
,
32
,
60
,
111
,
98
,
106
,
101
,
99
,
116
,
32
,
99
,
108
,
97
,
115
,
115
,
61
,
34
,
119
,
120
,
66
,
105
,
116
,
109
,
97
,
112
,
34
,
32
,
110
,
97
,
109
,
101
,
61
,
34
,
98
,
97
,
99
,
107
,
103
,
114
,
111
,
117
,
110
,
100
,
34
,
62
,
114
,
101
,
115
,
111
,
117
,
114
,
99
,
101
,
115
,
46
,
104
,
36
,
98
,
97
,
99
,
107
,
103
,
114
,
111
,
117
,
110
,
100
,
46
,
106
,
112
,
103
,
60
,
47
,
111
,
98
,
106
,
101
,
99
,
116
,
62
,
10
,
60
,
47
,
114
,
101
,
115
,
111
,
117
,
114
,
99
,
101
,
62
,
10
};
void
 InitXmlResource()
{
    
//
 Check for memory FS. If not present, load the handler:
    {
        wxMemoryFSHandler::AddFile(wxT(
"
XRC_resource/dummy_file
"
), wxT(
"
dummy one
"
));
        wxFileSystem fsys;
        wxFSFile 
*
=
 fsys.OpenFile(wxT(
"
memory:XRC_resource/dummy_file
"
));
        wxMemoryFSHandler::RemoveFile(wxT(
"
XRC_resource/dummy_file
"
));
        
if
 (f) delete f;
        
else
 wxFileSystem::AddHandler(
new
 wxMemoryFSHandler);
    }
    wxMemoryFSHandler::AddFile(wxT(
"
XRC_resource/resources.h$background.jpg
"
), xml_res_file_0, xml_res_size_0);
    wxMemoryFSHandler::AddFile(wxT(
"
XRC_resource/resources.h$main.xrc
"
), xml_res_file_1, xml_res_size_1);
    wxXmlResource::Get()
->
Load(wxT(
"
memory:XRC_resource/resources.h$main.xrc
"
));
}
其后在主程序中调用 InitXmlResource函数。


要想装载这个background.jpg图,使用以下语句:

wxXmlResource::Get()->InitAllHandlers();     wxBitmap background = wxXmlResource::Get()->LoadBitmap(_T("background"));     m_pStaticBitmap = new wxStaticBitmap(this, wxID_ANY, background, wxPoint(0, 0), wxSize(1024, 768));
但要注意使用wxStaticBitmap时应在wxFrame中的OnSize中加入
 

否则在windows下当窗口缩小后再放大时,图像显示有一些问题。但在linux下可以不加这条语句。

本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/216636,如需转载请自行联系原作者

你可能感兴趣的文章
Mockito使用注意事项
查看>>
[LeetCode] Palindrome Linked List 回文链表
查看>>
UVA - 825Walking on the Safe Side(dp)
查看>>
评论:人才流失强力折射出现实畸形人才观
查看>>
虚拟运营商10月或大面积放号 哭穷背后仍有赢家
查看>>
UML中关联,组合与聚合等关系的辨析
查看>>
ios的google解析XML框架GDataXML的配置及使用
查看>>
netty-当一个客户端连接到来的时候发生了什么
查看>>
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Openstack API常用命令
查看>>
关于k-means聚类算法的matlab实现
查看>>
跟随我在oracle学习php(8)
查看>>
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
求两个集合的交集,并集,差集
查看>>
Kotlin的语法糖(一)基础篇
查看>>
亚信安全参加第六届全国等保技术大会 态势感知助力“等保2.0”落地
查看>>
大数据公司Palantir融得7亿美元 曾追踪拉登
查看>>
建立备份策略的重要性
查看>>
发力IoT领域 Marvell注重生态系统发展
查看>>