Jadual Kandungan
1.1 消息队列
1.2 消息队列的类型
1.3 队列消息和非队列消息
二、消息循环和GetMessage/PeekMessage
2.1 消息循环
2.2 GetMessage和PeekMessage
" >2.3 GetMessage/PeekMessage获取消息的过程
endMessage和PostMessage" >三、SendMessage和PostMessage
Rumah Operasi dan penyelenggaraan operasi dan penyelenggaraan tingkap Win32 SDK基础(十一)之消息队列和GetMessage/PeekMessage、SendMessage/Postmesage的详解

Win32 SDK基础(十一)之消息队列和GetMessage/PeekMessage、SendMessage/Postmesage的详解

Jun 06, 2017 am 10:09 AM

一、消息队列

1.1 消息队列

        消息队列是用来存放消息的一个队列,消息在队列中先入先出,所有的窗口程序都具有消息队列,程序可以从队列中获取消息。

1.2 消息队列的类型

        系统消息队列:由操作系统维护的消息队列,存放系统产生的消息,如鼠标、键盘消息等等。

        程序消息队列:属于每一个应用程序(线程)的消息队列,用应用程序维护。

        当产生鼠标、键盘等消息时,消息先存放到系统消息队列,然后操作系统根据存放的消息找到对应的窗口的消息队列,将消息投递到窗口的消息队列中。

1.3 队列消息和非队列消息

        队列消息:消息发出后,首先放入队列,然后通过消息循环获取。常见的队列消息:键盘、鼠标、定时器消息等等。

        非队列消息:消息发出后,直接找到窗口的消息处理函数,调用消息处理函数进行处理,无需经过消息队列。常见的非队列消息:WM_PAINT、WM_SIZE等等。

二、消息循环和GetMessage/PeekMessage

2.1 消息循环

        一般的消息循环如下:

void Message(HWND hWnd)  
{  
	MSG nMsg = { 0 };
	while (GetMessage(&nMsg, hWnd, 0, 0))  
	{  
		TranslateMessage(&nMsg);  
		DispatchMessage(&nMsg);  

		if(nMsg.message == WM_PAINT)
		{
			char buff[30]={};
			sprintf(buff,"处理消息%d\n",nMsg.message);
			WriteConsole(hOutput,buff,sizeof(buff),NULL,NULL);
		}
	}  
}
Salin selepas log masuk

GetMessage/PeekMessage:从程序的消息队列当中获取消息。

TranslateMessage:将键盘上的按键等消息翻译成字符消息。

DispatchMessage:将翻译后的消息再次放入到程序的消息队列中。

2.2 GetMessage和PeekMessage

GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
)
Salin selepas log masuk

lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
hWnd:取得其消息的窗口的句柄。当其值取NULL时,GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
wMsgFilterMin:指定被检索的最小消息值的整数
wMsgFilterMax:指定被检索的最大消息值的整数。
返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是-1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。

BOOL PeekMessage(
LPMSG IpMsg,
HWND hWnd,
UINT wMSGfilterMin,
UINT wMsgFilterMax,
UINT wRemoveMsg
);
Salin selepas log masuk

lpMsg:接收消息信息的MSG结构指针。
hWnd:其消息被检查的窗口句柄。
wMsgFilterMin:指定被检查的消息范围里的第一个消息。
wMsgFilterMax:指定被检查的消息范围里的最后一个消息。
wRemoveMsg:确定消息如何被处理。此参数可取下列值之一:

意义

PM_NOREMOVE

PeekMessage处理后,消息不从队列里除掉。

PM_REMOVE

PeekMessage处理后,消息从队列里除掉。

PM_NOYIELD

此标志使系统不释放等待调用程序空闲的线程。可将PM_NOYIELD随意组合到PM_NOREMOVE或PM_REMOVE。


GetMessage和PeekMessage的主要区别在于:GetMessage是阻塞函数,它会在消息循环中会一直阻塞直到消息队列中出现了消息可以被获取,而PeekMessage是非阻塞函数,不管有没有获取到消息队列中的消息,它都会返回。PeekMessage更多用来检测消息队里中是否有消息,它的最后一个参数可以用来指定获取到消息后要不要把消息从消息队列中移除,通常情况下通过PeekMessage检测到消息队列有消息之后,再调用GetMessage区获取。

2.3 GetMessage/PeekMessage获取消息的过程

1、先在程序的消息队列中查找消息,如果有队列消息,就取出消息。

