登录
登录后没有弹窗广告,广告是为了发展.如果您在未注册情况下浏览书部落弹出了广告,感谢您对书部落运营的支持
游客:
注册
|
登录
|
统计
|
赚部落币!
积分转换
|
论坛规则简介(必看)
|
上传书籍必看
|
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
资料
文集
短消息
动态菜单项、状态条提示、工具条提示问题+配套源代码
《动态菜单项、状态条提示、工具条提示问题》配套源代码
f YC V/i~g,OVwww.shubulo.com
f Q?,Ff]"u*k-`下载
问题的提出:一个应用程序想要动态改变菜单项。使用CCmdUI::SetText("Menu Text")可以改变菜单文本,但是如何动态改变工具条和状态条的文本呢?有几种策略,避免,欺骗,面对......
下载v%b/[Jy_:|
电子书下载,计算机电脑教程图书n}Pg V5O
[代码性质] VC可重用代码段
F%F+TD/DU
[代码作者] 赵湘宁
%nr"AV2u下载
[文件大小] 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
资料
文集
短消息
动态菜单项、状态条提示、工具条提示问题
3KI'jU5y!h
V*zP书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
赵湘宁
下载n0Wr m5{I/aP
下载*o
D_-Ec7bnf
问题的提出:
"L;o
r"t'R2}.y,c5|$w
一个应用程序想要动态改变菜单项。使用CCmdUI::SetText("Menu Text")可以改变菜单文本,但是如何动态改变工具条和状态条的文本呢?
www.shubulo.comCX-\mDQn;Y%Y
2q{Y$n/Eq-J*j%u[
有几种策略,避免,欺骗,面对......
www.shubulo.comd?$L C4Sb
首先,避免:为什么你非要动态改变菜单项?一般说来,这是个坏主意,动态菜单容易把人搞糊涂。我正在使用你的产品,本来用得好好的突然菜单项变了。不管什么时候,每当我看到一个改变菜单的应用时,都要琢麽为什么他们需要这样的用户界面设计。
"o{6V},@'bov_ }
#rTtA,x书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
然而,每一个规则都有例外,许多例子的动态改变菜单项都很酷。例如,在大多数面向文档的应用程序中“文件”菜单的最后一项MRU(最近使用的文件列表)。但作为一个用户,面对动态菜单项的弊端是显而易见的。我把避免动态菜单提升为设计准则。即便是采用了动态菜单的设计,也要让用户注意不到菜单项是改变,否则,It''s bad design。反之,如果用户注意不到菜单项的改变,It''s OK。
7E(H8|(VK S.f_
书部落-计算机PDF电子书之家8[o%]@]i6{3]:H6W5M
但是动态改变状态条提示又如何呢?在MRU菜单中,无论什么文件,状态条一般都提示“打开选择的文档”。这是另一个要避免的策略。只有特别本位或任性的程序员会操心实现一个动态提示的菜单,如:“打开某某文件”,而不去用完全可行并且有效的提示“打开这个文档”。你完全有权利不遵循这种惯例,也就是说,如果你非要改变状态条提示的话,那就请往下继续看吧,你会明白的。
书部落-计算机PDF电子书之家0P
K'BN ^Q-I
C(J.I_^ pRm书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
使用动态菜单的另一场合是当你想设置某个布尔状态时。例如,隐藏或显示工具条,当工具条可见时显示“隐藏工具条”,反之显示“显示工具条”。更为普通的方法是用单个命令以校验标记来实现,当工具条可见时显示标记(如下图)。
Q].IDT7XR]下载
/e+xo-ZM(@4J
GUI的高手们常常争论哪种方法更好。可能它没有什么差别,但是即使你决定使用动态提示(如隐藏/显示工具条),你也能使用单个的命令ID,ID_VIEW_TOOLBAR,和单个的提示“隐藏或显示工具条”。我认为没有必要去实现动态提示。
|4^]rU0B/g
书部落-计算机PDF电子书之家 K]\0RnhJ
在所有建议中,你要做的第一件事情是好好重新考虑用户的界面。你确实需要动态菜单项吗?以及你确实需要菜单的动态提示吗?除非两个问题的答案都是“是”。否则就止住,别再浪费时间。
下载A@6p'OI xR
t
x'u
u6e&X"c书部落-计算机PDF电子书之家
要改变菜单文本是容易的。只要实现ON_UPDATE_COMMAND_UI处理器并调用CCmdUI::SetText即可:
书部落-计算机PDF电子书之家wSNc(S;XX
*M6J/CTR
"?9V$G@ ^
MS1i书部落-计算机PDF电子书之家
:nm
k"] V%G,|B0Q[Z:_下载
void CFrameWnd::OnUpdateToolbar(CCmdUI* pCmdUI)
www.shubulo.com+^.D^Tw(HoN
{
.X+R/m2r(\mnwww.shubulo.com
BOOL bVisible = IsToolbarVisible(...);
[.Lb9j@E'H下载
// Note same mnemonic (&T) for both cmds!
)q jU2u@书部落-计算机PDF电子书之家
pCmdUI->SetText(bVisible ? "Hide &Toolbar" : "Show &Toolbar");
Eh%_d$i9r
}
U]9A(k~m7[
a;S7_ w1Mw,s-s
仅此而已。下一步是提示。当你创建了一个菜单提示,你给它一个ID号。MFC使用这个ID来查找资源串获取命令提示。例如:
@m c&L2\n2A下载
/?ZU/i\0e?+f6_S?2Q
STRINGTABLE DISCARDABLE
q'O|`?-vNtI/~www.shubulo.com
BEGIN
/^/[z(`
|td
ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar"
书部落-计算机PDF电子书之家+s9]9N:X.@!P?zt
END
书部落-计算机PDF电子书之家U-F&T5n7ug K
下载(O$n$@,_tE~1[6@j&I4K
如果你的菜单命令也有工具条按钮,MFC用“\n”(新行标记)后的文本作为工具条提示文本。因为MFC允许每个命令只能有一个串,如何动态改变提示呢?最简单的方法是编写一个提示在两种情况下都工作,象前面讨论的隐藏、显示工具条的例子。但这种方法显得很笨拙。
+Bc%~O,b0H书部落-计算机PDF电子书之家
www.shubulo.comT Ex&T NEs:HlV-t@
获得动态提示的一个方法是将命令分成几个命令-例如,ID_HIDE_ TOOLBAR 和ID_SHOW_TOOLBAR,只是一种欺骗策略。这些命令的命令处理器最终要做的事情是改变菜单项的ID为其它命令项的ID。具体实现细节我就不讲了,自己做吧。
下载#gn+N^8x;r2U0n1F
R
www.shubulo.com+`Iq2K*H4z]Q
使用两个ID可能是一种简单的方法,但它不适用于所有情况。例如在MRU文件菜单中,对于每个可能的文件名字你会需要不同的ID。
g8eB'??B\0hwww.shubulo.com
[8E\0Kq-N书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
本文提供一个例子程序,DynPrompt,如下图,
状态条采用了动态提示,为了理解DynPrompt是如何工作的,你必须对MFC的菜单提示有一些研究。当用户的鼠标 移动到一个菜单项时,Windows发送WM_MENUSELECT和菜单项的ID。MFC的CFrameWnd处理如下:
下载T4K$|\V:h
下载t4t|t.up$B,lm
// much simplified
Kv#]|u{9[.yh#Or9j
void CFrameWnd::OnMenuSelect(UINT nItemID,
]ej~t电子书下载,计算机电脑教程图书
UINT nFlags, HMENU hSysMenu)
书部落-计算机PDF电子书之家!o2hS,dUM.p:s
{
v*b\ [\x^/L`i电子书下载,计算机电脑教程图书
SendMessage(WM_SETMESSAGESTRING, nItemID);
书部落-计算机PDF电子书之家Dqb4w4R k_b
}
rEH%I
uRdE书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
[N9tf
uola电子书下载,计算机电脑教程图书
我做了一些简化;函数的实际代码超过了60行,但基本的意思是框架发送WM_SETMESSAGESTRING消息到自身,用WPARAM传递命令ID。SETMESSAGESTRING 是MFC的一个私有消息,它在afxpriv.h中定义。这个消息在状态条窗格中设置 要显示的文本。你可以用WPARAM传递资源串的ID,或者用LPARAM传递实际的串。
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网tkI_.QA
,PjF(t[R6}?R@w!f
// resource string ID
下载)P_QdxM
SendMessage(WM_SETMESSAGESTRING, ID_MYSTRING);
下载m1XpL(k
XUr]
/g#Z(GuzF\0B
// string
下载y+w~
D,j*?ftA
SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)_T("Hello, world"));
www.shubulo.com:t:R%Xs:P&y
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网d%l-Q*E'OW&U3R\0P
所以,如果要实现动态菜单提示,必须重载CFrameWnd::OnMenuSelect和 用提示串发送WM_SETMESSAGESTRIN消息。
s4J5x)r.f书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网
电子书下载,计算机电脑教程图书8h6{$Lm+`&F9V
q
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags,
www.shubulo.com+?z"JS/s)_2}+M(t
HMENU hSysMenu)
!P!},\(qk0Tr gM
{
下载e@\0xn~
if (/* nItemID has a dynamic prompt */) {
R:`.e&KC8|e@书部落-计算机PDF电子书之家
CString sPrompt = // whatever you want
书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网_a%r1~ C!OA
SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)sPrompt);
2t#z}V`L#E电子书下载,计算机电脑教程图书
m_nIDTracking = nItemID;
书部落-计算机PDF电子书之家\0|~:Y7~1F7z
} else {
e2^m/W5d0Y8}&m下载
CFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
电子书下载,计算机电脑教程图书]3l/@(B@
}
,~ER-~3}:V5s下载
}
电子书下载,计算机电脑教程图书#xPi%MWEP$Z!MF
电子书下载,计算机电脑教程图书`4l7bk;Z*e,iQ)q%[u
MainFrm.cpp文件中的OnMenuSelect
实际代码
调用一连串函数从MRU菜单项来截获 文件名并建立所要的文本提示。别忘了还要调用CFrameWnd::OnMenuSelect来处理 未改变的提示的命令。
LO,\6Fs|?-?:U
电子书下载,计算机电脑教程图书qh,_Kb
最后,对于如何动态改变工具提示文本的方法,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.130190 second(s), 7 queries , Gzip enabled 1024*768
当前时区 GMT+8, 现在时间是 2008-11-20 23:31
清除 Cookies
-
联系我们
-
书部落-计算机编程图书资料分享
-
Archiver
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队