为啥说Windows系统是由消息机制驱动的?什么是所谓的消息机制?

2023-03-03 09:52:15 来源:创视网

Windows系统是由消息机制驱动的

Windows系统是由消息机制驱动的,每个线程如果建立了一个窗口,则由系统分配一个消息队列用于窗口消息的处理。另外,消息也可以不经过消息队列而利用SendMessage函数直接发送给窗口,窗口过程将处理这个消息,但只有当消息被处理之后,SendMessage才能返回到调用程序。下面结合两个Delphi程序,讨论如何利用SendMessage向控件发送消息和控件对这种消息的响应。

用SendMessage向控件发送消息

在编程中,有时需要控件以特殊的风格显示,而这种要求又无法通过设置控件属性实现。例如,读取客户列表并显示在下拉框供用户选择,如果下拉框宽度太窄,则不能全部显示;如果将宽度定得太宽,界面又有不紧凑之感。因此希望能在运行期动态地确定下拉框显示区域的宽度,这种要求如果不用SendMessage函数就很难实现。

解决办法是,在读数据库时计算字符串的显示宽度,用显示宽度的最大值确定下拉框显示区域的宽度。再用SendMessage函数向下拉框发送CB_SETDropPEDWIDTH消息和宽度值,下拉框根据消息中传来的信息,就可以进行正确显示。

部分源程序代码如下:

i:=0; //计数

MaxWidth:=0;

Query1.SQL.Clear;

Query1.SQL.Add(‘select Company from Customer’);

Query1.Open;

//读客户列表到下拉框

while not Query1.Eof do begin

ComboBox1.Items.add(Query1.FieldByName

(‘Company’).AsString);

Width:=ComboBox1.Font.Size * Length

(ComboBox1.Items[i]);

if Width>MaxWidth then

MaxWidth:=Width; //找出最大值

Query1.Next;

i:=i+1;

end;

Query1.Close;

ComboBox1.Text:=ComboBox1.Items[0];

什么是所谓的消息机制?

在Windows中发生的一切都可以用消息来表示,消息用于告诉操作系统发生了什么,所有的Windows应用程序都是消息驱动的。 一个消息是由消息的名称(UINT)和两个参数(WPARAM, LPARAM)组成。消息的参数中包含有重要的信息。例如对鼠标消息而言,LPARAM中一般包含鼠标的位置信息,而WPARAM参数中包含了发生该消息时,SHIFT、CTRL等键的状态信息,对于不同的消息类型来说,两个参数也都相应地具有明确意义。

x 广告
x 广告

Copyright   2015-2022 财富赢家网版权所有  联系邮箱:920 891 263@qq.com

京ICP备2022016840号-48