成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

處理Wm_Killfocus消息時需要注意的地方

開發 前端
假設,有一個編輯框控件使用了氣球提示來顯示反饋信息。舉個例子,對于一個密碼輸入控件,當鍵盤上的 CapsLock 按鍵按下時,它會提示用戶,以防止用戶輸入錯誤的密碼。

之前我在一篇文章中曾經提過,不應該利用 WM_KILLFOCUS 消息中對表單的字段進行有效性校驗。 今天的文章,我將介紹另外一個反面例子,來表現當使用 WM_KILLFOCUS 消息處理焦點相關的問題時所帶來的混亂。

假設,有一個編輯框控件使用了氣球提示來顯示反饋信息。舉個例子,對于一個密碼輸入控件,當鍵盤上的 CapsLock 按鍵按下時,它會提示用戶,以防止用戶輸入錯誤的密碼。作為開發者,你可能希望,當用戶將輸入焦點從密碼輸入框移動到另外一個控件時,將氣球提示移除,這是合情合理的。因為向用戶給出一個他完全不會使用到的控件提示,會讓用戶感到莫名其妙。可以通過對輸入控件子類化來實現上述的需求,如下圖所示:

使用上面的代碼進行初步測試,一切如預期般正常工作,只是有一個問題:當用戶點擊氣球提示時,編輯框的輸入光標會意外的消失,這是為啥?

發生的事情是,你通過破壞焦點要去的窗口來破壞焦點變化過程!焦點更改過程如下所示:

  • 將焦點移動至新的窗口。
  • 發送 WM_KILLFOCUS 消息給丟失焦點的窗口(如果有的話) 發送 WM_SETFOCUS 消息給新的焦點窗口(如果有的話)

但是在上面的第二步,我們銷毀了新的窗口。當焦點窗口被銷毀后,Windows 窗口管理器會嘗試找另外一個焦點窗口,最終它將輸入焦點設置到了輸入框控件本身。這將啟動一個遞歸式的焦點更改過程,告知編輯控件它現在再次具有輸入焦點。

讓我們看一下當用戶單擊工具提示窗口時焦點變化流程。

  • > 設置焦點到工具提示。
  • > 發送 WM_KILLFOCUS 消息到輸入框。
  • > EditSubclass 銷毀了工具提示窗口。
  • > Windows 窗口管理器將焦點設置到輸入框。
  • > WM_KILLFOCUS 不會發送給任何窗口。
  • > 發送 WM_SETFOCUS 給輸入框。
  • > EditSubclass 將 WM_SETFOCUS 消息傳遞給原始窗口過程。
  • > EditSubclass 將 WM_KILLFOCUS 傳遞給原始窗口過程。

你看到這里面的問題了嗎?

下面是到達原始編輯框窗口過程的消息流程:

WM_SETFOCUS(源自嵌套的焦點變化過程) WM_KILLFOCUS(源自原始的焦點變化過程)

就編輯控件而言,它獲得了焦點,然后失去了焦點。因此,它不會顯示輸入光標,因為編輯控件僅在具有焦點時才顯示光標,并且遞歸焦點變化會導致編輯控件認為它沒有焦點,即使它有焦點。

擺脫這種混亂的方法有很多。

首先,請注意,你不需要對編輯控件進行子類化,你可以對 EN_KILLFOCUS 通知做出反應。其次,你還可以通過向自己發布消息并在收到該發布消息后銷毀工具提示來響應 EN_KILLFOCUS。通過發布的消息執行此操作,你可以避免遞歸焦點變化,因為你的工作現在正在焦點更改周期之外完成的。

總結 請不要忽視這些細枝末節的問題,資深用戶會感受到你的程序里的各種細節。 如果是好的細節,你的程序會加分,萬一是不那么好的細節,那就不是一件好玩的事兒了,你的用戶會慢慢離你而去。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2018-05-23 15:13:50

程序員面試格式

2023-12-13 15:20:45

數據中心云計算人工智能

2020-09-28 11:14:57

線程數據語言

2021-02-24 07:40:38

React Hooks閉包

2011-08-08 15:06:36

布線綜合布線智能家居

2011-12-21 09:54:15

項目經理

2024-05-16 15:15:14

2010-06-29 15:54:36

UML建模

2011-05-26 17:37:11

Ajax

2012-07-04 14:40:37

Ajax

2010-09-29 12:59:53

MotorolaJ2ME

2023-08-25 10:49:37

數據中心服務器

2010-05-26 17:05:13

SVN提交

2010-08-09 11:23:24

Flex開發

2021-12-30 06:59:28

方法重寫面試

2010-10-08 09:38:42

mysql修改表

2016-11-24 15:54:06

androidJSONObject

2011-01-07 09:36:22

NullMySQL

2020-10-26 14:01:22

Java泛型

2013-09-29 10:36:08

VMware虛擬化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区在线 | 亚洲精品国产偷自在线观看 | 91精品国产综合久久香蕉922 | 影视先锋av资源噜噜 | 在线播放国产一区二区三区 | 国产成人一区 | 黄色综合| 91精品久久久久久久99 | 永久av | 亚洲a人| 午夜免费看 | 日韩在线中文字幕 | 成人字幕网zmw | 久久久高清| 日日碰狠狠躁久久躁婷婷 | 国产a区| 综合九九| 日本亚洲精品 | 亚洲a毛片 | 欧美成年人视频在线观看 | 日韩成人在线观看 | 天堂久久网| 激情婷婷 | 中文字幕免费中文 | 国产午夜精品一区二区三区四区 | 免费xxxx大片国产在线 | 国产一区二区精品在线 | 婷婷在线视频 | 欧美久操网| а_天堂中文最新版地址 | 日韩在线 | 老妇激情毛片免费 | 日本免费一区二区三区四区 | 香蕉视频1024 | 国产成人一区二区三区久久久 | 91精品麻豆日日躁夜夜躁 | 午夜精品久久久久久久久久久久久 | 精品久久视频 | 男女羞羞的网站 | 狠狠综合久久av一区二区小说 | 成人精品鲁一区一区二区 |