2、如果程序的消息队列中没有消息,向系统的消息队列获取属于本程序的消息。如果系统的消息队列中有属于本程序的消息,系统的消息队列会将消息分发到本程序的消息队列中。

3、如果系统的消息队列也没有消息,检查窗口需要绘制的区域是否需要重绘,如果发现有需要重绘的区域,产生WM_PAINT消息。

4、如果没有重新绘制区域,检查是否具有到时的定时器,如果有产生WM_TIMER定时器消息。

5、如果没有到时的定时器,整理程序的资源、内存等等。

三、SendMessage和PostMessage

LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM IParam
)
Salin selepas log masuk

hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。

返回值:返回值指定消息处理的结果,依赖于所发送的消息。

BOOL WINAPI PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
Salin selepas log masuk

hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
LParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零,否则函数调用返回值为零

1、SendMessage

       发送消息到指定的窗口,并等候对方将消息处理,为阻塞函数,获取消息的执行结果后返回。主要需要发送非队列消息,发送的消息不经过消息队列。

2、PostMessage

        发送消息到程序的消息队列,不管消息有没有被处理都会立即返回,用于队列消息的发送

Atas ialah kandungan terperinci Win32 SDK基础(十一)之消息队列和GetMessage/PeekMessage、SendMessage/Postmesage的详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Windows 11 22H2 membawa reka bentuk mika/akrilik kepada lebih banyak apl desktop Win32 Windows 11 22H2 membawa reka bentuk mika/akrilik kepada lebih banyak apl desktop Win32 Apr 14, 2023 pm 04:58 PM

Apl asli Windows 11 (seperti File Explorer) dan apl cangkerang lain menggunakan penjuru bulat dan elemen Reka Bentuk Fasih (seperti Akrilik) secara lalai. Selain sudut bulat, satu lagi ciri reka bentuk penting Windows 11 ialah bahan seperti mika, yang menjajarkan warna latar belakang aplikasi dengan desktop. Mika serupa dengan akrilik tetapi berfungsi sedikit berbeza. Seperti yang diterangkan oleh Microsoft, Bahan Windows Mica mencipta "hierarki warna dengan menjajarkan latar belakang dengan aplikasi

Trojan/win32.casdet Rfn dalam Windows 11 Trojan/win32.casdet Rfn dalam Windows 11 Apr 14, 2023 pm 02:49 PM

Perisian antivirus kadangkala boleh memaparkan amaran yang menyatakan Trojan/win11.casdet rfn pada komputer riba Windows 32. Ia menunjukkan bahawa PC dijangkiti malware Trojan, menyebabkan ia tidak berfungsi. Nasib baik, terdapat beberapa cara yang mungkin untuk menyelesaikan masalah ini, seperti yang dijelaskan di bawah. Selain itu, anda mungkin berminat dengan panduan terperinci kami tentang sama ada cdn.districtm.io ialah pop timbul/virus/perisian hasad atau tidak. Apakah Trojan/win32.casdet rfn? Trojan/win32.casdet rfn ialah jangkitan virus Trojan yang teruk yang boleh mengatasi sistem dan membunuh prosesnya, menjadikannya mudah

Apakah perbezaan antara win32 dan win64 Apakah perbezaan antara win32 dan win64 May 29, 2023 pm 05:22 PM

Perbezaan antara win32 dan win64 ialah: 1. win32 merujuk kepada persekitaran 32-bit sistem pengendalian Microsoft Windows, dan win64 merujuk kepada versi 64-bit sistem pengendalian Microsoft Windows, yang lebih stabil dan lebih pantas daripada 32 -versi bit; 2. win32 menyokong sehingga 2G memori, win64 mesti mempunyai lebih daripada 4G memori;

Microsoft mula menguji reka bentuk OneNote baharu untuk Windows 11 Microsoft mula menguji reka bentuk OneNote baharu untuk Windows 11 Apr 19, 2023 pm 08:01 PM

Kembali pada Ogos 2021, Microsoft berjanji bahawa OneNote pada Windows 10 dan Windows 11 akan menerima satu siri kemas kini ciri utama dalam beberapa bulan akan datang, kerana gergasi teknologi itu menyatukan berbilang versi aplikasi pengambilan nota menjadi satu bahagian daripada pelanggan. OneNote telah mengalami banyak perubahan sejak beberapa tahun yang lalu. Pada tahun 2018, apabila Microsoft benar-benar mahu orang ramai menggunakan versi UWP OneNote, syarikat itu berhenti menggabungkan versi asal dan kaya ciri OneNote dengan aplikasi Office yang diprapasang. Sebaliknya, Microsoft hanya menyediakan klien UWP dan menambah ciri baharu untuk versi moden. Microsoft kemudiannya berubah

