登录
登录后没有弹窗广告,广告是为了发展.如果您在未注册情况下浏览书部落弹出了广告,感谢您对书部落运营的支持
游客:
注册
|
登录
|
统计
|
赚部落币!
积分转换
|
论坛规则简介(必看)
|
上传书籍必看
|
C/C++学习小组
| |
WINDOWS编程学习小组
|
·
讲述程序员真实的经历
·
讨论 :你励志的名言是什么
·
在线时间可以兑换部落币啦!
·
IT人求职周年记:投过百度 弃过华为
·
如何成为一名销售人员
·
书籍上传必看啊!
·
如何成功通过面试?HR亲身案例分析
·
深圳,请让我活下去!闯荡深圳八年
·
老IT人追忆十五年IT从业经历
·
JAVA编程思想-伟大的著作
·
Java学习之路-经验之谈
·
ThinkingC++ OR C++ Primer?
·
胡侃理论计算机科学的学习
·
VC++学习方法及书籍推荐
·
我的IT人生 by 空明主义
= 论坛导航 =
站务交流
·
新闻与评论
·
找书·评书·荐书
人生故事·心得分享
学习经验·答疑解惑
精华
[
电子书分享专区
]
WEB开发与程序设计
·
C/C++电子书
·
JAVA电子书
·
.NET相关
·
汇编语言
·
PHP电子书
·
ASP电子书
·
JSP电子书
·
嵌入式开发
·
游戏编程
黑客|病毒|破解
·
Ruby·Ajax·XML·CSS·Python等脚本语言
·
操作系统
·
LINUX电子书
·
UNINX电子书
·
WINDOWS电子书
·
数据库
·
Oracle
·
MYSQL
·
SQL Server
·
等....
注:书籍分享区仅限书籍分享,下面有代码分享区,希望大家注意区分
[
程序源代码分享区
]
Windows程序(C/C++/VC++)
·
界面编程
·
桌面应用
·
文件操作
·
shell编程
·
钩子(HOOK)
·
Win32API
·
COM编程
·
进程与线程
·
驱动编程
·
WinSock
·
LINUX程序代码
·
JAVA程序
·
.NET编程
·
书籍源码
·
等....
[
技术文摘分享区
]
文摘分享区旨在搜集网上的专业文献,希望你也能来添砖加瓦,添加文章有部落币奖励
程序设计与WEB开发电子书目录
◇◆□
专题推荐:JAVA电子书下载
◇◆□
C程序设计之四书五经_电子书下载
◇◆□
C++学习推荐书目
◇◆□
C#经典书籍
◇◆□
JAVA编程思想专题
◇◆□
C++ Primer
输入您的搜索字词
提交搜索表单
Web
shubulo.com
↑请善于搜索-“搜商”是21世纪您成功的关键因素
书部落-计算机PDF电子书之家
»
Windows编程(C/C++/VC++)
»
界面编程
» 动态菜单项、状态条提示、工具条提示问题+配套源代码
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题:
[Visual C++]
动态菜单项、状态条提示、工具条提示问题+配套源代码
程序源代码
超级版主
UID 64740
精华 0
积分 2
帖子 118
威望 2
部落币 926
代码量 52
阅读权限 150
注册 2007-12-20
状态 离线
#1
发表于 2007-12-30 02:54
资料
文集
短消息
动态菜单项、状态条提示、工具条提示问题+配套源代码
《动态菜单项、状态条提示、工具条提示问题》配套源代码
&vb$Nt g(rZ
j}"[yp]+vOLz电子书下载,计算机电脑教程图书
问题的提出:一个应用程序想要动态改变菜单项。使用CCmdUI::SetText("Menu Text")可以改变菜单文本,但是如何动态改变工具条和状态条的文本呢?有几种策略,避免,欺骗,面对......
O9U5hTK
Hq下载
www.shubulo.com}*A*Z$]&{j
[代码性质] VC可重用代码段
电子书下载,计算机电脑教程图书#gkR;kM M4M%E!Y~.X
[代码作者] 赵湘宁
书部落-计算机PDF电子书之家P6`-N|6c'L"@N\u
[文件大小] 56K
附件
:
动态菜单项、状态条提示、工具条提示问题.rar
(2007-12-30 02:54, 55.48 K)
该附件被下载次数 52
如果您对本帖内容有任何质疑,或者您在阅读/下载 本帖内容时遇到困难 请在站务管理版里发帖提出。点这里进入反馈
程序源代码
超级版主
UID 64740
精华 0
积分 2
帖子 118
威望 2
部落币 926
代码量 52
阅读权限 150
注册 2007-12-20
状态 离线
#2
发表于 2007-12-30 02:56
资料
文集
短消息
动态菜单项、状态条提示、工具条提示问题
kT&qr:Cm/T(w下载
赵湘宁
4@7{4An
gz电子书下载,计算机电脑教程图书
www.shubulo.coml@iM mWu
问题的提出:
下载)z5O/k%l5H
一个应用程序想要动态改变菜单项。使用CCmdUI::SetText("Menu Text")可以改变菜单文本,但是如何动态改变工具条和状态条的文本呢?
书部落-计算机PDF电子书之家:}(Trt7{:y{
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网~4K)B#F}G.w
有几种策略,避免,欺骗,面对......
下载#`3]X2fHL
D-{
首先,避免:为什么你非要动态改变菜单项?一般说来,这是个坏主意,动态菜单容易把人搞糊涂。我正在使用你的产品,本来用得好好的突然菜单项变了。不管什么时候,每当我看到一个改变菜单的应用时,都要琢麽为什么他们需要这样的用户界面设计。
5F!x
_LM'WzGK下载
R:Xe.]_L0au书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
然而,每一个规则都有例外,许多例子的动态改变菜单项都很酷。例如,在大多数面向文档的应用程序中“文件”菜单的最后一项MRU(最近使用的文件列表)。但作为一个用户,面对动态菜单项的弊端是显而易见的。我把避免动态菜单提升为设计准则。即便是采用了动态菜单的设计,也要让用户注意不到菜单项是改变,否则,It''s bad design。反之,如果用户注意不到菜单项的改变,It''s OK。
G u*v.y
x书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
&H I~!xBf4`www.shubulo.com
但是动态改变状态条提示又如何呢?在MRU菜单中,无论什么文件,状态条一般都提示“打开选择的文档”。这是另一个要避免的策略。只有特别本位或任性的程序员会操心实现一个动态提示的菜单,如:“打开某某文件”,而不去用完全可行并且有效的提示“打开这个文档”。你完全有权利不遵循这种惯例,也就是说,如果你非要改变状态条提示的话,那就请往下继续看吧,你会明白的。
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网y4gn;{YJ
&j Gc,A _8?下载
使用动态菜单的另一场合是当你想设置某个布尔状态时。例如,隐藏或显示工具条,当工具条可见时显示“隐藏工具条”,反之显示“显示工具条”。更为普通的方法是用单个命令以校验标记来实现,当工具条可见时显示标记(如下图)。
下载'I2C7e!| @
5_r
m"Q#}Y~'?g z书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
GUI的高手们常常争论哪种方法更好。可能它没有什么差别,但是即使你决定使用动态提示(如隐藏/显示工具条),你也能使用单个的命令ID,ID_VIEW_TOOLBAR,和单个的提示“隐藏或显示工具条”。我认为没有必要去实现动态提示。
*P[$QHS,b
www.shubulo.com ?-g]k6dg/f:F(cwT
在所有建议中,你要做的第一件事情是好好重新考虑用户的界面。你确实需要动态菜单项吗?以及你确实需要菜单的动态提示吗?除非两个问题的答案都是“是”。否则就止住,别再浪费时间。
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网1s%S;|(RN.x;fC
下载 h |{@0f
要改变菜单文本是容易的。只要实现ON_UPDATE_COMMAND_UI处理器并调用CCmdUI::SetText即可:
S0`"MOI8c8DuGwww.shubulo.com
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网k6h,C^%qx
X
电子书下载,计算机电脑教程图书7i&X\"wf+M8s UY/R4t
(p^WmY'?m9tS
void CFrameWnd::OnUpdateToolbar(CCmdUI* pCmdUI)
j-_yW{ h}书部落-计算机PDF电子书之家
{
mo'A1[[t j`www.shubulo.com
BOOL bVisible = IsToolbarVisible(...);
下载
n xJ+kR wL
// Note same mnemonic (&T) for both cmds!
W`c!F
{.c7EX书部落-计算机PDF电子书之家
pCmdUI->SetText(bVisible ? "Hide &Toolbar" : "Show &Toolbar");
Y&A`1a/Y"h![4e9j"?!t:D|书部落-计算机PDF电子书之家
}
书部落-计算机PDF电子书之家W.YPetR7M'z
T9Gt.}3CG
仅此而已。下一步是提示。当你创建了一个菜单提示,你给它一个ID号。MFC使用这个ID来查找资源串获取命令提示。例如:
书部落-计算机PDF电子书之家njG*Vh!_'O E'Cx
书部落-计算机PDF电子书之家)N0L T4V*g s
STRINGTABLE DISCARDABLE
3n\$AJ'~^
BEGIN
X'~\0B9\%E+ZfG2j~
ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar"
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网,U{a\~(n r/D6S2R,H
END
www.shubulo.comAK0[bU&t#hC%Z+f
c
Tlpg} Y)D;yT q
bwww.shubulo.com
如果你的菜单命令也有工具条按钮,MFC用“\n”(新行标记)后的文本作为工具条提示文本。因为MFC允许每个命令只能有一个串,如何动态改变提示呢?最简单的方法是编写一个提示在两种情况下都工作,象前面讨论的隐藏、显示工具条的例子。但这种方法显得很笨拙。
www.shubulo.comBSI!z5Xb4G
5P-R(Kk+w_0{2jk7vh下载
获得动态提示的一个方法是将命令分成几个命令-例如,ID_HIDE_ TOOLBAR 和ID_SHOW_TOOLBAR,只是一种欺骗策略。这些命令的命令处理器最终要做的事情是改变菜单项的ID为其它命令项的ID。具体实现细节我就不讲了,自己做吧。
S*?)]+[
mt电子书下载,计算机电脑教程图书
}g"f0jJ1\wA-G'sF
使用两个ID可能是一种简单的方法,但它不适用于所有情况。例如在MRU文件菜单中,对于每个可能的文件名字你会需要不同的ID。
!h"ZF%{_l${X书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网%|`0x#l4j,_
Q{
本文提供一个例子程序,DynPrompt,如下图,
状态条采用了动态提示,为了理解DynPrompt是如何工作的,你必须对MFC的菜单提示有一些研究。当用户的鼠标 移动到一个菜单项时,Windows发送WM_MENUSELECT和菜单项的ID。MFC的CFrameWnd处理如下:
4UF1O}6D/{5K电子书下载,计算机电脑教程图书
www.shubulo.comyl)Nm?J~
// much simplified
书部落-计算机PDF电子书之家rvH:[0^
void CFrameWnd::OnMenuSelect(UINT nItemID,
1T#A{&sX(~#s
UINT nFlags, HMENU hSysMenu)
电子书下载,计算机电脑教程图书4Gv R}6M:A`'g8s+R{
{
,Fop7~_qZ|N
SendMessage(WM_SETMESSAGESTRING, nItemID);
SV"JR!D
}
*A.j8}%k{$_3\3j
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网/W(j!`e%gkf
我做了一些简化;函数的实际代码超过了60行,但基本的意思是框架发送WM_SETMESSAGESTRING消息到自身,用WPARAM传递命令ID。SETMESSAGESTRING 是MFC的一个私有消息,它在afxpriv.h中定义。这个消息在状态条窗格中设置 要显示的文本。你可以用WPARAM传递资源串的ID,或者用LPARAM传递实际的串。
下载^a S
PD(S9n@
4WH d z)k9b书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
// resource string ID
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网b8d\0ae__
SendMessage(WM_SETMESSAGESTRING, ID_MYSTRING);
下载ok2i4V
f
l~:^4k9[l4Wwww.shubulo.com
// string
书部落-计算机PDF电子书之家_5z0|[:`h(O ~\0a
SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)_T("Hello, world"));
EqRBCA\0^www.shubulo.com
?7[!m&a/rJ^1?c,_下载
所以,如果要实现动态菜单提示,必须重载CFrameWnd::OnMenuSelect和 用提示串发送WM_SETMESSAGESTRIN消息。
www.shubulo.com
~5K1TuY0h
yc D"M6d.mF~书部落-计算机PDF电子书之家
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags,
_k)h`At
HMENU hSysMenu)
书部落-计算机PDF电子书之家9g;O&J_2H.V3}Q
{
D+]wiX
if (/* nItemID has a dynamic prompt */) {
_7OZr"J.D,Z,x*E书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
CString sPrompt = // whatever you want
"@![i*F"m8h;EX电子书下载,计算机电脑教程图书
SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)sPrompt);
\0m5n(dhOb Y.L书部落-计算机PDF电子书之家
m_nIDTracking = nItemID;
a${!Z
yM"t!Kwww.shubulo.com
} else {
www.shubulo.comiQ"SZL3zo[yl}
CFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
)@:oy]XRy电子书下载,计算机电脑教程图书
}
Ez9e:_ Z%u@B
M电子书下载,计算机电脑教程图书
}
g}UNk^电子书下载,计算机电脑教程图书
#WZ%m!o1BL6rwww.shubulo.com
MainFrm.cpp文件中的OnMenuSelect
实际代码
调用一连串函数从MRU菜单项来截获 文件名并建立所要的文本提示。别忘了还要调用CFrameWnd::OnMenuSelect来处理 未改变的提示的命令。
n5vS^\0H!a+ka电子书下载,计算机电脑教程图书
Y6h;o h w\"M电子书下载,计算机电脑教程图书
最后,对于如何动态改变工具提示文本的方法,CFrameWnd::OnToolTipText是MFC处理工具条通知的函数。其标准实现用匹配的命令ID加载资源串,截获“\n”后的文本并将它拷贝调用者的TOOLTIPTEXT结构。你的任务是编写自己的 代码重载这个处理器。我把这个作为家庭作业
投票
交易
悬赏
活动
书部落-计算机PDF电子书之家
社区管理中心
> 站务管理
交流地带
> IT八卦·焦点网谈·七嘴八舌
> 求书专版
> IT人生·励志故事·心得分享
> 学习经验·技术心得·答疑解惑
> C/C++语言学习小组
> Windows编程学习组
> 嵌入式开发学习组
计算机专业电子书分享&下载
> 程序设计与WEB开发
> C\C++
> Java
> .NET相关
> 汇编语言
> Delphi
> Visual Basic
> PHP
> ASP
> JSP
> CGI/PERL
> 嵌入式开发
> 软件调试|加解密
> 游戏编程
> 脚本编程与WEB开发[Html/CSS/XML/Ajax等]
> 操作系统
> Windows
> Linux
> UNIX
> 其他
> 数据库
> Access
> MySQL
> SQL Server
> Oracle
> FoxBase/Pro
> PowerBuilder
> 其它
> 图形图像与多媒体
> Fireworks
> Photoshop
> CorelDraw
> 3D制作类
> Flash
> 其它
> 网络通信与网络安全技术
> TCP/IP
> 网络编程|组网|配置|
> 网络安全|黑客相关
> 网络基础理论
> WEB服务器
> 软件工程学
> 计算机考试认证
> 微软认证
> 思科认证
> 国家计算机等级考试
> 自学考试
> 软件水平考试(软考)
> 其它
> 计算机基础理论
> 办公自动化
> 硬件DIY|故障维修
> 其他计算机相关图书
> 其他类图书分享
程序源代码分享&下载
> Windows编程(C/C++/VC++)
> 界面编程
> 桌面应用
> 文件操作
> shell编程
> 钩子(HOOK)
> Win32API
> 多任务(进程与线程)
> COM编程
> 驱动编程
> WinSock
> Linux/Unix编程
> JAVA编程
> J2ME
> .NET编程
> Delphi & Kylix
> Delphi控件
> 相关开发工具
> 汇编语言程序
> 数据库编程
> SQL Server
> Oracle
> Sybase
> Access
> MySQL
> 其它数据库
> 网络编程
> WinSock
> Internet与WEB服务
> 通信协议(TCP/IP协议栈)
> P2P编程
> 搜索引擎
> 网络安全
> 嵌入式/单片机编程
> 嵌入式Linux
> 微处理器开发
> 单片机开发
> VxWorks
> uCOS
> DSP编程
> Windows CE
> VHDL编程
> 加密解密
> 图形图象与多媒体
> 绘图程序
> DirectX
> OpenGL
> 视频技术
> 音频技术
> 图形算法
> GIS编程
> 反病毒编程
> 通讯/手机编程
> J2ME
> 书籍源码
计算机专业技术文摘分享&阅读
> 程序设计与WEB开发
> C语言
> Visual C++/C++
> Java
> C#
> 汇编语言
> Delphi
> Visual Basic
> PHP
> ASP
> JSP
> Html/CSS教程
> CGI/PERL
> Dreamweaver/Frontpage
> XML
> Javascript
> Vbscript
> 操作系统
> DOS
> 视窗系列Windows2000
> 视窗系列WindowsXP
> 视窗系列Windows2003
> 苹果OS
> 伯克利系统freebsd
> SCO Unix
> Solaris
> Aix
> Linux
> 数据库
> MS Access
> MSSQL
> MySQL
> IBM-DB2
> ORACLE
> SYBASE
> FoxPro
> 图形图像与多媒体
> 网络通信与网络安全技术
> TCP/IP协议
> IPv6协议
> 网络通讯标准(RFC)
> 路由器
> 网际操作系统(IOS)
> 路由信息协议(RIP)
> OSPF路由协议
> MPLS技术
> 虚拟专用网(VPN)
> 虚拟局域网(VLAN)
> 集线器
> 交换机
> 以太网
> 无线网络
> 无盘网络
> 宽带接入
> 光纤通讯
> 网络综合布线
> 终端设备
> 系统集成
> 防火墙
> 攻击监测
> 邮件服务
> 网站服务
> FTP服务
> 数据库服务
> 域名解析服务
> 多媒体服务
> 办公自动化
> 硬件与维护
> 计算机考试认证
> 微软认证
> 思科认证
> 国家计算机等级考试
> 自学考试
> 软件水平考试
> 其它
计算机电子书下载PDF
Powered by
Discuz!
5.0.0
© 2001-2006
著作权保护声明
|
网站法律顾问:ItLaw-庄毅雄律师
|
Processed in 0.111380 second(s), 7 queries , Gzip enabled 1024*768
当前时区 GMT+8, 现在时间是 2008-11-20 22:49
清除 Cookies
-
联系我们
-
书部落-计算机编程图书资料分享
-
Archiver
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队