花點時間了解消息,句柄和窗口

消息、句柄和窗口

一,為什么我要花時間研究這些東西

  對于我個人來說我不想做碼農,不想只知道拖控件,使用控件有的時候要了解一下底層,不知道你們有沒有想過這樣的一個問題,我們在C#中使用的的event事件是怎么觸發這個事件呢?事件無非就是對委托的封裝,在類內不管用public還是protected進行修飾,再類外都是private,只能在類外+=或者-=對事件進行注冊或者注銷。這能說明什么呢?這只能說明你已經將事件進行了綁定,說白了就是將方法的地址使用一種參數的形式進行了傳遞,從一個類傳遞到另一個類中,然后對這個方法進行實現。如果我們建一個Windows應用程序的時候,我們在重繪窗口是會復寫函數Onpaint(),復寫之后這個方法又是怎樣進行控制的呢?

二、原因何在?

  Windows應用程序是事件驅動的,也就是說,Windows應用程序將等待系統傳遞輸入,然后,應用程序的對輸入作出響應,將控件返回到系統上。系統和應用程序通過“Windows消息”通信。無論何時用戶移動鼠標或者單擊鍵盤時,系統就將消息發送到應用程序。應用程序有一個特殊的函數(稱為“窗口過程”)處理所接受的信息,以使對用戶的輸入作出響應。這個函數傳統上稱WndProc(),一般不必這樣稱呼它。可是,用戶交互作用并不只是創建應用程序要處理的消息,另一個示例是電源管理。恰好系統進入休眠模式之前,將消息發送到所有開放應用程序。如果應用程序并不準備進入休眠模式,他可以將消息發送回系統,說“此時不要進入睡眠模式”

  消息路由有兩種類型。一種是將消息發送到稱為消息隊列的“先進先出”隊列中。對于所創建的每個用戶界面線程來說,有一個系統消息隊列和一個特定線程隊列。當用戶移動鼠標是,相關信息放到系統消息隊列中。系統檢查該消息,以確定建議那個窗體處理該消息,然后將消息發送到窗口的WndProc()函數進行處理。鼠標和鍵盤消息就是排隊消息的示例。路由消息的其他方式,系統將消息直接發送到窗口過程中。通常情況下會發送不排隊消息通知直接影響窗口的事件。諸如重新設置大小以及窗口激活類的消息,將一部排隊消息的形式發送。

  每個應用程序可能由幾個窗體或者窗口組成。每個窗口都有一個窗口過程,來處理發送給它的消息。窗口過程將檢查每條消息,確定對消息進行哪些處理工作。將消息發送到窗口過程的進程,稱作“消息泵”。消息泵位于WinMain()函數中,二WinMain()是應用程序的入口點(類似于C#中的Main()方法)。消息有兩種類型:系統定義的消息和應用程序定義的消息。系統定義的消息是系統預定義的消息。應用程序定義的消息當然由應用程序定義。為了標示消息,有四個參數與他一起發送

  1.窗口句柄

  2.消息標識符

  3.兩個消息參數值,通常稱作lParam和wParam

  窗口句柄是一個long型的值,用于操作系統標示特殊的窗口。所創建的每個窗口都有一個句柄與它相關聯,這種句柄有時稱作hWnd。hWnd是在創建該窗口時由系統產生的,只要該窗口不被銷毀,它就保持為常量該消息所發送的句柄,是該消息窗口的句柄。

  消息標識符是一個標識消息內同的指定變量。所處理的常見消息是WM_PAINT消息。這是一個系統定義的消息,告訴該窗口它要重新繪制其自身。系統定義的消息分為30個不同的類別。每個類別都是由該消息的兩個或者三個字符前綴定義的。就WM_PAINT消息而言,WM表示普通的窗口消息。其他類別包括用于編輯控件的EM、用于常用對話框的CDM,一集用于選項卡空間的TCM。每個消息標識符都是有一個在Windows SDK 中定義的相應符號標識符。

  lParam和wParam這兩個消息參數幾乎可以包含任何事物。他們可以包括位標志、整型值、對象引用、結構引用、對于回調函數的引用等。如果消息不使用參數,一般就將其設置為null。

?

?

轉載于:https://www.cnblogs.com/dwlsxj/archive/2013/03/22/Winform.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274317.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274317.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274317.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ux設計中的各種地圖_如何在UX設計中使用顏色

ux設計中的各種地圖Color is the mother tongue of the subconscious.顏色是潛意識的母語。 — Carl Jung—榮格 Color has more to say than meets the eye. As a building block of visual language, color highlights, guides attention, and unifies elements. In UX, co…

《Two Dozen Short Lessons in Haskell》學習(十八) - 交互式鍵盤輸入和屏幕輸出

《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻譯為Haskell二十四學時教程,該書如果不用于贏利,可以任意發布,但需要保留他們的copyright)這本書是學習 Ha…

figma設計_Figma中簡單,可重復使用的設計系統

figma設計Putting together a design system may seem like an unnecessary hassle. It’s often easier to jump straight into designing things without having to worry about styles, components, or libraries. Some might even argue that when it comes to smaller pro…

WPF 關于鼠標事件和坐標

