请问TK豪客来官网 菜单的这个菜单怎么不显示了

在mfc中,设置一个隐藏菜单栏,工具栏,状态栏,最大化、最小化、关闭按钮的窗体 - tk的博客 - 编程中国
在mfc中,设置一个隐藏菜单栏,工具栏,状态栏,最大化、最小化、关闭按钮的窗体
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CFrameWnd::OnCreate(lpCreateStruct) == -1)&&return -1;// 去掉标题栏/*if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP&& | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||&& !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))*/if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP&&| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)){&& TRACE0("Failed to create toolbar\n");&&return -1;&&&&&&// fail to create}// 去掉状态栏/*if (!m_wndStatusBar.Create(this) ||&& !m_wndStatusBar.SetIndicators(indicators,&&&& sizeof(indicators)/sizeof(UINT))){&& TRACE0("Failed to create status bar\n");&& return -1;&&&&&& // fail to create}*/// TODO: Delete these three lines if you don't want the toolbar to//&& be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);// 设置标题--标题显示为:无标题-天志的导航//this-&SetTitle("天志的导航");// 隐藏最大化,最小化,关闭按钮ModifyStyle(WS_SYSMENU, 0);// 隐藏标题栏ModifyStyle(WS_CAPTION, 0);// 去掉菜单栏SetMenu(NULL);// 全屏显示RECT::GetWindowRect(::GetDesktopWindow(), &rc);&&this-&MoveWindow(&rc);return 0;}&去掉标题栏:在OnCreate函数中,添加如下代码:ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);单文档,多文档中都是如此子窗体为:CMDIChildWnd的子类。在多文档界面中,去掉菜单栏:在子窗体的OnMDIActivate函数中,添加如下行:AfxGetMainWnd()-&SetMenu(NULL);父窗体的最大化显示:在子窗体的OnCreateClient函数中,添加如下行:RECT::GetWindowRect(::GetDesktopWindow(), &rc);&this-&MoveWindow(&rc);子窗体的最大化显示:重写ActivateFrame函数,在行数中添加:nCmdShow = SW_SHOWMAXIMIZED;&&&关闭子窗体是去掉保存提示:在Doc类中,重写SaveModified函数,代码为:return TRUE;下面是自己实验后的代码:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){&&&&if (CFrameWnd::OnCreate(lpCreateStruct) == -1)&&&&&&&&return -1;&&&&/*&&&&if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP&&&&&&&&| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||&&&&&&&&!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) &&&&{&&&&&&&&TRACE0("Failed to create toolbar\n");&&&&&&&&return -1;&&&&&&// fail to create&&&&}&&&&if (!m_wndStatusBar.Create(this) ||&&&&&&&&!m_wndStatusBar.SetIndicators(indicators,&&&&&&&&&&sizeof(indicators)/sizeof(UINT)))&&&&{&&&&&&&&TRACE0("Failed to create status bar\n");&&&&&&&&return -1;&&&&&&// fail to create&&&&}&&&&// TODO: Delete these three lines if you don't want the toolbar to&&&&//&&be dockable&&&&m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);&&&&EnableDocking(CBRS_ALIGN_ANY);&&&&DockControlBar(&m_wndToolBar);&&&&return 0; */}&
浏览3062次
(486)(309)(284)(260)(216)(191)(189)(182)(162)(155)1943人阅读
编写Tcl脚本之前,必须学会两件事:
1).必须学会Tcl语法,其内容是决定如何解析命令规则;
<span style="font-size:14 color:#).必须掌握在脚本中使用的独立命令(Tcl提供了近百条内建命令,Tk提供几十条)。
第一部分 Tcl语言基础
1.1.脚本、命令和单词的基本概念
&&&&&&& Tcl脚本包含一条或多条命令。命令通过换行符或分号隔开。每条命令都包含一个或多个单词,第一个单词是命令名,其他单词
是命令的参数。而Tcl处理一个命令分为两步:解析和执行。在解析时,Tcl解释器将命令分解为单词,并执行替换。Tcl解释器只是
进行简单的字符串操作。例如:将字符串$input用input变量中存放的字符串代替。在执行阶段,命令中的各个单词都有了具体的
意义。Tcl把第一个单词作为命令名称,检查这个命令是否已经定义,并且查找完成该命令功能的命令过程。若命令已经定义,Tcl
解释器就调用该命令过程,把命令中的全部单词传递给该过程。命令过程会根据自己的需要来分辨这些单词的意义。也就是说Tcl
的命令由两部分组成,第一部分是命令名,第二部分是命令名后面的若干单词,做为命令的参数。
1.2.脚本执行的过程
1.2.1.命令替换
&&&&&&& 命令解析时的变量替换(把单词中的原始字符替换为另外的&#20540;)。Tcl提供了三种替换形式:变量替换、命令替换、反斜线
替换。Tcl替换的逻辑:
1).Tcl解析一条命令时,只从左向右解析一次,进行一轮替换。每个字符只会被扫描一次。
2).每一个字符只会发生一次替换,而不会对替换后的结果再进行一次扫描替换。
Tcl替换的分类
1).变量替换:由$符号引发,将Tcl变量的&#20540;插入单词中。
2).命令替换:可把一个单词的部分或全部替换为一个命令的结果。命令替换通过方括号表示,会调用括号中的命令。
3).反斜线替换:用于向单词中插入像换行符这样的特殊字符,以及像[、$这样的会被Tcl解析器认为是有特殊含义的字符。
&&&&&&& 有替换就有不替换的情况。Tcl提供了一些方法,可以阻止解析器对$和分号等字符进行特殊处理,这些方法称为引用。
Tcl的引用包括以下两种(反斜线替换也是一种引用):
1).双引号引用:取消其中的单词和命令分隔符的特殊解释。
2).大括号引用:取消其中所有特殊字符的特殊解释。
总结:完成了命令的替换,也就完成了命令的解析。
1.2.2.命令执行
1.3.变量和表达式
1.3.1.变量
Tcl支持两种类型的变量:简单变量(数量变量)和关联数组。
1).简单变量:包含一个名字和一个&#20540;。名字和&#20540;都可以是任意字符串。
&&&&& 变量名命名规则:以一个字母开头,由一些字母、数字和下划线组成。区分大小写。
&&&&& Tcl的内部数据存储。==》高效的内部表达形式。
2).数组:数组是元素的集合,每一个元素是有自己的名称和&#20540;的变量。
&&& 数组元素的名称由两部分组成:数组名和数组中的元素名。数组名和元素名可以是任意字符串。
&&& 数组的语法形式: 数组名(元素名)
&&& 数组是无序的数据结构(在Tcl内部使用一个哈希表存储数组元素)
&&& Tcl列表是有序的数据结构。 &&
1.3.2.表达式
1.4.字符串操作
1.7.流程控制
1. if...elseif...else 结构:
& & if expr1? then? body1&elseif expr2? then? body2&elseif...?&else?bodyN?&
if {$x != 1} {
puts &$x is !=1&
puts &$x is 1&
if {条件1} then{
puts &语句1&
elseif {条件2} then{
puts &语句2&
else { puts &不满足条件1、条件2& }
2. switch 结构:
& &&switch string pattern1 body1 ?pattern2 body2? ... ?patternN bodyN?
& & switch string { pattern1 body1 ?pattern2 body2?...?patternN bodyN? }
switch $x &ONE& &puts ONE=1& &TWO& &puts TWO=2& &default& &puts NO_MATCH&
结果:NO_MATCH
set a &one&
switch $a {
&$b& {puts &MATCH..&}
{puts &MATCH,YEAH! &}
default {puts & NO MATCH&}
结果:MATCH,YEAH!
3.while循环结构:
& &while test body &[test:条件;body:循环体]
while {$x & 5} {
puts &x is $x&
set x [expr {$x + 1}]
puts &exited loop with x equal to $x\n&
输出结果:
exited loop with x equal to 5
下面的例子,可以说明在 循环体内 { } &和 “ ” 的区别:&
while &$x & 5& {
set x [expr {$x + 1}]
if {$x & 7} break
if &$x & 3& continue
puts &x is $x&
puts &exited this loop with X equal to $x&
输出结果:
inter loop before x=1
inter loop before x=2
inter loop before x=3
inter loop before x=4
inter loop before x=5
inter loop before x=6
inter loop before x=7
exited this loop with X equal to 8
4.for循环结构:
& & &for start test next body [start:进入循环前必须执行的语句,test:进入循环的判断,next:循环计数自增加(也可以是其他语句),body:循环体 ]
for {set i 0} {$i & 10} {incr i} {
puts &I inside first loop:$i&
for {set i 3} {$i & 2} {incr i} {
puts &I inside second loop: $i&
I inside first loop:0
I inside first loop:1
I inside first loop:2
I inside first loop:3
I inside first loop:4
I inside first loop:5
I inside first loop:6
I inside first loop:7
I inside first loop:8
I inside first loop:9
5.自定义命令:
proc name args body
proc sum {arg1 arg2} {
set x [expr {$arg1 + $arg2}];
puts & The sum of 2 + 3 is: [sum 2 3]\n\n&
proc for {a b c} {
puts &The for command has been replaced by a puts&;
puts &The arguments were: $a\n$b\n$c\n&
for {set i 1} {$i & 10} {incr i}
输出结果:
The sum of 2 + 3 is: 5
The for command has been replaced by a puts
The arguments were: set i 1
1.9.命名空间
1.10.访问文件
1.11.进程间通信
1.12.错误与异常
1.13.1.创建与使用Tcl脚本库
1.13.2.Tcl内部管理
1.13.3.其他
1.13.3.1.字符串输出:puts
puts &hello,world&
puts {hello,world}
1.13.3.2.变量赋&#20540;:set
注:Tcl是面向字符串的语言。因此,Tcl中的所有变量都可以认为是字符串变量。这个在下面的例子中还会有涉及。
1.13.3.3.变量使用:$
注:expr 是求解表达式的&#20540;,[ ] 将expr 的结果做为一个变量给puts输出。
[expr {$a + $b}]
1.13.3.4.Tcl中的运算符:
& - &减号; &&#43; &加号; & &~ &逐位非;! 非;
& ** 幂; & & * &乘号; & & / &除号; & & &% & 取余;
& && && &左、右移位(必须是整数); & & &小于;&&& &大于;& &= &小于等于;& &&= &大于等于;
& eq &比较两个字符串是否相等; & & &ne &比较两个字符串不等;
& in &check一个字符串是否包含在list中; & & & ni &check一个字符串是否不包含在list中;&
& & &与; & & &^ &异或; & & & &| &或; & & & && &逻辑与; & & & & &|| &逻辑或;
& x?y:z & &if-then-else(与java中的该运算形式是一致的)
expr {$a && 1}
expr {$a && 2}
expr {$p&0? ($p+1) : ($p-1)}
1.13.3.5.Tcl支持的数学函数表达式:
& abs & & & & acos & & & & asin & & & &atan
& atan2 & & bool & & & & &ceil & & & & cos
& cosh & & & double & & entier & & &exp
& floor & & & &fmod & & & &hypot & & & int
& isqrt & & & &log & & & & & log10 & & & max
& min & & & & pow & & & & &rand & & & &round
& sin & & & & &sinh & & & & &sqrt & & & & &srand
& tan & & & & &tanh & & & & &wide
1.13.3.6.Tcl的类型转换函数:
double( ) & & &将一个数字 转换为一个浮点数
int( ) & & & & & & &将一个数字 转换为整数,截取掉小数部分
wide( ) & & & & &将数字转换为宽整数
entier( ) & & & & 实在不明白这个是干啥用的。(-_-~)
注:作为初学者,实在是不明白 wide( ) 、entier( ) 函数是在什么情况下使用。
puts [expr {double(1)}]
puts [expr {int(2.2)}]
puts [expr {wide(3.4)}]
puts [expr {entier(10.00)}]
1.13.3.7.字符串操作:string length
注:参看以下例子,Tcl是将数字、字符串都看做字符串来处理的。不知道是否应该这样理解,若理解的不正确,盼指教!
set b &abcdef&
expr {[string length $b]-2*$x}
set b 12.45
expr {[string length $b]-2*$x}
数字 12.45 被string length 当做字符串处理,得到结果5。当然 string length 可能本来就要将所有变量当做字符串来处理吧。
第二部分 &Tk脚本编写
2.1.Tk概述
2.2.Tk的组件
2.3.主题组件
2.4.字体、位图和图像
2.5.几何管理器
2.6.事件和绑定
2.7.画布组件
2.8.文本组件
2.9.选择与剪贴板
2.10.窗口管理器
2.11.1.焦点、模态交互与自定义对话框
2.11.2.其他
第三部分& Tcl应用程序的编写
3.1.Tcl与C语言的集成原理
3.2.解释器
3.3.Tcl对象
3.4.处理Tcl代码
3.5.访问Tcl变量
3.6.创建新的Tcl命令
3.7.扩展包
3.8.嵌入Tcl
3.10.字符串工具
3.11.哈希表
3.12.列表和字典对象
3.14.事件处理
3.15.文件系统的交互
3.16.操作系统工具
3.18.构建Tcl及其扩展
1.修订于日,修改了文章结构,内容组织。纠正了错误的理解。
& & & & 《TCL/TK入门经典(第二版)》
& & & & 根据 官网的Tutorial教程写的,例子用来熟悉语法。Tcl/Tk入门(下)会做一个东西出来,以检验学习效果。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47454次
积分:1646
积分:1646
排名:第12616名
原创:119篇
测试交流群:
Skype:guangfu1984
Mail:guangfu.
(3)(7)(17)(6)(9)(18)(13)(1)(10)(1)(4)(6)(1)(2)(1)(1)(6)(2)(1)(1)(1)(11)(1)(1)1457人阅读
一、是什么(What)?
TCL(Tool Command Language)是一种脚本语言,一种易于学习的动态程序语言。特点是:跨平台、开源、易扩展。
Tcl Developer Site 站点对Tcl的描述:
& Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, suitable for a very wide
range of uses, including web and desktop applications, networking, administration, testing and many more. Open source and
business-friendly, Tcl is a mature yet evolving language that is truly cross platform, easily deployed and highly extensible.
Tk 是一个跨平台、开放源代码的图形用户界面开发工具。Tk与Tcl一样都是由C函数库实现的。
Tcl Developer Site 站点对Tk的描述:
& Tk is a graphical user interface toolkit that takes developing desktop applications to a higher level than conventional approaches.
Tk is the standard GUI not only for Tcl, but for many other dynamic languages, and can produce rich, native applications that run
unchanged across Windows, Mac OS X, Linux and more.
二、可以干什么(use to do)?
Tcl常被用于快速原型开发、脚本编程、GUI 、测试方面。
Tk则是一个标准GUI工具包,用于程序界面开发。Tcl&Tk都是由一个C函数库实现的。
三、如何开始(how to start)?
& & & & 了解了语言特性和基本语法之后,一边写代码,一边解决遇到的问题。也可以跟着官网的Tutorial学习,或者拿官网的例子来研究。&开发环境
安装,需要从Tcl Developer Site上下载版本。解压缩:tar &-xzvf &packagename.tar.gz、upzip packagename.zip;
预编译:./configure &--prefix=自定义程序安装目录; & &编译:make; & &安装:sudo make install;安装好后,在终端尝试命令:which &tclsh 得到
Tcl解释器的安装路径,which wish得到Tk解释器的安装路径。&而tclsh是Tcl的解释器、wish是Tk的解释器。
四、实验例子
& & & & 以前用Wxwidgets写过图像处理程序的GUI,感觉Wxwidgets就挺好用的。不管是一行行写界面还是用wxSmith、
wxGlade、wxFormBuilder工具画界面,都很流畅。下面的例子用Tk做类&#20284;的界面,目的是熟悉Tcl&Tk,做对比式学习。
下面是Tk写的一个界面,包括一个菜单栏和几个菜单项。&
#! /usr/bin/wish -f
# Name:guiDemo.tcl
# Purpose:tcl/tk gui demo
# Author:Bruce
# Created:
# Copyright:none
# License:none
#Before you Start
option add *tearoff 0
#Creating a Menubar
menu .win.menubar
.win configure -menu .win.menubar
#Adding Menus
set m .win.menubar
menu $m.文件
menu $m.编辑
$m add cascade -menu $m.文件 -label 文件
$m add cascade -menu $m.编辑 -label 编辑
$m add cascade -label Help -menu [menu $m.help]
#Adding Menu Items
$m.文件 add command -label &新建& -command &..&
$m.文件 add command -label &打开& -command &..&
$m.文件 add command -label &关闭& -command &..&
$m.编辑 add command -label &最大化& -command &..&
$m.编辑 add command -label &最小化& -command &..&
下面是使用Wxwidgets库的界面程序代码,只包含了菜单栏和菜单项。
#include &Main.h&
#include &wx/bitmap.h&
#include &wx/intl.h&
#include &wx/image.h&
#include &wx/string.h&
#include &wx/msgdlg.h&
#include &wx/wxprec.h&
#include &wx/filedlg.h&
#include &wx/wx.h&
#include &wx/frame.h&
enum wxbuildinfoformat
short_f, long_f
wxString wxbuildinfo(wxbuildinfoformat format)
//构建信息
wxString wxbuild(wxVERSION_STRING);
if (format == long_f )
#if defined(__WXMSW__)
wxbuild && _T(&-Windows&);
#elif defined(__UNIX__)
wxbuild && _T(&-Linux&);
#if wxUSE_UNICODE
wxbuild && _T(&-Unicode build&);
wxbuild && _T(&-ANSI build&);
const long MainFrame::idMenuOpen = wxNewId();
const long MainFrame::idMenuSave = wxNewId();
const long MainFrame::idMenuCut = wxNewId();
const long MainFrame::idMenuVar = wxNewId();
BEGIN_EVENT_TABLE(MainFrame,wxFrame)
END_EVENT_TABLE()
MainFrame::MainFrame(wxWindow* parent,wxWindowID id){
wxMenuItem* MenuItem1;
wxMenuItem* MenuItem2;
wxMenuItem* MenuItem3;
wxMenuItem* MenuItem4;
wxMenu* Menu1;
wxMenuBar* MenuBar1;
wxMenu* Menu2;
Create(parent, id, _(&GUI_Demo&), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T(&id&));
SetMinSize(wxSize(-1,-1));
MenuBar1 = new wxMenuBar();
Menu1 = new wxMenu();
MenuItem1 = new wxMenuItem(Menu1, idMenuOpen, _(&打开\tCtrl-O&), _(&打开文件&), wxITEM_NORMAL);
Menu1-&Append(MenuItem1);
MenuItem2 = new wxMenuItem(Menu1, idMenuSave, _(&保存\tCtrl-S&), _(&保存为BMP文件&), wxITEM_NORMAL);
Menu1-&Append(MenuItem2);
MenuBar1-&Append(Menu1, _(&文件&));
SetMenuBar(MenuBar1);
Menu2 = new wxMenu();
MenuItem3 = new wxMenuItem(Menu2, idMenuCut, _(&剪切\tCtrl-X &), _(&剪切处理&), wxITEM_NORMAL);
Menu2-&Append(MenuItem3);
MenuItem4 = new wxMenuItem(Menu2, idMenuVar, _(&粘贴\tCtrl-V&), _(&粘贴处理&), wxITEM_NORMAL);
Menu2-&Append(MenuItem4);
MenuBar1-&Append(Menu2, _(&编辑&));
//链接到事件处理函数
Connect(idMenuOpen,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemOpen);
Connect(idMenuSave,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemSave);
Connect(idMenuCut,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemCut);
Connect(idMenuVar,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&MainFrame::OnMenuItemVar);
MainFrame::~MainFrame(){
void MainFrame::OnMenuItemOpen(wxCommandEvent& event) //打开事件
//&文件-&打开&菜单
void MainFrame::OnMenuItemSave(wxCommandEvent& event) //保存事件
//&文件-&保存&菜单
void MainFrame::OnMenuItemCut(wxCommandEvent& event)
//剪切事件
//&编辑-&剪切&菜单
void MainFrame::OnMenuItemVar(wxCommandEvent& event)
//粘贴事件
//&编辑-&粘贴&菜单
&对比:实现类&#20284;的界面。从代码量来看,Tcl&Tk明显占优。但是感觉Wxwidgets的那些代码可能更容易读懂。
参考文档:
Tcl维基百科:
Tcl Developer Site:
Tcl Tutorial:&
Tk Tutorial:
&&&&&&& 下一篇主要是Tcl语法方面的内容。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47456次
积分:1646
积分:1646
排名:第12616名
原创:119篇
测试交流群:
Skype:guangfu1984
Mail:guangfu.
(3)(7)(17)(6)(9)(18)(13)(1)(10)(1)(4)(6)(1)(2)(1)(1)(6)(2)(1)(1)(1)(11)(1)(1)

我要回帖

更多关于 tk航空官网 的文章

 

随机推荐