QNX下Photon编程二简单例子.docx

上传人:b****8 文档编号:10576341 上传时间:2023-02-21 格式:DOCX 页数:13 大小:172.60KB
下载 相关 举报
QNX下Photon编程二简单例子.docx_第1页
第1页 / 共13页
QNX下Photon编程二简单例子.docx_第2页
第2页 / 共13页
QNX下Photon编程二简单例子.docx_第3页
第3页 / 共13页
QNX下Photon编程二简单例子.docx_第4页
第4页 / 共13页
QNX下Photon编程二简单例子.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

QNX下Photon编程二简单例子.docx

《QNX下Photon编程二简单例子.docx》由会员分享,可在线阅读,更多相关《QNX下Photon编程二简单例子.docx(13页珍藏版)》请在冰豆网上搜索。

QNX下Photon编程二简单例子.docx

QNX下Photon编程二简单例子

QNX下Photon编程

(二)简单例子

这是一个系列讲座,从官方文档《photon_prog_guide》而来,主要讲述QNX下的GUI编程-Photon编程,主要针对初学者。

 

第一个例子:

首先我们创建一个QNXPhotonAppbuilderproject,这时会自动打开PhAB工具。

PhAB工具界面如下所示:

 

 

我们在弹出的对话框中选择新的应用程序样式为basewindow。

 

我们在右侧的widgetpalette中选择label

 并回到我们的窗口上点击一下,发现新创建了一个label,之后我们到资源控制面板并选择label的LabelText属性,修改为“HelloWorld!

 

在PhAB中选择Build→GenerateUI,这时将生成界面代码,然后回到QNXMomenticsIDE,编译工程并下载到目标机运行,可以查看到刚才编辑的效果。

 

 

第二个例子:

下面我们在窗口上添加一个Button,并修改其BevelWidth属性为6,Font属性为TextFont,设置HorzAlignment属性为Pt_CENTER,在BasicFlag属性中添加Pt_TOP_INLINE、Pt_BOTTOM_INLINE、Pt_LEFT_INLINE、Pt_RIGHT_INLINE属性、修改Color:

Fill属性,查看修改后的效果。

 

Label控件可以通过设置LabelType属性为Pt_IMAGE使其显示一个图片而不显示文字,选择LabelImage属性可以编辑Label的显示图片。

 

添加一个PtMultiTextWidget显示一个多行文本。

编辑TextString属性可以修改显示的文字。

 

添加一个PtListWidget可以显示一个选择列表。

修改ListofItems可以修改选择项。

 

很多时候我们可能需要创建相同表现的widget,此时我们可以创建一个widget模板。

选择一个widget并从右键菜单选择DefineTemplete创建一个widget模板。

当成功创建一个模板widget之后我们可以从PhAB的window菜单选择ShowTempletes显示模板并将其添加到我们的界面中去。

 

第三个例子:

 

使用PhAB,我们可以通过两步创建菜单:

1.menubutton,点击时显示菜单;

2.menumodule,包含菜单项

 

在一个应用程序中添加一个MenuBar,并添加两个MenuButton,设置它们的instantname分别为base_file和base_help

 ,同时设置LabelText属性为File和Help。

 

 

在Project菜单中选择AddMenu,并将其name修改为filemenu,修改MenuItem添加菜单项,并将新菜单项的instname修改为file_new,同样创建file_open,file_save,之后再新建一个Separator菜单项,最后建立一个file_quit菜单项。

 

为了在点击File菜单按钮时显示file菜单,我们需要将Arm回调关联到这个按钮。

选择base_file按钮的Arm回调,由于我们想弹出一个菜单,选择Menu。

之后在Name下拉菜单中选择我们的filemenu。

回到filemenu的编辑,我们选择file_quit菜单项,添加一个Quit回调函数。

 

选择Build->GenerateUI生成界面代码,然后在PhAB中选择菜单Window->ShowProject看到文件列表中的Quit.c,选择他并点击Edit按钮,或者直接双击来修改quit函数。

 

[cpp] viewplain copy

1.int  

2.Quit( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )  

3.    {  

4.    /* eliminate 'unreferenced' warnings */  

5.    widget = widget, apinfo = apinfo, cbinfo = cbinfo;  

6.    PtExit( EXIT_SUCCESS );  

7.    return( Pt_CONTINUE );  

8.    }  

之后运行程序观看效果。

 

 

第四个例子:

接上面的程序,我们创建一个helpmenu菜单,并且建立菜单项help_help,help_about,同时我们建立help_about菜单项的callback为一个名为aboutdlg的对话框对象(由于对话框现在还不存在,我们只能在列表框中手动输入对话框名称)。

在setupfunction框中,我们输入aboutdlg_setup,这里指定了aboutdlg在实例化时将要调用的函数。

同时对话框的Location属性我们设置为CenterScreen。

最终设置的效果如下图:

 

选择apply之后PhAB弹出一个对话框让我们选择aboutdlg应该是什么类型,我们选择Plain类型。

 

下面我们选择aboutdlg对话框,放两个PtLabel对象到对话框上,再放一个按钮。

设置一个Label名字为about_version并什么都不显示,另一个显示文字“aboutthisdemo”。

Button的名字为about_done,显示文字“Done”。

并将该按钮的activecallback设置为Done类型。

 

下面添加相应事件代码:

 

[cpp] viewplain copy

1.int  

2.aboutdlg_setup( PtWidget_t *link_instance, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )  

3.    {  

4.    /* eliminate 'unreferenced' warnings */  

5.    link_instance = link_instance, apinfo = apinfo, cbinfo = cbinfo;  

6.    PtSetResource( ABW_about_version, Pt_ARG_TEXT_STRING, "1.00", 0);  

7.  

8.    return( Pt_CONTINUE );  

9.    }  

