登录后没有弹窗广告,广告是为了发展.如果您在未注册情况下浏览书部落弹出了广告,感谢您对书部落运营的支持
游客: 注册 | 登录 | 统计 | 赚部落币! | 论坛规则简介(必看) | 上传书籍必看| C/C++学习小组| | WINDOWS编程学习小组|
= 论坛导航 = 站务交流 · 新闻与评论 · 找书·评书·荐书 人生故事·心得分享 学习经验·答疑解惑 精华
[电子书分享专区] 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
↑请善于搜索-“搜商”是21世纪您成功的关键因素



 
标题: [Visual C++] 动态菜单项、状态条提示、工具条提示问题+配套源代码
程序源代码
超级版主
Rank: 8Rank: 8



UID 64740
精华 0
积分 2
帖子 118
威望 2
部落币 926
代码量 52
阅读权限 150
注册 2007-12-20
状态 离线
发表于 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可重用代码段电子书下载,计算机电脑教程图书#gk R;kMM4M%E!Y ~.X
[代码作者] 赵湘宁书部落-计算机PDF电子书之家 P6`-N|6c'L"@N\u
[文件大小] 56K


附件: 动态菜单项、状态条提示、工具条提示问题.rar (2007-12-30 02:54, 55.48 K)
该附件被下载次数 52
如果您对本帖内容有任何质疑,或者您在阅读/下载 本帖内容时遇到困难 请在站务管理版里发帖提出。点这里进入反馈
顶部
程序源代码
超级版主
Rank: 8Rank: 8



UID 64740
精华 0
积分 2
帖子 118
威望 2
部落币 926
代码量 52
阅读权限 150
注册 2007-12-20
状态 离线
发表于 2007-12-30 02:56  资料 文集 短消息 
动态菜单项、状态条提示、工具条提示问题  
kT&qr:Cm/T(w下载赵湘宁
4@7{4An
g z电子书下载,计算机电脑教程图书
  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。
Gu*v.y
x书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网

&H        I~!xBf4`www.shubulo.com但是动态改变状态条提示又如何呢?在MRU菜单中,无论什么文件,状态条一般都提示“打开选择的文档”。这是另一个要避免的策略。只有特别本位或任性的程序员会操心实现一个动态提示的菜单,如:“打开某某文件”,而不去用完全可行并且有效的提示“打开这个文档”。你完全有权利不遵循这种惯例,也就是说,如果你非要改变状态条提示的话,那就请往下继续看吧,你会明白的。书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网y4gn;{YJ

&j G c,A        _8?下载使用动态菜单的另一场合是当你想设置某个布尔状态时。例如,隐藏或显示工具条,当工具条可见时显示“隐藏工具条”,反之显示“显示工具条”。更为普通的方法是用单个命令以校验标记来实现,当工具条可见时显示标记(如下图)。下载'I2C7e!|@

5_r
m"Q#}Y~'?gz书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网

GUI的高手们常常争论哪种方法更好。可能它没有什么差别,但是即使你决定使用动态提示(如隐藏/显示工具条),你也能使用单个的命令ID,ID_VIEW_TOOLBAR,和单个的提示“隐藏或显示工具条”。我认为没有必要去实现动态提示。
*P[$QH S,bwww.shubulo.com ?-g]k6dg/f:F(cwT
在所有建议中,你要做的第一件事情是好好重新考虑用户的界面。你确实需要动态菜单项吗?以及你确实需要菜单的动态提示吗?除非两个问题的答案都是“是”。否则就止住,别再浪费时间。书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网1s%S;|(RN.x;fC
下载 h        |{@0f
要改变菜单文本是容易的。只要实现ON_UPDATE_COMMAND_UI处理器并调用CCmdUI::SetText即可:
S0`"MOI8c8Du Gwww.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.comBOOL 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'~^
BEGINX'~\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.comBS I!z5Xb4G

5P-R(Kk+w_0{2jk7vh下载获得动态提示的一个方法是将命令分成几个命令-例如,ID_HIDE_ TOOLBAR 和ID_SHOW_TOOLBAR,只是一种欺骗策略。这些命令的命令处理器最终要做的事情是改变菜单项的ID为其它命令项的ID。具体实现细节我就不讲了,自己做吧。
        S*?)]+[
m t电子书下载,计算机电脑教程图书
}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)N m?J~
// much simplified 书部落-计算机PDF电子书之家rv H:[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+]w iXif (/* nItemID has a dynamic prompt */) {
_7OZr"J.D,Z,x*E书部落-分享计算机经典巨著,PDF电子书收藏之家,分享互联网CString sPrompt = // whatever you want
"@![i*F"m8h;E X电子书下载,计算机电脑教程图书SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)sPrompt);
\0m5n(d hOb        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.comMainFrm.cpp文件中的OnMenuSelect实际代码调用一连串函数从MRU菜单项来截获 文件名并建立所要的文本提示。别忘了还要调用CFrameWnd::OnMenuSelect来处理 未改变的提示的命令。
n5vS^\0H!a+ka电子书下载,计算机电脑教程图书
Y6h;o        h        w\"M电子书下载,计算机电脑教程图书最后,对于如何动态改变工具提示文本的方法,CFrameWnd::OnToolTipText是MFC处理工具条通知的函数。其标准实现用匹配的命令ID加载资源串,截获“\n”后的文本并将它拷贝调用者的TOOLTIPTEXT结构。你的任务是编写自己的 代码重载这个处理器。我把这个作为家庭作业
顶部
 



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