一、先看看下面的代碼,并試著編譯下:
#include <platform/agg_platform_support.h>
#include <agg_pixfmt_rgb.h>
#include <agg_renderer_base.h>
#include <stdio.h>
#include <agg_path_storage.h>
class the_application : public agg::platform_support
{
public:
the_application(agg::pix_format_e format, bool flip_y) :
agg::platform_support(format, flip_y),
pix_fmt(rbuf_window()),
ren_bas(pix_fmt) //初始化渲染器
{
}
virtual void on_draw()
{
ren_bas.reset_clipping(true);
ren_bas.clear(agg::rgba8(255, 255, 255));
}
virtual void on_mouse_button_down(int x, int y, unsigned flags)
{
if(flags == agg::mouse_left) {
char str[50];
sprintf(str, "Mouse location:(%d, %d)", x, y);
message(str);
}
}
virtual void on_key(int x, int y, unsigned key, unsigned flags)
{
if(key == agg::key_return && flags == agg::kbd_shift) {
unsigned img = 0, states;
states = create_img(0, 500, 500);
states = load_img(img, "Steve-and-Bill.bmp");
copy_img_to_window(img);
update_window();
}
}
private:
agg::pixfmt_rgb24 pix_fmt;
agg::renderer_base<agg::pixfmt_rgb24> ren_bas;
};
int agg_main(int argc, char* argv[])
{
the_application app(agg::pix_format_rgb24, true);
app.caption("AGG Test");
if(app.init(500, 500, agg::window_resize)) {
return app.run();
}
return -1;
}
如果不出意外,在窗口中點(diǎn)擊鼠標(biāo)左鍵將會(huì)出現(xiàn)對(duì)話框提示當(dāng)前鼠標(biāo)的位置,而按下Shift+Enter將會(huì)在窗口中顯示在工作目錄下的位圖“Steve-and-Bill.bmp”;

二、解釋
先看看頭文件:platform/agg_platform_support.h,它里邊定義了一個(gè)platform_support類——它允許你建立一個(gè)窗口來測(cè)試你的圖形,并用鼠標(biāo)鍵盤去控制它。
類型
主要成員函數(shù)
- platform_support(pix_format_e, bool) : 構(gòu)造函數(shù)。設(shè)置窗口風(fēng)格和y軸是否上下翻轉(zhuǎn);
- width() :返回窗口的寬;
- height() :返回窗口的高;
- caption([ const char* ]) :設(shè)置標(biāo)題或返回標(biāo)題字符串;
- format() : 返回窗口風(fēng)格;
- message(const char*) :彈出對(duì)話框(沒有風(fēng)格可選);
- run() :運(yùn)行窗口;
- force_redraw() :重繪窗口,調(diào)用on_draw();
- update_window() :更新窗口,既是把渲染緩存中已有的內(nèi)容寫入窗口,不調(diào)用on_draw()。
- platform_support為我們提供了一個(gè)很好地繪圖平臺(tái),它有一系列的函數(shù)可用于操作位圖(BMP或PPM):
- create_img():創(chuàng)建一個(gè)編號(hào)為idx的位圖;
- save_img():將位圖idx保存到文件中;
- load_img():從文件中加載位圖到idx中;
- copy_img_to_window():把idx拷貝到渲染緩存里;
- copy_img_to_img():把idx拷貝到另一幅位圖里;
- copy_window_to_img() :將渲染緩存里的內(nèi)容拷貝到位圖。
虛函數(shù)(一般都是些消息,要覆蓋它以讓消息循環(huán)調(diào)用)
- on_init() :窗口初始化時(shí)調(diào)用;
- on_resize(int, int) :改變大小時(shí)調(diào)用;
- on_idle() :空閑時(shí)調(diào)用;
- on_mouse_move(int, int, unsigned) :鼠標(biāo)移動(dòng)時(shí)調(diào)用;
- on_mouse_button_down(int, int, unsigned) :鼠標(biāo)按下時(shí)調(diào)用;
- on_mouse_button_up(int, int, unsigned) :鼠標(biāo)彈起時(shí)調(diào)用;
- on_key(int, int, unsigned, unsigned) :鍵盤打字時(shí)調(diào)用;
- on_draw() :窗口重繪時(shí)調(diào)用。
三、結(jié)語
platform_support 的功能不僅僅是這么多,除此之外,他還能使用控件,等等。但很多時(shí)候,成熟的應(yīng)用是不會(huì)使用它的,因?yàn)樗庋b了太多,雖然保證了跨平臺(tái)性,卻缺乏了自由性。platform_support 的主要作用是測(cè)試圖像和修改圖像,方便工作和移植……還有,方便初學(xué)者入門……