Mouse.GetPosition(window);可以在任何時間獲得相對任意元素的鼠標位置 Mouse.Capture(el);可以讓某個元素獲得所有的鼠標事件不管他應不應該的到鼠標事件 Mouse.Capture(null);解除轉載于:https://www.cnblogs.com/wangjixianyun/archive/2013/03/25/2980953.html

訪問25%無法訪問的人-如何設計可訪問性

We’re increasingly dependent on the internet and computers for everything we do — this has become starkly more obvious through the COVID19 global pandemic.我們所做的一切都越來越依賴于互聯網和計算機-通過COVID19全球大流行,這一點變得更加明顯。 F…

DDD:實體如何處理外部依賴

場景 修改用戶名時,要驗證用戶名的唯一性。 實現1 1 public class User 2 { 3   public void ChangeUsername(string newUsername) 4   { 5   //使用服務定位器獲取IUsernameUniqueService ,執行驗證。 6   } 7 } 實現…

架構師論壇 創業_我在早期創業時作為設計師學到的東西

架構師論壇 創業For over 2 years at a young product company, I collaborated with talented engineering folks for a 0 → 1 suite of products. Here are my learnings and key takeaways. Of course, these are my views and do not represent those of my employers or …

HFileOutputFormat與TotalOrderPartitioner

最近需要為一些數據增加隨機讀的功能,于是采用生成HFile再bulk load進HBase的方式。 運行的時候map很快完成,reduce在sort階段花費時間很長,reducer用的是KeyValueSortReducer而且只有一個,這就形成了單reducer全排序的瓶頸。于是…

qt按鈕禁用和激活禁用_為什么試探法只是經驗法則:禁用按鈕的情況

qt按鈕禁用和激活禁用Most user experience designers will be familiar with Jackob Nielsen’s 10 usability heuristics. They are widely cited and a great set of broad rules of thumb to follow when designing user interfaces.大多數用戶體驗設計師將熟悉Jackob Niel…

Teach Yourself Java 2 in 21 Days 書中樣例代碼實踐

找了好幾書JAVA的書,看了幾章,都看不下去。 我覺得適合《Teach Yourself Java 2 in 21 Days》(Rogers Cadenhead Laura Lemay)還是適合我的。 孫衛琴那本,我感覺就羅嗦多了沒到我點子上。 接口,抽象類這些內…

好奇心機制_好奇心問題

好奇心機制For my past two jobs I’ve posted a question every week in my team chat and learned so much about my co-workers. Give it a try! :D對于過去的兩個工作,我每周都會在團隊聊天中發布一個問題,并且對我的同事了解很多。 試試看&#xff…

20130328java基礎學習筆記-循環結構for以及for,while循環區別

1.循環結構:for講解class ForDemo{ public static void main(String[] args) { /* for(初始化表達式;循環條件表達式;循環后的操作表達式) { 執行語句;(循環體) } */ for(int x 1; x<3; x) { …

小程序設計避免犯什么錯_新設計師犯下的5種印刷錯誤以及如何避免

小程序設計避免犯什么錯Over the last year and a half, I’ve had the opportunity to teach the basics of typography to undergraduate graphic design students. During this time, I’ve noticed some common mistakes that my students make when first learning how to…

移動設備web文字單位_移動設備如何塑造現代Web設計

移動設備web文字單位I was working with a nonprofit earlier this month on redesigning their website and during the first meeting, I proposed a very standard idea: the home page needed to tell a story and guide the intended user through the intended process (…

hp-ux修改時區方法_UX研究人員可以倡導人類的6種方法

hp-ux修改時區方法In the UX world, we often hear terms like “user-centered,” “human-centered,” and “customer-centered.” We believe that in order to be innovative, we need to center experiences that are authentic, intuitive, and practical.在UX世界中&am…

2013年3月百度之星A題

偽隨機數生成器 題目描述 baidu熊最近在學習隨機算法&#xff0c;于是他決定自己做一個隨機數生成器。 這個隨機數生成器通過三個參數c, q, n作為種子, 然后它就可以通過以下方式生成偽隨機數序列&#xff1a; m0 c, mi1 (q2mi 1) mod 2n, for all i > 0. 因為一些奇怪的…

為什么張揚的人別人很討厭_為什么每個人總是討厭重新設計,即使他們很好

為什么張揚的人別人很討厭重點 (Top highlight)微處理 (Microprocessing) In Microprocessing, columnist Angela Lashbrook aims to improve your relationship with technology every week. Microprocessing goes deep on the little things that define your online life to…

轉載--C語言:浮點數在內存中的表示

單精度浮點數&#xff1a; 1位符號位 8位階碼位 23位尾數 雙精度浮點數&#xff1a; 1位符號位 8位階碼位 52位尾數 實數在內存中以規范化的浮點數存放&#xff0c;包括數符、階碼、尾數。數的精度取決于尾數的位數。比如32位機上float型為23位 double型為52位。…

學習ui設計_如果您想學習UI設計,該怎么辦

學習ui設計There is a question that is always asked when we want to learn something new.當我們想學習新東西時&#xff0c;總會問一個問題。 Where to start?從哪兒開始&#xff1f; This is also being my question when I want to learn UI design. In this article, …

Christmas

html5 game - Christmasloading......轉載于:https://www.cnblogs.com/yorhom/archive/2013/04/05/3001116.html