微軟視窗作業系统内部訊息流程基本認識簡介

無論你嘅界面程式喺用C++,MFC,VB,VB.NET,C++.NET,C#或其它語言嚟冩都走唔出WIN32API嘅框框(如果你用Spy++去探討就明白架嘞);事關到最後嗰作業系统(OS)依然用PostMessage命令將個訊息(message)轉送到所指定嘅界面度。又或者我哋都可以用SendMessage命令嚟达到某種效果。

喺度大家要搞清楚一样嘢先;就喺微軟視窗作業系统里面嘅每一個控制項(例如:Button, Listview, Treeview, Edit, Static以及其它)都可以稱之為視窗(window)。因為當你建立一個新嘅視窗或控制項時,作業系统就编一個身份俾呢個視窗或控制項。而呢個身份又名為HWND嘞,直到此視窗或控制項被毁滅為止。

呢個可以喺下面嗰WIN32 API里面領略到出嚟;假設你要喺整個作業系统度揾某個視窗或控制項時,你會用FindWindowFindWindowEx函式(API)而呢两個函式就運算番所揾到嘅視窗或控制項嘅HWND嘞。之後就。。。基本上可以講呢個視窗或控制項就被你為所欲為嘞。。。變大變细(MoveWindow),要殺(DestroyWindow),要現型或隐型(ShowWindow)就一切在你手中;咁除咗所提及嗰幾個函式,其實仲有好多好多等住你嚟學架~

家陣我哋以經知到HWND喺扮演一個好重要嘅角色喺整個界面程式里面。下一步就要再深入了解個作業系统内部點样好精确咁將啲滑鼠同键盤訊息送到每一個所指定嘅程式度嘞。當你明白咗呢一點後,你就會發觉其實整個作業系统,界面程式訊息交流嘅函式(PostMessage或SendMessage)喺走唔出四個引數串列(arguement)。。。
  SendMessagehWndMsgwParam lParam

除咗以上嗰四個基本引數串列,微軟視窗作業系统内部訊息仲有個獨特之處。。。就喺每個視窗或控制項都有自己嘅名稱格式。例如:

    格式  訊息種纇
  ABM  Application desktop toolbar 
  BM   Button control 
  CB   Combo box control 
  CBEM Extended combo box control
  CDM  Common dialog box 
  DBT  Device 
  DL   Drag list box 
  DM   Default push button control 
  DTM  Date and time picker control
  EM   Edit control 
  HDM  Header control 
  HKM  Hot key control
  IPM  IP address control
  LB   List box control 
  LVM  List view control 
  MCM  Month calendar control
  PBM  Progress bar 
  PGM  Pager control
  PSM  Property sheet 
  RB   Rebar control
  SB   Status bar window 
  SBM  Scroll bar control 
  STM  Static control 
  TB   Toolbar 
  TBM  Trackbar 
  TCM  Tab control 
  TTM  Tooltip control 
  TVM  Tree-view control 
  UDM  Up-down control
  WM   General window

重依四個引數串列中嘅第一個就以經好清楚指明個訊息喺要送去某個拥有相同hWnd嘅視窗或控制項。基于hWnd喺整個作業系统里面喺獨一無二。。。所以個訊息可以好精确咁送到去嗰視窗或控制項度嘞。除非。。。有其它高手用SubClass或Hooking嚟偷或讀取你界面嘅訊息。。。咁你就好有可能失去依啲訊息嘞。

當然,整個微軟視窗作業系统更喺冇咁簡單啦。。。但喺我所提及嗰两個函式喺最常見兼常用嗰隻。如果你想對微軟視窗作業系统内部訊息流程更深一層了解嘅話;就不妨去你左近嘅書局揾一揾以下依两本我稱之為秘笈嘅参考書嚟研究研究吓啦。我就以經拥有同讀過嘞。

Definitive Guide To WIN32API (作者:Charles Petzold)
此書教你如何運用native windows programming application interfaces (APIs)同C語言嚟冩程式。讀完此書你會認識更多更多嘅Win32 APIs,打從GWES,Dlls,IPC,
Multitask到Multithreading。


Subclass & Hooking with Visual Basic (作者:Stephen Teilbet)
如果你喺用VB語言嚟冩程式,此書一定啱嗮你。因為此書由淺至深咁一一為你打開微軟視窗作業系统内部訊息流程疑問。當你讀完此書後,你一定講冇介绍錯吖~


以上乃喺本人個人見解;如有錯誤之處,請多多指點。

posted on 2004-09-08 22:17  克仔  阅读(1096)  评论(1编辑  收藏  举报