Microsoft mengeluarkan pembetulan untuk Ralat Behavior:Win32/Hive.ZY dalam Windows Defender Microsoft mengeluarkan pembetulan untuk Ralat Behavior:Win32/Hive.ZY dalam Windows Defender Apr 28, 2023 pm 04:01 PM

Seorang pegawai Microsoft mengesahkan laporan meluas bahawa Google Chrome, ChromiumEdge, Discord dan beberapa aplikasi lain telah dibenderakan sebagai "Behavior:Win32/Hive.ZY" oleh perisian antivirus terbina dalam Microsoft "WindowsDefender". Gergasi teknologi itu mengesahkan dalam satu kenyataan bahawa ia sedang mengusahakan pembetulan yang akan dilancarkan kepada semua orang dalam beberapa jam akan datang. Jadi apakah sebenarnya "Behavior:Win32/Hive.ZY"? Menurut dokumen yang disiarkan pada portal keselamatan Microsoft, mana-mana fail bertanda "Behavior:Win32/Hive.ZY" ialah

Apakah yang baharu dalam Microsoft Store pada Windows 11? Apakah yang baharu dalam Microsoft Store pada Windows 11? Apr 28, 2023 pm 06:13 PM

Microsoft meletakkan banyak ciri baharu ke dalam Microsoft Store. Ini akan memberi manfaat kepada pengguna akhir dan pembangun kerana syarikat meneruskan usahanya untuk menjadikan Gedung lebih baik untuk semua orang yang menggunakan Windows. Salah satu sorotan terbesar perubahan ini ialah ciri "Pulihkan Apl" baharu dalam Microsoft Store pada Windows 11. Ia akan disambungkan ke akaun Microsoft pengguna, jadi selepas log masuk ke Windows 11 PC baharu, mereka boleh memulihkan aplikasi secara automatik dengan hanya beberapa klik. "Untuk memudahkan pelanggan beralih kepada PC baharu mereka dengan cepat dan lancar, kami akan memperkenalkan

Cara membetulkan tingkah laku Windows Defender: Makluman Win32/Hive.ZY Cara membetulkan tingkah laku Windows Defender: Makluman Win32/Hive.ZY May 06, 2023 am 08:04 AM

Ramai pengguna Windows 11 dan 10 bermasalah dengan melihat pemberitahuan amaran daripada Windows Defender yang menyatakan bahawa ancaman "Behavior: Win32/Hive.ZY" telah dikesan. Menurut laporan, amaran atau amaran Windows Defender ini dicetuskan apabila pengguna cuba membuka beberapa aplikasi yang biasa digunakan seperti Google Chrome atau Chromium Edge, Whatsapp, Discord dan Spotify. Walaupun anda telah menyekat ancaman ini pada PC anda, ia akan muncul dengan mesej MicrosoftDefenderAntivi pada kali seterusnya anda membuka aplikasi yang terjejas ini

Perisian reka bentuk grafik Win32 Canva melancarkan alat AI percuma untuk mencabar Adobe gergasi Perisian reka bentuk grafik Win32 Canva melancarkan alat AI percuma untuk mencabar Adobe gergasi Mar 05, 2024 pm 04:34 PM

Menurut berita baru-baru ini, Canva telah melancarkan satu siri fungsi alat imej AI dalam usaha untuk bersaing dengan Firefly Adobe Ia bertujuan untuk memudahkan proses penciptaan kandungan di tempat kerja, menjadikannya lebih mudah dan lebih cekap untuk profesional bukan reka bentuk untuk mencipta kandungan. , dan membenarkan pereka grafik untuk Fokus pada tugas kritikal misi dan mencabar penguasaan Adobe dalam pasaran. Menurut laporan, Visual Worksuite Canva telah menyepadukan BrandHub baharu, yang bertujuan untuk menyediakan pengguna dengan satu set alatan untuk membantu mereka memastikan konsistensi dengan identiti visual organisasi mereka. Pengguna boleh menggunakan alat ini untuk mencipta BrandKit (kit alat IP jenama) yang mengandungi maklumat budaya syarikat (seperti LOGO, fon, warna dan gaya reka bentuk bersatu).

See all articles