编译代码并执行可以查看效果。

 

第五个例子:

 

接上面的例子,我们从Project菜单选择新建一个Window,选择Plain样式并把Window的名字修改为newwin。

从新建的newwin的callback中我们选择windowmanager,添加newwin_close函数,回到Resource控制面板选择Notify,并确认选择Ph_WM_CLOSE标志。

 

把主窗口的filenew菜单项的回调修改为对窗口newwin,并选择Setup函数为newwin_setup。

 

在newwin中添加一个PtRect、四个PtButton并显示如下:

 

 

修改上面一行三个按钮中:

最左边那个名字为btn_red,显示文字Red,添加ActiveCallback为color_change函数。

中间那个名字为btn_green,显示文字Green,添加ActiveCallback为color_change函数。

最右边那个名字为btn_blue,显示文字Blue,添加ActiveCallback为color_change函数。

 

下面一个最大的按钮的text修改为“Changepreviouswindow'scolor”,名字为btn_prev,回调同样是color_change函数。

 

最后界面如图:

 

 

下面生成界面代码并修改:

 

newwin_setup.c修改:

 

[cpp] viewplain copy

1.int win_ctr = 0;  

2.PtWidget_t *win[5];  

3.int  

4.newwin_setup( PtWidget_t *link_instance, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )  

5.    {  

6.    /* eliminate 'unreferenced' warnings */  

7.  

8.    char buffer[40];  

9.    /* eliminate ’unreferenced’ warnings */  

10.    link_instance = link_instance, apinfo = apinfo;  

11.    cbinfo = cbinfo;  

12.    /* Note:

 Returning Pt_END in a prerealize setup 

13.    function tells PhAB to destroy the module 

14.    without realizing it */  

15.    /* allow only 5 windows max */  

16.    if ( win_ctr == 5 ) {  

17.    return( Pt_END );  

18.    }  

19.    /* save window-module instance pointer */  

20.    win[win_ctr] = link_instance;  

21.    sprintf( buffer, "Window %d", win_ctr + 1 );  

22.    PtSetResource( win[win_ctr], Pt_ARG_WINDOW_TITLE,  

23.    buffer, 0 );  

24.    win_ctr++;  

25.      

26.    return( Pt_CONTINUE );  

27.    }  

 

color_change.c修改为:

 

[cpp] viewplain copy

1.PgColor_t colors[5] = {Pg_BLACK, Pg_YELLOW,  

2.Pg_MAGENTA, Pg_CYAN,  

3.Pg_GREEN};  

4.int base_clr = -1;  

5.extern int win_ctr;  

6.extern PtWidget_t *win[5];  

7.  

8.int  

9.color_change( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )  

10.    {  

11.    int i, prev;  

12.    PtWidget_t *this_window;  

13.    /* eliminate ’unreferenced’ warnings */  

14.    widget = widget, apinfo = apinfo, cbinfo = cbinfo;  

15.    /* Get a pointer to the current window. */  

16.    this_window = ApGetInstance( widget );  

17.    if ( ApName( widget ) == ABN_btn_red ) {  

18.    PtSetResource(  

19.    ApGetWidgetPtr( this_window, ABN_color_rect ),  

20.    Pt_ARG_FILL_COLOR, Pg_RED, 0 );  

21.    } else if ( ApName( widget ) == ABN_btn_green ) {  

22.    PtSetResource(  

23.    ApGetWidgetPtr( this_window, ABN_color_rect ),  

24.    Pt_ARG_FILL_COLOR, Pg_GREEN, 0 );  

25.    } else if ( ApName( widget ) == ABN_btn_blue ) {  

26.    PtSetResource(  

27.    ApGetWidgetPtr( this_window, ABN_color_rect ),  

28.    Pt_ARG_FILL_COLOR, Pg_BLUE, 0 );  

29.    } else if ( ApName( widget ) == ABN_btn_prev ) {  

30.    /* Note:

 Here we use the window-module instance 

31.    pointers saved in newwin_setup to update 

32.    the window previous to the current window 

33.    provided it hasn’t been closed. 

34.    Determine which window is previous to this window. */  

35.        prev = -1;  

36.        for ( i = 0; i < win_ctr; i++ ) {  

37.        if ( win[i] == this_window ) {  

38.        prev = i - 1;  

39.        break;  

40.        }  

41.        }  

42.        /* If the window still exists, update its background 

43.        color. */  

44.        if ( prev !

= -1 && win[prev] ) {  

45.        base_clr++;  

46.        if (base_clr >= 5) {  

47.        base_clr = 0;  

48.        }  

49.        PtSetResource( win[prev], Pt_ARG_FILL_COLOR,  

50.        colors[base_clr], 0 );  

51.        }  

52.        }  

53.        return( Pt_CONTINUE );  

54.      

55.    }  

 

 

newwin_close.c修改为:

 

[cpp] viewplain copy

1.extern int win_ctr;  

2.extern PtWidget_t *win[5];  

3.  

4.int  

5.newwin_close( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )  

6.    {  

7.    PhWindowEvent_t *we = cbinfo->cbdata;  

8.    int i;  

9.    /* eliminate ’unreferenced’ warnings */  

10.    apinfo = apinfo;  

11.    /* only process WM close events */  

12.    if ( we->event_f !

= Ph_WM_CLOSE ) {  

13.    return( Pt_CONTINUE );  

14.    }  

15.    /* okay it’s a close so who is it?

 */  

16.    for ( i = 0; i < win_ctr; i++ ) {  

17.    if ( win[i] == widget ) {  

18.    win[i] = NULL;  

19.    break;  

20.    }  

21.    }  

22.    return( Pt_CONTINUE );  

23.    }  

 

编译运行,查看效果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1