很多人觉得API是out了(虎喵喵对此很不理解,难道api不是如同高等数学一般的基本功么?!),但是许多学校还是将API设置为一门课程的,虎喵喵在两年前就上过。。。
关于API,课程的重点基本都在于消息机制,笔试的部分就是考这个的。现在也很难google到这内容,虎喵喵就结合一个基本的例子来说说这个问题好了。
hello word程序,咳咳,表鄙视我噢,这个说起来简单;
第一次接触api的童鞋 看到APIENTRY 就应该猜到,WinMain是入口函数。既然是入口函数,执行的时候当然是从MSG msg;这句开始(废话真多。。。)。
在调用了UpdateWindow(hWnd)之后,hello word 的窗口就会显示在显示器上,此时Windows就为程序维护一个消息队列。当用户用键盘或者鼠标输入数据并被Windows侦测到,windows将此输入事件转化成一个“消息”,并将此“消息”放入消息队列。
接下来就是消息循环的概念了,
在hello word中实现消息循环的代码为:
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
函数GetMessage(&msg, NULL, 0, 0)从堆栈中获得消息,并将取到的消息赋给指向msg的MSG结构指针。
当取到消息的域为WM_QUIT的时候GetMessage(&msg, NULL, 0, 0)返回0,则此while循环完成。
当取到消息的域不为WM_QUIT的时候,GetMessage(&msg, NULL, 0, 0)返回不会0,执行循环语句:
TranslateMessage(&msg)处理一些键盘消息转换;
之后的DispatchMessage(&msg)函数非常关键,它分发一个消息给窗口程序。通常消息从GetMessage函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息
大概就是这个样子的,讲解的很不专业,大家凑合着看~