当前位置:  技术问答>linux和unix

MiniGUI在Linux上使用的问题?

    来源: 互联网  发布时间:2017-04-16

    本文导语:  MiniGUI相关的问题找不到对应的问题,很奇怪飞漫公司为什么不开设一个MiniGUI讨论论坛,估计这里有很多人使用过MiniGUI,所以在这里请教大家,我的问题是: 1)我在MinGUI官网上下载MiniGUI相关组件,编译安装配置好后...

MiniGUI相关的问题找不到对应的问题,很奇怪飞漫公司为什么不开设一个MiniGUI讨论论坛,估计这里有很多人使用过MiniGUI,所以在这里请教大家,我的问题是:

1)我在MinGUI官网上下载MiniGUI相关组件,编译安装配置好后,可以使用qvfb正常运行MiniGUI安装包中带有的一些sample code(如:helloworld),可以正常显示UI.

2) 现在我把helloworld.c拷贝一份,修改为test.c, 然后把里面的函数:
int MiniGUIMain (int argc, const char* argv[])
名称修改为:
extern "C" int LoadUI(),
并增加一个函数做为测试:
extern "C" int Add(int a, int b)
{
   return a+b;
}

我想把test.c编译为.so文件,并且该文件中导出两个函数,一个为原来显示的UI函数,一个是辅助测试函数,增加一个test.h头文件,供其他模块调用.so文件时使用,接着把test.c编译为tset.so, OK.

3) 增加一个Main.c文件,在该文件中调用.so中的两个导出函数LoadUI(), Add(), 然后编译为可执行文件Main, OK

4) 在Linux上用GDB调试,发现Add()执行成功,而LoadUI会死在HelloWinProc()的return DefaultMainWinProc(hWnd, message, wParam, lParam);中,调试过程发现,在调用CreateMainWindow()函数中会引发MSG_NCCREATE消息,而该消息是在窗口创建成功之前触发的,跟MFC中类似,该消息会调用窗口过程函数,就是test.c中的静态函数HelloWinProc(),而该函数中没有处理MSG_NCCREATE消息,所有交由默认的窗口过程执行,也就是:DefaultMainWinProc(hWnd, message, wParam, lParam);函数,然而,当执行该函数的时候会导致:Segmentation fault.
补充:hWnd, messgae均都有意义的值.
郁闷,找了一天都没有找到原因,特来请教大家.


以下是关键源代码:

static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;

    syskey = "";

    switch (message) {
        case MSG_CREATE:
            make_welcome_text ();
            SetTimer (hWnd, 100, 200);
            break;

        case MSG_TIMER:
            sprintf (msg_text, HL_ST_TIMER, 
                            GetTickCount ());
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;
            
        case MSG_LBUTTONDOWN:
            strcpy (msg_text, HL_ST_LBD);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;

        case MSG_LBUTTONUP:
            strcpy (msg_text, HL_ST_LBU);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;

        case MSG_RBUTTONDOWN:
            strcpy (msg_text, HL_ST_RBD);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;

        case MSG_RBUTTONUP:
            strcpy (msg_text, HL_ST_RBU);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;

        case MSG_PAINT:
            hdc = BeginPaint (hWnd);
            DrawText (hdc, welcome_text, -1, &welcome_rc, DT_LEFT | DT_WORDBREAK);
            DrawText (hdc, msg_text, -1, &msg_rc, DT_LEFT | DT_WORDBREAK);
            EndPaint (hWnd, hdc);
            return 0;

        case MSG_SYSKEYDOWN:
            syskey = HL_ST_SYS;
        case MSG_KEYDOWN:
            if(last_key == wParam)
                last_key_count++;
            else
            {
                last_key = wParam;
                last_key_count = 1;
            }
            sprintf (msg_text, HL_ST_KEYD, 
                            wParam, syskey, last_key_count);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            return 0;

        case MSG_KEYLONGPRESS:
            sprintf (msg_text, HL_ST_KEYLONG, wParam);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;

        case MSG_KEYALWAYSPRESS:
            sprintf (msg_text, HL_ST_KEYALWAY, wParam);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            break;

        case MSG_KEYUP:
            sprintf (msg_text, HL_ST_KEYU, wParam);
            InvalidateRect (hWnd, &msg_rc, TRUE);
            return 0;

        case MSG_CLOSE:
            KillTimer (hWnd, 100);
            DestroyMainWindow (hWnd);
            PostQuitMessage (hWnd);
            return 0;
    }

    return DefaultMainWinProc(hWnd, message, wParam, lParam);
}

extern "C" int LoadUI()
{
    MSG Msg;
    HWND hMainWnd;
    MAINWINCREATE CreateInfo;

#ifdef _MGRM_PROCESSES
    JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);
#endif

    CreateInfo.dwStyle = 
        WS_VISIBLE | WS_BORDER | WS_CAPTION;
    CreateInfo.dwExStyle = WS_EX_NONE;
    CreateInfo.spCaption = HL_ST_CAP;
    CreateInfo.hMenu = 0;
    CreateInfo.hCursor = GetSystemCursor(0);
    CreateInfo.hIcon = 0;
    CreateInfo.MainWindowProc = HelloWinProc;
    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = g_rcScr.right;
    CreateInfo.by = g_rcScr.bottom;
    CreateInfo.iBkColor = COLOR_lightwhite;
    CreateInfo.dwAddData = 0;
    CreateInfo.hHosting = HWND_DESKTOP;
    
    hMainWnd = CreateMainWindow (&CreateInfo);
    
    if (hMainWnd == HWND_INVALID)
        return -1;

    ShowWindow(hMainWnd, SW_SHOWNORMAL);

    while (GetMessage(&Msg, hMainWnd)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    MainWindowThreadCleanup (hMainWnd);

    return 0;
}

extern "C" int Add(int a, int b)
{
return a+b;
}


|
编译应用程序时,虽然不需要管、但是编译器还是使用了默认的链接脚本的,在链接脚本中指定了程序的入口点,最后调用用户的main(),MiniGUI的入口点是MiniGUIMain,MiniGUI是不是做了什么处理,然后你的情况和这有关系?

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • minigui界面设计
  • 谁能提供一点miniGUI的学习资料给我?
  • 如何安装minigui...?
  • 嵌入式图形用户界面系统 MiniGUI
  • 谁能给我一个minigui中listview的例子?急!!!!
  • 请问一下在44B0上用miniGUI做界面开发的可能性 iis7站长之家
  • 用MINIGUI写的程序,怎么进行交叉编译呀?
  • minigui中对话框不能创建???????
  • minigui
  • 关于minigui
  • 嵌入式系统的linux触摸屏图形用户界面用minigui怎么做?
  • 想在Fedora上用Minigui,要安qvfb但是老不成功,求助
  • 请问一下在44B0上用miniGUI做界面开发的可能性
  • 请教如何在MINIGUI下获得当前光标的位置?
  • MINIGUI 编译HELLOWORLD出错 找不到库文件。。。
  • 请问minigui2.x是免费的吗?可否到网上下载?
  • minigui安装在redhat9.0下不成功,怎么办?
  • 在linux下用过MiniGUI的请进!!!!!!!!!
  • 界面开发,除了QT、GTK、miniGUI等,就没有别的了吗?文本模式下用什么做界面?
  • 编译miniGUI程序出错,cannot find -lminigui


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,