这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 按照GDI 操作后,发现的小问题。。。。

共8条 1/1 1 跳转至

按照GDI 操作后,发现的小问题。。。。

菜鸟
2010-09-04 00:54:37     打赏

按照GDI 弟20页的例程操作后,原样输入代码,发现不能运行。

看看其他的文档后,发现:

在一开始声明     VMINT  layer_hdl[2]={0};后,
在下面代码中的创建层就没必要写了,因为会发生冲突
static void draw_hello(void)
{/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改后的例程
 VMINT  screen_width=vm_graphic_get_screen_width();
 VMINT  screen_height=vm_graphic_get_screen_height();
 VMUINT8  *layer_buffer=NULL, *res=NULL;
 VMINT  size=0,  handle=0;

 ///创建层
 //layer_hdl[0]=vm_graphic_create_layer(0,0,screen_width,screen_height,-1);
 //layer_hdl[1]=vm_graphic_create_layer(0,0,screen_width,screen_height,TRANS_COLOR);//第二层有穿透色

 ///获取基层缓冲
 layer_buffer=vm_graphic_get_layer_buffer(layer_hdl[0]);
 ///绘制基层
 vm_graphic_set_clip(0,0,screen_width,screen_height);
 res=vm_load_resource("bg.gif",&size);
 if(res==NULL)
 {
  //资源加载失败,释放系统资源,退出应用;
  vm_exit_app();
  return;
 }
。。。。。
}

导致
 //绘制第二层
 vm_graphic_set_clip(0,0,240,320);
 vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[1]),0,0,vm_ucs2_string("Hello world!"),vm_wstrlen(vm_ucs2_string("Hello World!")),VM_COLOR_RED);
 中的第一个参数vm_graphic_get_layer_buffer(layer_hdl[1])失败。。。。可能是冲突了吧。

如果将创建层哪一步注释掉,就好了。
请高人指导。




关键词: 按照     操作     发现     问题     graphic     layer    

院士
2010-09-04 22:23:33     打赏
2楼

请耐心等待


菜鸟
2010-09-06 12:30:42     打赏
3楼
哪里来的GDI,我没找到,可以给我一份吗?
thx

菜鸟
2010-09-06 14:04:44     打赏
4楼

static void draw_hello(void)
{
 VMINT  screen_width = -1;
 VMINT  screen_height = -1;
 VMUINT8  *layer_buffer = NULL, *res = NULL, *res_cvs = NULL;
 VMINT  res_size = -1,  handle= -1;
 struct frame_prop* img_prop = NULL;
 screen_width = vm_graphic_get_screen_width();
 screen_height = vm_graphic_get_screen_height();
 ///创建层
 layer_hdl[0] = vm_graphic_create_layer(0, 0, screen_width, screen_height, -1);
 layer_hdl[1] = vm_graphic_create_layer(0, 0, screen_width, screen_height, TRANS_COLOR);//第二层有穿透色
 
 //获取基层缓冲
 layer_buffer = vm_graphic_get_layer_buffer(layer_hdl[0]);
 vm_graphic_fill_rect(layer_buffer, 0, 0, screen_width, screen_height, VM_COLOR_WHITE, VM_COLOR_BLACK);
 //绘制基层
 vm_graphic_set_clip(0, 0, screen_width, screen_height);
 res=vm_load_resource("bg.gif", &res_size);
 if(res==NULL)
 {
  //资源加载失败,释放系统资源,退出应用;
  vm_exit_app();
  return;
 }
 handle = vm_graphic_load_image(res, res_size);
 if (0 > handle)
 {
  vm_free(res);
  return;
 }
 res_cvs = vm_graphic_get_canvas_buffer(handle);
 img_prop = vm_graphic_get_img_property(handle, 1);
 vm_graphic_blt(layer_buffer, 10, 10, res_cvs, 0, 0, img_prop->width, img_prop->height, 1);
 
 vm_graphic_set_clip(0, 0, screen_width, screen_height);
 vm_graphic_clear_layer_bg(layer_hdl[1]);
  vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[1]),10,img_prop->height + 10,
  vm_ucs2_string("Hello world!"),vm_wstrlen(vm_ucs2_string("Hello World!")),VM_COLOR_RED);

 vm_graphic_flush_layer(layer_hdl, 2);
}
我处理的时候好像没问题,呵呵。。


助工
2010-09-06 18:19:45     打赏
5楼
hi,wohuole,

   不知道你说的

vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[1]),0,0,vm_ucs2_string("Hello world!"),vm_wstrlen(vm_ucs2_string("Hello World!")),VM_COLOR_RED);
 中的第一个参数vm_graphic_get_layer_buffer(layer_hdl[1])失败。。。。

失败到底是怎么失败了,有什么error info吗?

至少声明层,和创建层两个都是必须的
声明的是 层的handle ,而创建层 才是具体的有层,把层和handle对应起来

菜鸟
2010-09-06 23:08:02     打赏
6楼

我是通过
 if(vm_graphic_get_layer_buffer(layer_hdl[1])==NULL)
 {
 vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[0]),70,80,vm_ucs2_string("Helorld!"),vm_wstrlen(vm_ucs2_string("Helorld!")),VM_COLOR_RED);
 }
验证的。
因为程序执行到if语句内部了,所以我判断没成功。不知道合理吧?

我再回去读读文档,理解一下你说的,谢谢;


助工
2010-09-09 13:41:31     打赏
7楼

一般可以通过layer handle来判断是否创建成功,在创建layer时,vm_graphic_create_layer()返回值小于0,表示创建layer失败;否则成功。


菜鸟
2010-09-09 16:35:47     打赏
8楼
同问,经常遇到这样古怪问题

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]