资源描述:
《Windows编程杂谈》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Windows程序的基本结构1、最小的Windows程序应该保护两个函数:WinMain()和窗口函数2、WinMain作为程序入口,应该执行下列功能:a)定义一个窗口类b)注册这个类c)创建该类的窗口d)显示窗口e)开始运行消息循环3、窗口函数响应相关消息。4、例程,我所见到的最小的Windows程序,请问谁见过更小的?#includecharszWinName[]="MyWin";LRESULTCALLBACKWindowFunc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain
2、(HINSTANCEhThisInst,HINSTANCEhPrevInst,LPSTRlpszArgs,intnWinMode){HWNDhwnd;MSGmsg;WNDCLASSEXwc1;wc1.cbSize=sizeof(WNDCLASSEX);wc1.hInstance=hThisInst;wc1.lpszClassName=szWinName;wc1.lpfnWndProc=WindowFunc;wc1.style=0;wc1.hIcon=LoadIcon(NULL,IDI_APPLICATION);wc1.hIconSm=Lo
3、adIcon(NULL,IDI_WINLOGO);wc1.hCursor=LoadCursor(NULL,IDC_ARROW);wc1.lpszMenuName=NULL;wc1.cbClsExtra=0;wc1.cbWndExtra=0;wc1.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);if(!RegisterClassEx(&wc1))return0;hwnd=CreateWindow(szWinName,"Clock",WS_OVERLAPPEDWINDOW,CW_USEDE
4、FAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,HWND_DESKTOP,NULL,hThisInst,NULL);ShowWindow(hwnd,nWinMode);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}returnmsg.wParam;}LRESULTCALLBACKWindowFunc(HWNDhwnd,UINTmessage,W
5、PARAMwParam,LPARAMlParam){switch(message){caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,message,wParam,lParam);}return0;}1、所有的Windows执行程序都具有这样的结构,现在我们通常使用的MFC对这个过程进行了包装。可以参考候捷的《深入浅出MFC》摘自候捷《深入浅出MFC》(繁体第二版,394页)。6、Windows中的消息从上面的文章中,我们会有一个问题:使用SD
6、K写的Windows与MFC中的消息机制有什么样的不同?使用SDK写的Windows程序中管理消息的重点是GetMessage和DispatchMessage两个函数注:TranslateMessage负责将虚拟键消息转换为字符信息。GetMessage(LPMSGlpMsg,HWNDhWnd,UINTwMsgFilterMin,UINTwMsgFilterMax);功能:获取与hWnd指定的窗口相关的且wMsgFilterMin,wMsgFilterMax参数制定的消息值范围内的消息。当hWnd为NULL时,则GetMessage获取属
7、于调用该函数的的应用程序的任一个窗口的消息。当wMsgFilterMin,wMsgFilterMax为0时,则返回所有可用的消息。在这个函数执行的时候,程序将控制权交给Windows,直到Windows的消息队列中出现了程序相关的消息,并且Windows愿意让GetMessage继续运行下去的时候,GetMessage将这个消息带回程序,由DispatchMessage将这个消息分发给窗口函数执行。这里的窗口程序就是前面注册过的那个WNDCLASSEX结构中WindowFunc。大家可能注意到了使用SDK写的Windows程序中的消息响应
8、使用了一个switch语句。当然我们也可以不这么写。让我们看看MFC中是如何处理消息响应的。我们在使用MFC写的Windows程序中看不到GetMessage和DispatchMessage函