专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Brew

请问:brew画字有关问题

发布时间:2010-05-30 20:18:22 文章来源:www.iduyao.cn 采编人员:星星草
请教:brew画字问题
大家好:我写了一个简单的程序来练习剪切板的用法,建立了两个工程,第一个工程填充数据,第二个工程复制数据:
第一个工程的源码:
C/C++ code

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告诉它可以复制数据了。

第二个程序的源码:
C/C++ code

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消息后,把数据打印到屏幕上。
以上一切正常。

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

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后的操作是:
C/C++ code

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”,但是却没有显示出来。
请大家指点。谢谢!!!

------解决方案--------------------
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;
}
也就是多加一句启动命令。
但我想,如果你是做剪切板,那根本不需要在屏幕打印信息,不加这句则程序流程执行更正确

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: