亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

程序也沒有任何報錯信息,求大俠指點下到底是煩什么?怎么修改?

程序也沒有任何報錯信息,求大俠指點下到底是煩什么?怎么修改?

如注釋所示,我想在按鈕上實現四種點擊響應,在運行的時候,其它的都行,就是無法實現“左鍵雙擊變藍色”的效果a=uicontrol(gcf,'style','push','BackgroundColor',[0,0.7,0],...'ButtonDownFcn',['if strcmp(get(gcf,''SelectionType''),''open'')'...%鼠標右鍵雙擊時按鈕變黃色'set(gco,''style'',''push'',''backgroundcolor'',[1,1,0]);'...'else set(gco,''style'',''push'',''backgroundcolor'',[1,0,0]);'...%鼠標右鍵單擊變紅色'end'],...'Callback',['if strcmp(get(gcf,''SelectionType''),''open'')'...%鼠標左鍵雙擊變藍色'set(gco,''style'',''push'',''backgroundcolor'',[0,0,1]);'...'else set(gco,''style'',''push'',''backgroundcolor'',[0,0,0]);'...%鼠標左鍵單擊變黑色'end']);
查看完整描述

1 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

你的要求可能無法實現。

1、對于除listbox之外的其它所有控件類型,當控件處于活動狀態(Enable為on)時,任何點擊鼠標左鍵的動作(包括同時按下Ctrl或Shift鍵),窗口的SelectionType屬性都會設置為normal。

2、對于處于活動狀態的列表框,雙擊鼠標左鍵會把窗口的SelectionType設為open。換言之,列表框是唯一能響應雙擊鼠標左鍵的控件類型。

3、對于所有的鼠標右鍵動作,窗口的SelectionType屬性能夠正常體現(單擊為alt,雙擊為open)。

4、如果控件處于不活動或禁用狀態(Enable屬性為inactive或off),鼠標的按鍵動作能夠被窗口SelectionType屬性正常體現。

所以,如你所寫的代碼,對于按鈕類型的控件,是不可能捕捉到鼠標的左鍵雙擊動作的。要想實現你所說的變色,只有把按鈕設置為非活動狀態,例如:


a=uicontrol(gcf,'style','push','BackgroundColor',[0,0.7,0],'Enable','inactive',...    'ButtonDownFcn',[ ...    'if strcmp(get(gcf,''SelectionType''),''open'')'...%右鍵雙擊時變黃色    '  if strcmp(lastclick,''left'')'...%左鍵雙擊變藍色    '    set(gco,''backgroundcolor'',[0,0,1]);'...    '  else,' ...    '    set(gco,''backgroundcolor'',[1,1,0]);'...    '  end,' ...    'elseif strcmp(get(gcf,''SelectionType''),''alt'')' ...    '    lastclick=''right'';'...    '    set(gco,''backgroundcolor'',[1,0,0]);'...%鼠標右鍵單擊變紅色    'else' ...    '    lastclick=''left'';'...    '    set(gco,''backgroundcolor'',[0,0,0]);'...%鼠標左鍵單擊變黑色    'end']);

這里,有必要說明幾個細節問題:

1、對于鼠標雙擊按鍵的動作,其實會產生兩個消息:第一個是normal或alt(區分左右鍵);第二個為open(不區分左右鍵),但可以借助于前一個消息來區分。

2、當控件處于活動狀態時,按鼠標左鍵會執行控件的Callback回調函數,但不設置窗口的CurrentPoint屬性,也不執行控件的ButtonDownFcn以及窗口的WindowButtonDownFcn回調函數;而對于控件處于不活動狀態或者按鼠標右鍵的情況,在執行ButtonDownFcn之后,還會執行窗口的WindowButtonDownFcn回調函數。

3、從MFC類的繼承關系來說,控件也是一種窗口,當鼠標點擊按鍵時,鼠標消息是被按鍵捕獲的,所以,Figure的SelectionType屬性是由MATLAB在后臺進行設置的,而也正因如此,才會根據鼠標左右按鍵、控件類型以及是否活動而存在比較復雜的邏輯。 

順便說一聲,這樣寫回調函數太費勁,我在2000年之前曾經寫過上百行這樣的回調函數,后來除非對于非常簡單的回調函數,一般都不用這種寫法了。

 



查看完整回答
反對 回復 2023-02-15
  • 1 回答
  • 0 關注
  • 63 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號