日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题

發(fā)布時間:2024/7/23 编程问答 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題的提出:

一個應(yīng)用程序想要動態(tài)改變菜單項。使用CCmdUI::SetText("Menu Text")可以改變菜單文本,但是如何動態(tài)改變工具條和狀態(tài)條的文本呢?

有幾種策略,避免,欺騙,面對......

首先,避免:為什么你非要動態(tài)改變菜單項?一般說來,這是個壞主意,動態(tài)菜單容易把人搞糊涂。我正在使用你的產(chǎn)品,本來用得好好的突然菜單項變了。不管什么時候,每當(dāng)我看到一個改變菜單的應(yīng)用時,都要琢麼為什么他們需要這樣的用戶界面設(shè)計。

然而,每一個規(guī)則都有例外,許多例子的動態(tài)改變菜單項都很酷。例如,在大多數(shù)面向文檔的應(yīng)用程序中“文件”菜單的最后一項MRU(最近使用的文件列表)。但作為一個用戶,面對動態(tài)菜單項的弊端是顯而易見的。我把避免動態(tài)菜單提升為設(shè)計準(zhǔn)則。即便是采用了動態(tài)菜單的設(shè)計,也要讓用戶注意不到菜單項是改變,否則,It's bad design。反之,如果用戶注意不到菜單項的改變,It's OK。

但是動態(tài)改變狀態(tài)條提示又如何呢?在MRU菜單中,無論什么文件,狀態(tài)條一般都提示“打開選擇的文檔”。這是另一個要避免的策略。只有特別本位或任性的程序員會操心實現(xiàn)一個動態(tài)提示的菜單,如:“打開某某文件”,而不去用完全可行并且有效的提示“打開這個文檔”。你完全有權(quán)利不遵循這種慣例,也就是說,如果你非要改變狀態(tài)條提示的話,那就請往下繼續(xù)看吧,你會明白的。

使用動態(tài)菜單的另一場合是當(dāng)你想設(shè)置某個布爾狀態(tài)時。例如,隱藏或顯示工具條,當(dāng)工具條可見時顯示“隱藏工具條”,反之顯示“顯示工具條”。更為普通的方法是用單個命令以校驗標(biāo)記來實現(xiàn),當(dāng)工具條可見時顯示標(biāo)記(如下圖)。

GUI的高手們常常爭論哪種方法更好。可能它沒有什么差別,但是即使你決定使用動態(tài)提示(如隱藏/顯示工具條),你也能使用單個的命令I(lǐng)D,ID_VIEW_TOOLBAR,和單個的提示“隱藏或顯示工具條”。我認(rèn)為沒有必要去實現(xiàn)動態(tài)提示。

在所有建議中,你要做的第一件事情是好好重新考慮用戶的界面。你確實需要動態(tài)菜單項嗎?以及你確實需要菜單的動態(tài)提示嗎?除非兩個問題的答案都是“是”。否則就止住,別再浪費時間。

要改變菜單文本是容易的。只要實現(xiàn)ON_UPDATE_COMMAND_UI處理器并調(diào)用CCmdUI::SetText即可:

void CFrameWnd::OnUpdateToolbar(CCmdUI* pCmdUI)

{

BOOL bVisible = IsToolbarVisible(...);

// Note same mnemonic (&T) for both cmds!

pCmdUI->SetText(bVisible ? "Hide &Toolbar" : "Show &Toolbar");

}僅此而已。下一步是提示。當(dāng)你創(chuàng)建了一個菜單提示,你給它一個ID號。MFC使用這個ID來查找資源串獲取命令提示。例如:

STRINGTABLE DISCARDABLE

BEGIN

ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar"

END

如果你的菜單命令也有工具條按鈕,MFC用“\n”(新行標(biāo)記)后的文本作為工具條提示文本。因為MFC允許每個命令只能有一個串,如何動態(tài)改變提示呢?最簡單的方法是編寫一個提示在兩種情況下都工作,象前面討論的隱藏、顯示工具條的例子。但這種方法顯得很笨拙。

獲得動態(tài)提示的一個方法是將命令分成幾個命令-例如,ID_HIDE_ TOOLBAR?和ID_SHOW_TOOLBAR,只是一種欺騙策略。這些命令的命令處理器最終要做的事情是改變菜單項的ID為其它命令項的ID。具體實現(xiàn)細(xì)節(jié)我就不講了,自己做吧。

使用兩個ID可能是一種簡單的方法,但它不適用于所有情況。例如在MRU文件菜單中,對于每個可能的文件名字你會需要不同的ID。

本文提供一個例子程序,DynPrompt,如下圖,

狀態(tài)條采用了動態(tài)提示,為了理解DynPrompt是如何工作的,你必須對MFC的菜單提示有一些研究。當(dāng)用戶的鼠標(biāo) 移動到一個菜單項時,Windows發(fā)送WM_MENUSELECT和菜單項的ID。MFC的CFrameWnd處理如下:

// much simplified

void CFrameWnd::OnMenuSelect(UINT nItemID,

UINT nFlags, HMENU hSysMenu)

{

SendMessage(WM_SETMESSAGESTRING, nItemID);

}

