程序运行原理

    程序运行原理(针对Windows应用程序,且在SDK纯手工API环境下)

     至于窗口是怎样产生的,说简单也无非就是先自定义一个窗口类函数并实例化一个窗口类结构体(WNDCLASS)变量 然后用这个结构体变量调用窗口类结构体的成员变量并分别为其赋值,完成窗口的设计. 然后将这个结构体变量的内存地址传给RegisterClassExW完成窗口的注册。


    接下来再定义一个主窗口的句柄 (即窗口的结构体类型的变量)和一个一个实例句柄(即你的程序的结构体类型的变量),然后调用CreateWindowW 并将返回值赋给你的主窗口句柄完成窗口的创建,但此时窗口在窗口变量当中即还在内存当中所以你还看不到.所以要想看到还得调用ShowWindow函数并把你要显示的哪窗口的变量传给它,这样窗口就出现在桌面上了 当然最好再调用UpdateWindow把窗口重绘一下,(至于为什么将在MFC当中讲解).


    此时你的程序的窗口是显示出来了,不过这个程序什么也不能干,空空如也啊!所以要想让它干活儿 你就得接着上面的继续定义一个干活的函数,即回调函数,每个窗口都有一个这样的函数,他的第一个参数指明了 自己属于哪个窗口而且这个函数你已经告诉了窗口类结构体(WNDCLASS)的一个成员变量。 这个函数的内部是一个多分支选择语句switch,各种情况便是各种消息。在此先把各种消息和处理消息的函数等全部定义好。  

 

    接下来你在主函数当中也就是wWinMain中实例化一个MSG类型的结构体变量(即消息结构体变量) 变量名随便取,就起个小写的msg吧,然后再定义一个while死当循环语句即消息循环,条件是判是否断得到 消息即GetMessageW,返回值是真还是假也就是是1还是0。   


    好了,开始吧,还是WindowsXP啊,等所有自启动程序完成后,XP便进入了一长达数百年的死循环状态(排除意外,这个包括你发出的消息,比如点了一鼠标,按了一下键盘。) 这时你用鼠标双击了QQ图标,XP通过鼠标的驱动程序得知,呀!发生了鼠标双击事件,然而立即将这 个消息发送到它自己的消息队列当中,通过进程调度等等一系列判断后,如果这时队列不忙,哪么XP马上 执行QQ内部调用自己的函数,这些函数就是上面讲的,当然这只是一小部分。 

    首先从wWinmain进入,分配一个属于QQ自己的消息队列即:为上面的哪个msg消息结构体变量分配一块内 存区具体分配多大由大MSG内部的六个成员变量的数据类型决定。............上面都讲了,最终弹出一个QQ 登录对话框即创建窗口成功。这时QQ也进入了一个长达数百年的死循环状态。   


   这时我点了一下登录(记住密码了),XP立即把这个鼠标单击事件投递到自己的消息队列,经过一系列分 析后得知这个消息是属于QQ这个进程实例的QQ登录这个窗口的消息(因为msg的第一个成员变量已经指明 了自己是属于QQ登录对话框这个窗口的了)于是将这个消息发送到QQ的消息队列(即向属于QQ内存中的 msg这个结构体变量的成员变量赋值)  

    紧接着,QQ的GetMessageW发现自己的参数msg的成员变量wParam有值了(说的明白点,也就是 wParam变量的内存中的值为1了,也就是从逻辑上讲为真了,也就是最终内存中的电路接通了。 于是返回真、true、1(这就是计算机魅力的所在,自动执行)这时沉寂了数百年的死循环终于被打破。   


    紧接着,翻译官TranslateMessage将这条消息翻译后又投递到QQ的消息队列.这时,恰好邮递员 DispatcMessageW赶到,将这条消息传回给老大XP。老大根据这条消息的描述得知这条消息是属于QQ登 录这个窗口的,于是调用这个窗口的指定的回调函数,并将这条消息的成员变量传递给回调函数的四个参数回调函数内的switch一看自己的参数为真了即message为1了,于是马上判断传来的消息是什么消息 即对应自己的哪一种情况,一看,哦,是“登录”这个按钮的WM_LBUTTONDOWN消息,于是开始调用 这个消息下指定的XP的比如连接服务器函数,比较函数等等,最终,如果不出意外的话你就登上QQ了。 接下来,不用我讲你也明白了吧?嗯,是的,依然是你触发一个事件,然后引发一个消息...........然后根据 各种情况内不同函数调用等执行不同的任务。     

好了,就这么多吧,实在是没时间啊,大家可以一起来讨论,如有错望大家指正。谢谢!                 


By 红色指令 2009.10.31。                            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值