一个典型的win32窗口应用程序的框架是这样的: 程序入口点(winmain函数)-->注册窗口类(调用registerclass函数或registerclassex函数)-->创建主窗口(调用createwindow函数或createwindowex函数)-->显示主窗口(调用showwindow函数)-->更新主窗口(调用updatewindow函数)-->进入消息循环(getmessage.translatemessage.dispatchmessage)并处理各种windows消息(窗口过程函数)-->程序出口点(winmain返回).就像下面这个例子一样:
int winapi _twinmain( hinstance hinstance,hinstance,lptstr lpcmdline,int ncmdshow){ //注册窗口类 wndclassex wcex; wcex.cbsize = sizeof(wndclassex); wcex.style = cs_hredraw | cs_vredraw; wcex.lpfnwndproc = (wndproc)wndproc; wcex.cbclsextra = 0; wcex.cbwndextra = 0; wcex.hinstance = hinstance; wcex.hicon = null; wcex.hcursor = loadcursor(null, idc_arrow); wcex.hbrbackground = (hbrush)(color_window+1); wcex.lpszmenuname = null; wcex.lpszclassname = szwindowclass; wcex.hiconsm = null; registerclassex(&wcex); //创建主窗口 hwnd hwnd = createwindowex(0,szwindowclass, szwindowtitle, ws_overlappedwindow, 128, 96, 512, 480, hwnd_desktop, null, hinstance, null); if (!hwnd) return false; //显示并更新主窗口 showwindow(hwnd,ncmdshow); updatewindow(hwnd); // 进入消息循环 msg msg; while (getmessage(&msg, null, 0, 0)) { translatemessage(&msg); dispatchmessage(&msg); } return msg.wparam; //程序退出} 【程序编程相关:MFC界面包装类(多线程时成员函数调用的】
#include<windows.h>#include<tchar.h>//窗口类名与窗口标题tchar szwindowclass[]=_t("hellowindows");tchar szwindowtitle[]=_t("this is the main window");//窗口过程函数lresult callback wndproc(hwnd hwnd, uint msg, wparam wparam, lparam lparam){ //logmessage(logfile,msg,wparam,lparam);// switch(msg) { case wm_destroy: postquitmessage(0); return 0; default: return defwindowproc(hwnd,msg,wparam,lparam); }} 【推荐阅读:《向其他程序的ListView控件发送L】
这个例子很十分简单,只是显示一个窗口就完事了;不过麻雀虽小,五脏俱全,它基本上可以作为一个win32窗口程序的框架了.下面来看它的窗口过程wndproc,它只处理了一个消息:wm_destroy,其余的消息都交给了windows去处理(调用defwindowproc).对于一个实际的windows程序来说,要在窗口过程中处理的消息会很多;然而windows消息成百上千,无论你处理多少消息,剩下的你还是得调用defwindowproc交给windows系统去处理.这次我们就来看看,从程序启动到退出,defwindowproc到底要帮我们做多少的工作. 实验的思想很简单,把所有传递给窗口过程的消息都记录在一个log文件中,我们就可以察看在一个程序的生命过程中的所有消息了.在上面的例子中,我们在窗口函数wndproc的最开始调用一个方法(形如注释掉的那一行:logmessage(logfile,msg,wparam,lparam)),把传递来的消息类型,wparam参数,lparam参数顺序都记录下来,就会形成一个windows消息log文件了. 下面是两次实验的结果(假设上面的例子编译后得到hellowin.exe): 实验一:在文件管理其中选中hellowin.exe,按回车键启动,显示主窗口后马上按下alt+f4把它关闭,得到的log文件如下:
... 下一页