我做了一些簡化;函數(shù)的實際代碼超過了60行,但基本的意思是框架發(fā)送WM_SETMESSAGESTRING消息到自身,用WPARAM傳遞命令I(lǐng)D。SETMESSAGESTRING?是MFC的一個私有消息,它在afxpriv.h中定義。這個消息在狀態(tài)條窗格中設(shè)置 要顯示的文本。你可以用WPARAM傳遞資源串的ID,或者用LPARAM傳遞實際的串。

// resource string ID

SendMessage(WM_SETMESSAGESTRING, ID_MYSTRING);

// string

SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)_T("Hello, world"));

所以,如果要實現(xiàn)動態(tài)菜單提示,必須重載CFrameWnd::OnMenuSelect和 用提示串發(fā)送WM_SETMESSAGESTRIN消息。

void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags,

HMENU hSysMenu)

{

if (/* nItemID has a dynamic prompt */) {

CString sPrompt = // whatever you want

SendMessage(WM_SETMESSAGESTRING, 0,? (LPARAM)(LPCTSTR)sPrompt);

m_nIDTracking = nItemID;

} else {

CFrameWnd::OnMenuSelect(nItemID,? nFlags, hSysMenu);

}

}

MainFrm.cpp文件中的OnMenuSelect實際代碼調(diào)用一連串函數(shù)從MRU菜單項來截獲 文件名并建立所要的文本提示。別忘了還要調(diào)用CFrameWnd::OnMenuSelect來處理 未改變的提示的命令。

最后,對于如何動態(tài)改變工具提示文本的方法,CFrameWnd::OnToolTipText是MFC處理工具條通知的函數(shù)。其標(biāo)準(zhǔn)實現(xiàn)用匹配的命令I(lǐng)D加載資源串,截獲“\n”后的文本并將它拷貝調(diào)用者的TOOLTIPTEXT結(jié)構(gòu)。你的任務(wù)是編寫自己的 代碼重載這個處理器。我把這個作為家庭作業(yè)。

總結(jié)

以上是生活随笔為你收集整理的java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 都市激情第一页 | 五月婷婷中文 | 日本免费电影一区二区三区 | 亚洲人成无码www久久久 | 国产精品国产三级国产专播精品人 | 91亚洲国产成人久久精品网站 | 亚洲免费av一区二区 | 欧美精品久久久久久久久 | 男人和女人搞鸡 | 青青草婷婷 | 激情xxxx| 深爱五月网 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 男人的天堂免费 | 欧美日韩123区 | 无遮挡毛片 | 欧美激情3p | 国产91精品久久久 | 中文字幕久热 | 十八禁视频网站在线观看 | 91爱啪 | 最近最新mv字幕观看 | 久久久一区二区 | 亚洲精品综合在线 | 亚洲成人a√| 国产精品2区| 黑人和白人做爰 | 97色伦影院 | 免费看黄在线看 | 欧美成人激情 | 影音先锋中文字幕人妻 | 欧美又粗又长又爽做受 | 91性高潮久久久久久久久 | 国产一区二区在线视频 | 亚洲电影影音先锋 | 国产高中女学生第一次 | 亚洲高清在线 | 激情欧美一区二区三区精品 | 日韩av无码一区二区三区 | 污污视频在线观看免费 | 久色伊人 | 青青久在线 | 免费成人深夜夜 | 亚洲97| 青青毛片| 欧美高清视频在线观看 | 波多野结衣人妻 | 朝桐光一区二区 | 东京热av一区 | 亚洲国产精品成人综合色在线婷婷 | 午夜精品久久久久久久无码 | 一区二区三区www污污污网站 | 亚洲 欧美 激情 另类 校园 | 午夜精品一区二区三区在线视频 | 男女啪啪免费看 | 日韩经典一区 | 日韩福利社 | 国产精品久久久久久一区二区三区 | 国产精品无码一区 | 在线播放一级片 | 国产无遮无挡120秒 欧美综合图片 | 免费污网站在线观看 | 嫩操影院 | 999国产精品视频 | 91一区二区三区四区 | 国产成人97精品免费看片 | 精久久久久 | 久久久久久久久久免费 | 精品国产专区 | 狠狠爱天天干 | www.youjizz.com中国 | 熟妇女人妻丰满少妇中文字幕 | 中文字幕第5页 | proumb性欧美在线观看 | 日韩免费高清一区二区 | 四季av国产一区二区三区 | a天堂在线观看 | 天堂网在线视频 | 一区二区免费在线观看视频 | 精品久久久久久久久久久久久久久久久久 | 久久无码性爱视频 | 蜜臀麻豆| 午夜小视频在线观看 | 日韩天堂网 | 中文字幕av观看 | 久久久久性 | 悠悠色综合 | 国产精品第100页 | 五月婷婷激情小说 | 一区久久 | 精品人妻一区二区三区换脸明星 | 亚洲自拍偷拍图 | 日韩在线视频网站 | 999www| 国产精品自拍小视频 | 婷婷六月在线 | 亚洲一区二区三区欧美 | 91丝袜呻吟高潮美腿白嫩在线观看 | 超碰天天|