QNX下Photon编程二简单例子Word文档下载推荐.docx
《QNX下Photon编程二简单例子Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《QNX下Photon编程二简单例子Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
选择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类型。
下面添加相应事件代码:
2.aboutdlg_setup(
*link_instance,
link_instance
link_instance,
PtSetResource(
ABW_about_version,
Pt_ARG_TEXT_STRING,
"
1.00"
0);
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修改:
win_ctr
0;
2.PtWidget_t
*win[5];
3.int
4.newwin_setup(
char
buffer[40];
’unreferenced’
10.
apinfo;
11.
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
(
==
17.
18.
19.
save
window-module
instance
pointer
20.
win[win_ctr]
link_instance;
21.
sprintf(
buffer,
Window
%d"
+
1
22.
win[win_ctr],
Pt_ARG_WINDOW_TITLE,
23.
0
24.
win_ctr++;
25.
26.
27.
color_change.c修改为:
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
8.int
9.color_change(
i,
prev;
*this_window;
Get
current
window.
this_window
ApGetInstance(
ApName(
ABN_btn_red
ApGetWidgetPtr(
this_window,
ABN_color_rect
),
Pt_ARG_FILL_COLOR,
Pg_RED,
else
ABN_btn_green
Pg_GREEN,
ABN_btn_blue
28.
Pg_BLUE,
29.
ABN_btn_prev
30.
Here
we
use
31.
pointers
saved
newwin_setup
update
32.
window
previous
33.
provided
hasn’t
been
closed.
34.
Determine
which
is
this
35.
prev
36.
for
i
<
i++
37.
win[i]
38.
-
1;
39.
break;
40.
41.
42.
If
still
exists,
its
background
43.
color.
44.
!
-1
&
win[prev]
45.
base_clr++;
46.
(base_clr
>
5)
47.
48.
49.
win[prev],
50.
colors[base_clr],
51.
52.
53.
54.
55.
newwin_close.c修改为:
1.extern
2.extern
5.newwin_close(
PhWindowEvent_t
*we
cbinfo->
cbdata;
i;
process
WM
close
events
we->
event_f
Ph_WM_CLOSE
okay
it’s
so
who
it?
NULL;
编译运行,查看效果。