最近在项目中发现对windows API还是不熟悉,用到的时候只能现查,在遇到某些问题的时候由于理解不透彻还是遇到很多问题,所以,决定仔细研究一下Windows程序设计的API。
使用VS2010创建Windows应用程序,会生成如下4个函数:
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) ATOM MyRegisterClass(HINSTANCE hInstance) BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
其中第一个函数当然是主函数,至于主函数奇怪的名称 _tWinMain只是WinMain的unicode版本,主函数要调用第二和第三个函数。
第二个函数主要是设置了一个WNDCLASS的窗口属性,其中最重要的是此函数设置了窗口对应的窗口过程函数,就是第四个函数。
而第三个函数主要是调用CreateWindow创建了一个真实的窗体,并且显示。这些都完后,主函数里还有一个GetMessage函数,这个函数在一个while循环中,在应用程序的生命期内获取消息,然后使用WndProc定义的消息响应做相应的操作。
其中,消息循环里有两句话:
TranslateMessage(&msg); DispatchMessage(&msg);
第一句是将msg传递给Windows,进行一些键盘转换。
第二句是windows将该消息发送给适当的窗口过程,让它进行消息处理,也就是说,windows将调用相应的窗口过程,也就是WndProc函数。
注意:这里WndProc函数是由windows进行调用的,而不是程序调用的,而如果想在我们的程序中进行调用,windows提供了API: SendMessage, PostMessage当然两个函数在处理消息的时候有所区别。