请教:brew画字问题

BuleRiver 2010-10-25 05:27:06
大家好:我写了一个简单的程序来练习剪切板的用法,建立了两个工程,第一个工程填充数据,第二个工程复制数据:
第一个工程的源码:

static void test_SetData(ShareData_Set* pMe)
{
int ret = 0;
ShareData data;
data.a = 1;
data.b = 2;
MEMSET(data.buf, 0, sizeof(data.buf));
data.buf[0] = 'a';
data.buf[1] = 'b';
data.buf[2] = 'c';
data.buf[3] = 'd';
data.buf[4] = 'e';
ret = ICLIPBOARD_SetData(pMe->m_pClipboard, FGTIAN_DATA_FORMAT, &data, sizeof(data));
if (ret)
{
DBGPRINTF("ICLIPBOARD_SetData error: %d", ret);
}

// 启动past程序,然后发送一个消息过去
ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_SHAREDATA_PASTE);
ISHELL_PostEvent(pMe->a.m_pIShell, AEECLSID_SHAREDATA_PASTE, EVT_USER_PASTE, 0, 0);
}

源码很简单,就是在剪切板上设置一些数据,然后调用ISHELL_StartApplet()来启动第二个程序,并调用ISHELL_PostEvent()发送消息EVT_USER_PASTE告诉它可以复制数据了。

第二个程序的源码:

case EVT_USER_PASTE:
test_PasteData(pMe);
return TRUE;

static void test_PasteData(ShareData_Paste* pMe)
{
ShareData data;
char buf[64];
AECHAR display[64] = {0};
int len = sizeof(data);
MEMSET(&data, 0, sizeof(data));
ICLIPBOARD_GetData(pMe->m_pClipboard, FGTIAN_DATA_FORMAT, &data, &len);
SPRINTF(buf, "a = %d, b = %d, buf: %s", data.a, data.b, data.buf);
STRTOWSTR(buf, display, sizeof(display));
IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);
IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_NORMAL, display, -1, 0, 0, 0, IDF_ALIGN_MIDDLE);
IDISPLAY_Update(pMe->a.m_pIDisplay);
}

上面的源码意思是,当接收到EVT_USER_PASTE消息后,把数据打印到屏幕上。
以上一切正常。

在第二个程序退出的时候,我做了这样的操作:

case AVK_CLR:
{
ISHELL_PostEvent(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET, EVT_USER_CLOSED, 0, 0);
ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE);
return TRUE;
}

而第一个程序接收到消息EVT_USER_CLOSED后的操作是:

case EVT_USER_CLOSED:
{
PrintInfo(pMe, L"the second applet closed");
return TRUE;
}
static void PrintInfo(ShareData_Set* pMe, AECHAR* text)
{
IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);
IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_NORMAL, text, -1, 0, 0, 0, IDF_ALIGN_MIDDLE);
IDISPLAY_Update(pMe->a.m_pIDisplay);
}

问题就出在上面:我本来想在屏幕上显示“the second applet closed”,但是却没有显示出来。
请大家指点。谢谢!!!
...全文
448 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BuleRiver 2010-10-27
  • 打赏
  • 举报
回复
问题已经解决。
mutouji 2010-10-26
  • 打赏
  • 举报
回复
你处理suspend消息后才能不被关闭。
mutouji 2010-10-26
  • 打赏
  • 举报
回复
你的应用其实是挂起状态(很多手机应该会关掉他吧- -!),如果不加那句,程序也能执行,只是好像画屏动作得在EVT_APP_START事件后才能正确吧,这点记得不太清楚了。你可以试试,同时检查下画屏函数正确不
BuleRiver 2010-10-26
  • 打赏
  • 举报
回复
并且我清屏的调用成功了
mutouji 2010-10-26
  • 打赏
  • 举报
回复
建议你的PrintInfo函数改成写log文件,这样应该就能看到是不是执行了,这样也不用加
ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET);这么一句多余的话了
BuleRiver 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mutouji 的回复:]
o(∩_∩)o 哈哈,估计你犯了一个小错误
改成
case AVK_CLR:
{
ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET);

ISHELL_PostEvent(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET, EVT_USER_CLOSED, 0, 0)……
[/Quote]
谢谢您的回复,谢谢!!!
但是我的第一个程序并没有退出,还需要调用ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET)吗?
mutouji 2010-10-26
  • 打赏
  • 举报
回复
o(∩_∩)o 哈哈,估计你犯了一个小错误
改成
case AVK_CLR:
{
ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET);

ISHELL_PostEvent(pMe->a.m_pIShell, AEECLSID_SHAREDATA_SET, EVT_USER_CLOSED, 0, 0);
ISHELL_CloseApplet(pMe->a.m_pIShell, FALSE);
return TRUE;
}
也就是多加一句启动命令。
但我想,如果你是做剪切板,那根本不需要在屏幕打印信息,不加这句则程序流程执行更正确

BuleRiver 2010-10-26
  • 打赏
  • 举报
回复
我对它的处理仅仅是返回了TRUE:

case EVT_APP_SUSPEND:
return(TRUE);
BuleRiver 2010-10-26
  • 打赏
  • 举报
回复
应该如何处理suspend消息呢?

949

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