windows»·¾³ÏÂ32λ»ã±àÓïÑÔ³ÌÐòÉè¼Æ-µÚ12ÕÂ
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
4¡£2¡£4¡¡¡¡´°¿Ú¹ý³Ì
´°¿Ú¹ý³ÌÊǸøWindows»Øµ÷Óõģ¬Ëü±ØÐë×ñѹ涨µÄ¸ñʽ¡£¶Ô´°¿Ú¹ý³ÌµÄ×Ó³ÌÐòÃû²¢Ã»Óй涨£¬¶ÔWindowsÀ´Ëµ£¬´°¿Ú¹ý³ÌµÄµØÖ·²ÅÊÇΩһÐèÒªµÄ£¬Àý×Ó³ÌÐòÖеÄ×Ó³ÌÐòÃûÊÇ_ProcWinMain£¬¶ÁÕß¿ÉÒÔ¸ÄÓÃÈκÎÃû³Æ¡£´°¿Ú¹ý³Ì×Ó³ÌÐòµÄ²ÎÊý¸ñʽΪ£º
WindowProc¡¡¡¡proc¡¡¡¡¡¡¡¡hwnd£»uMsg£»wParam£»lParam
µÚÒ»¸ö²ÎÊýÊÇ´°¿Ú¾ä±ú£¬Ò»¸ö´°¿Ú¹ý³Ì¿ÉÄÜΪ¶à¸ö»ùÓÚͬһ¸ö´°¿ÚÀàµÄ´°¿Ú·þÎñ£¬ËùÒÔWindows»Øµ÷µÄʱºò±ØÐëÖ¸³öÒª²Ù×÷µÄ´°¿Ú£¬·ñÔò´°¿Ú¹ý³Ì²»ÖªµÀҪȥ´¦ÀíÄĸö´°¿Ú£¬FirstWindow³ÌÐòÖ»½¨Á¢ÁËÒ»¸ö´°¿Ú£¬ËùÒÔÿ´Î´«µÝ¹ýÀ´µÄhwndºÍÓÃCreateWindowExº¯Êý·µ»ØµÄ´°¿Ú¾ä±úÊÇÒ»ÑùµÄ£»µÚ¶þ¸ö²ÎÊýÊÇÏûÏ¢±êʶ£¬ºóÃæÁ½¸ö²ÎÊýÊÇÏûÏ¢µÄÁ½¸ö²ÎÊý¡£Õâ4¸ö²ÎÊýºÍÏûϢѻ·ÖÐMSG½á¹¹ÖеÄÇ°4¸ö×Ö¶ÎÊÇÒ»ÑùµÄ¡£
1¡£¡¡´°¿Ú¹ý³ÌµÄ½á¹¹
´°¿Ú¹ý³ÌÒ»°ãÓÐÈçϵĽṹ£º
WindowProc¡¡¡¡¡¡¡¡¡¡¡¡¡¡proc¡¡¡¡¡¡¡¡¡¡¡¡¡¡uses¡¡ebx¡¡edi¡¡esi£»hWnd£»uMsg£»wParam£»lParam
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡eax£»uMsg
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£if¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡eax¡¡¡¡¡¡WM_XXX
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£elseif¡¡¡¡¡¡¡¡eax¡¡¡¡¡¡WM_YYY
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£elseif¡¡¡¡¡¡¡¡eax¡¡¡¡¡¡WM_CLOSE
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡DestroyWindow£»hWinMain
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡PostQuitMessage£»NULL
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡DefWindowProc£»hWnd£»uMsg£»wParam£»lParam
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ret
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£endif
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡xor¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡eax£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ret
¡¡
WindowProc¡¡¡¡¡¡¡¡¡¡¡¡¡¡endp
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ4Õ¡¡µÚÒ»¸ö´°¿Ú³ÌÐò
4¡£2¡¡·ÖÎö´°¿Ú³ÌÐò£¨5£©¡¡
¡¡¡¡¡¡¡¡
¸Ã¹ý³ÌÖ÷ÒªÊǶÔuMsg²ÎÊýÖеÄÏûÏ¢±àºÅ¹¹³ÉÒ»¸ö·ÖÖ§½á¹¹£¬¶ÔÓÚÐèÒª´¦ÀíµÄÏûÏ¢·Ö±ð´¦Àí¡£²»¸ÐÐËȤµÄÏûÏ¢Ôò½»¸øDefWindowProcÀ´´¦Àí¡£
ҪעÒâµÄÊÇ´°¿Ú¹ý³ÌÖÐҪעÒâ±£´æebx£¬edi£¬esiºÍebp¼Ä´æÆ÷£¬¸ß¼¶³ÌÐòÖв»ÓÃ×Ô¼º²ÙÐÄÕâÒ»µã£¬»ã±àÖоÍҪעÒâÁË£¬WindowsÄÚ²¿½«Õâ4¸ö¼Ä´æÆ÷µ±Ö¸ÕëʹÓã¬Èç¹û·µ»Øʱ¸Ä±äÁËËüÃǵÄÖµ£¬³ÌÐò»áÂíÉϱÀÀ£¡£procºóÃæµÄusesα²Ù×÷ÔÚ×Ó³ÌÐò½øÈëºÍÍ˳öʱ×Ô¶¯°²²åÉÏpushºÍpop¼Ä´æÆ÷Ö¸ÁÀ´±£»¤ÕâЩ¼Ä´æÆ÷µÄÖµ¡£Æäʵ²»½öÊÇÔÚ´°¿Ú¹ý³ÌÖÐÊÇÕâÑù£¬ËùÓÐÓÉÓ¦ÓóÌÐòÌṩ¸øWindowsµÄ»Øµ÷º¯Êý¶¼±ØÐë×ñÑÕâ¸ö¹æ¶¨£¬È綨ʱÆ÷»Øµ÷º¯ÊýµÈ£¬ËùÓÐWin32¡¡APIÒ²×ñÑÕâ¸ö¹æ¶¨£¬ËùÒÔµ÷ÓÃAPIºó£¬ebx£¬edi£¬esiºÍebp¼Ä´æÆ÷µÄÖµ×ÜÊDz»»á±»¸Ä±äµÄ£¬µ«ecxºÍedxµÄÖµ¾Í²»Ò»¶¨ÁË¡£
uMsg²ÎÊýÖ¸¶¨µÄÏûÏ¢ÓÐÒ»¶¨µÄ·¶Î§£¬Windows±ê×¼´°¿ÚÖÐÒѾԤ¶¨ÒåµÄÖµÔÚ0¡«03ffhÖ®¼ä£¬Óû§¿ÉÒÔ×Ô¶¨ÒåһЩÏûÏ¢£¬Í¨¹ýSendMessageµÈº¯Êý´«¸ø´°¿Ú¹ý³Ì×ö×Ô¶¨ÒåµÄ´¦Àí¹¤×÷£¬Õâʱ¿ÉÒÔʹÓõÄÖµÊÇ´Ó0400h¿ªÊ¼µÄ£¬WM_USER¾Í¶¨ÒåΪ00000400h£¬µ±³ÌÐòÔ±¶¨Òå¶à¸öÓû§ÏûÏ¢µÄʱºò£¬Ò»°ãʹÓÃWM_USER£«1£¬WM_USER£«2£¬¡Ö®ÀàµÄ¶¨Òå·½·¨¡£
wParamºÍlParam²ÎÊýÊÇÏûÏ¢Ëù¸½´øµÄ²ÎÊý£¬ËüËæÏûÏ¢µÄ²»Í¬¶ø²»Í¬£¬¶ÔÓÚ²»Í¬µÄÏûÏ¢£¬ËüÃǵĺ¬Òå±ØÐë·Ö±ð´ÓÊÖ²áÖвéÃ÷£ºÈçWM_MOUSEMOVEÏûÏ¢ÖУ¬wParamÊDZêÖ¾£¬lParamÊÇÊó±êλÖ㻶øÔÚWM_GETTEXTÏûÏ¢ÖУ¬wParamÊÇÒª»ñÈ¡µÄ×Ö·ûÊý£¬lParamÊÇ»º³åÇøµØÖ·£»¶ø¶ÔÓÚWM_COPYÏûÏ¢À´Ëµ£¬Ëü²»ÐèÒª¶îÍâµÄÐÅÏ¢£¬ËùÒÔÁ½¸ö²ÎÊý¶¼Ã»Óж¨Òå¡£
´¦ÀíÁ˲»Í¬µÄÏûÏ¢£¬±ØÐë·µ»Ø¹æ¶¨µÄÖµ¸øWindows£¬·µ»ØÖµÒ²ÐèÒª·Ö±ð´ÓÊÖ²áÖвéÃ÷£¬±ÈÈç´¦ÀíWM_CREATEÏûÏ¢µÄʱºò£¬Èç¹û·µ»Ø0±íʾ³É¹¦£»Èç¹û³ÌÐòÎÞ·¨³õʼ»¯£¬ÈçÉêÇëÄÚ´æʧ°Ü£¬ÄÇô¿ÉÒÔ·µ»Ø£1£¬Windows¾Í²»»á¼ÌÐø´°¿ÚµÄ´´½¨¹ý³Ì¡£Ò»Ð©ÏûÏ¢µÄ·µ»ØÖµÔòûÓж¨Ò壬µ«´ó²¿·ÖµÄÏûÏ¢´¦ÀíÒÔºó¶¼ÒÔ·µ»Ø0±íʾ³É¹¦£¬ËùÒÔ³ÌÐòÖаÑĬÈϵķµ»ØÓï¾ä·ÅÔÚ×îºó£¬½«eaxÇåÁãºó·µ»Ø£¬Èç¹ûÔÚ´¦Àíij¸öÏûÏ¢µÄʱºòÐèÒª·µ»Ø²»Í¬µÄÖµ£¬¿ÉÒÔÔÚ·ÖÖ§Öн«eax¸³ÖµºóÖ±½ÓÓÃretÖ¸Áî·µ»Ø¡£¶ÔÓÚDefWindowProcµÄ·µ»ØÖµ£¬ÎÒÃDz»¶ÔËü½øÐиÉÉ棬ËùÒÔÖ±½Ó½«eax²»×öÐ޸ĵØÓÃret·µ»Ø¡£
WM_CLOSEÏûÏ¢ÊÇ°´ÏÂÁË´°¿ÚÓÒÉϽǵġ°¹Ø±Õ¡±°´Å¥ºóÊÕµ½µÄ£¬³ÌÐò¿ÉÒÔÔÚÕâÀï´¦ÀíºÍ¹Ø±Õ´°¿ÚÏà¹ØµÄÊÂÇ飬һ°ãÊÇÏà¹Ø×ÊÔ´µÄÊͷŹ¤×÷£¬ÈçÊÍ·ÅÄÚ´æ¡¢±£´æ¹¤×÷ºÍÌáʾÓû§ÊÇ·ñ±£´æ¹¤×÷µÈ£¬Èç¼Çʱ¾³ÌÐòÔÚδ±£´æµÄʱºòµ¥»÷¡°¹Ø±Õ¡±°´Å¥£¬»áÓÐÌáʾ¿òÌáʾÊÇ·ñÏȱ£´æÎļþ£¬µ¥»÷¡°È¡Ïû¡±°´Å¥µÄ»°£¬¼Çʱ¾²»»á¹Ø±Õ£¬Õâ¸ö²½Öè¾ÍÊÇÔÚWM_CLOSEÏûÏ¢´¦ÀíÖÐÍê³ÉµÄ¡£Èç¹û´¦ÀíWM_CLOSEÏûϢʱֱ½Ó·µ»Ø£¬ÄÇô´°¿Ú²»»á¹Ø±Õ£¬ÒòΪÕâ¸öÏûÏ¢Ö»ÊÇWindows֪ͨ´°¿ÚÓû§µ¥»÷ÁË¡°¹Ø±Õ¡±°´Å¥¶øÒÑ£¬´°¿Ú²ÉȡʲôÑùµÄÐÐΪÊÇ´°¿ÚµÄÊ¡£µ±´°¿Ú¾ö¶¨¹Ø±ÕµÄʱºò£¬ÐèÒª³ÌÐò×Ô¼ºµ÷ÓÃDestroyWindowÀ´´Ý»Ù´°¿Ú£¬²¢ÓÃPostQuitMessageÏòÏûϢѻ··¢ËÍWM_QUITÏûÏ¢À´Í˳öÏûϢѻ·¡£µ÷ÓÃPostQuitMessageʱµÄ²ÎÊýÊÇÍ˳öÂ룬¾ÍÊÇGetMessageÊÕµ½WM_QUITºóMSG½á¹¹wParam×Ö¶ÎÖеĶ«Î÷£¬ÔÚÕâÀïʹÓÃNULL¡£
¡¡PostQuitMessageÊdzõѧÕßÈÝÒ×ÒÅ©µÄº¯Êý£¬Èç¹ûûÓÐÕâÌõÓï¾ä£¬Íâ¹ÛÉÏ´°¿ÚÊDZ»´Ý»Ùµô£¬´ÓÆÁÄ»ÉÏÏûʧÁË£¬µ«Ö÷³ÌÐòÖеÄÏûϢѻ·È´Ã»ÓÐÊÕµ½WM_QUIT£¬½á¹û»¹ÔÚÄÇÀï´òת¡£³£ÓÐÈ˵÷ÊÔµÄʱºò¶ªÁËÕâÌõÓï¾ä£¬½á¹ûÔÙÒ»´Î±àÒëµÄʱºò¾ÍÊÕµ½´íÎó£ºLINK¡¡fatal¡¡error¡¡LNK1104£º¡¡cannot¡¡open¡¡file¡¡¡¨xxx¡£exe¡¨£¬±íʾexeÎļþÏÖÔÚ²»¿Éд¡£
¡¡¡¡¡¡¡¡WindowsΪʲô²»ÔÚ´°¿Ú´Ý»ÙµÄʱºò×Ô¶¯·¢ËÍÒ»¸öWM_QUITÏûÏ¢£¬¶ø±ØÐëÓÉÓû§³ÌÐò×Ô¼ºÍ¨¹ýPostQuitMessageº¯Êý·¢ËÍÄØ£¿ÆäʵºÜºÃÀí½â£ºÒòΪÆÁÄ»ÉÏ¿ÉÄܲ»Ö¹Ò»¸ö´°¿Ú£¬WindowsÎÞ·¨È·¶¨Äĸö´°¿Ú¹Ø±Õ´ú±í×ųÌÐò½áÊø¡£ÊÔÏëһϣ¬Óû§´ò¿ªÁËÒ»¸öÊäÈë²ÎÊýµÄС´°¿Ú£¬µ¥»÷¡°È·¶¨¡±°´Å¥ºó¹Ø±Õ²¢»Øµ½Ö÷´°¿Ú£¬WindowsÈ´²»·ÖÈýÆ߶þʮһ×Ô¶¯·¢ËÍÁËÒ»¸öWM_QUIT£¬³ÌÐò¾Í»áĪÃûÆäÃîµØÍ˳öÁË¡£
2¡£¡¡ÊÕµ½ÏûÏ¢µÄ˳Ðò
´°¿Ú¹ý³ÌÊÕµ½ÏûÏ¢ÊÇÓÐÒ»¶¨Ë³ÐòµÄ£¬ÊÕµ½µÚÒ»ÌõÏûÏ¢²¢²»ÊÇ´ÓÏûϢѻ·¿ªÊ¼ÒԺ󣬶øÊÇÔÚCreateWindowExÖоͿªÊ¼ÁË£¬ÏÔʾºÍˢд°¿ÚµÄº¯ÊýShowWindowºÍUpdateWindowÒ²Ïò´°¿Ú¹ý³Ì·¢ËÍÏûÏ¢£¬ÕâÒ»µã²¢²»Ææ¹Ö£¬ÒòΪWindowsÔÚCreateWindowExÇ°µ÷ÓÃRegisterClassExµÄʱºò¾ÍÒѾµÃµ½´°¿Ú¹ý³ÌµÄµØÖ·ÁË¡£²¢ÇÒÔÚ½¨Á¢´°¿ÚµÄ¹ý³ÌÖÐÐèÒª´°¿Ú¹ý³ÌµÄÅäºÏ¡£±í4¡£6ºÍ±í4¡£7·Ö±ðÁгöÁ˵÷ÓÃCreateWindowExºÍShowWindowµÄʱºò´°¿Ú¹ý³ÌÊÕµ½µÄÏûÏ¢¡£
±í4¡£6¡¡¡¡µ÷ÓÃCreateWindowExʱ´°¿Ú¹ý³ÌÊÕµ½µÄÏûÏ¢
ÏûÏ¢·¢Éú
¡¡Ëµ¡¡¡¡¡¡¡¡Ã÷
¡¡
WM_GETMINMAXINFO
¡¡»ñÈ¡´°¿Ú´óС£¬ÒÔ±ã³õʼ»¯
¡¡
WM_NCCREATE
¡¡·Ç¿Í»§Çø¿ªÊ¼½¨Á¢
¡¡
WM_NCCALCSIZE
¡¡¼ÆËã¿Í»§Çø´óС
¡¡
WM_CREATE
¡¡´°¿Ú½¨Á¢
¡¡
±í4¡£7¡¡¡¡µ÷ÓÃShowWindowʱ´°¿Ú¹ý³ÌÊÕµ½µÄÏûÏ¢
ÏûÏ¢·¢Éú
¡¡Ëµ¡¡¡¡¡¡¡¡Ã÷
¡¡
WM_SHOWWINDOW
¡¡ÏÔʾ´°¿Ú
¡¡
WM_WINDOWPOSCHANGING
¡¡´°¿ÚλÖÃ×¼±¸¸Ä±ä
¡¡
WM_ACTIVATEAPP
¡¡´°¿Ú×¼±¸¼¤»î
¡¡
WM_NCACTIVATE
¡¡¼¤»î״̬¸Ä±ä
¡¡
WM_GETTEXT
¡¡È¡´°¿ÚÃû³Æ£¨ÏÔʾ±êÌâÀ¸Óã©
¡¡
WM_ACTIVATE
¡¡´°¿Ú×¼±¸¼¤»î
¡¡
WM_SETFOCUS
¡¡´°¿Ú»ñµÃ½¹µã
¡¡
WM_NCPAINT
¡¡ÐèÒª»æ»´°¿Ú±ß¿ò
¡¡
WM_ERASEBKGND
¡¡ÐèÒª²Á³ý±³¾°
¡¡
WM_WINDOWPOSCHANGED
¡¡´°¿ÚλÖÃÒѾ¸Ä±ä
¡¡
WM_SIZE
¡¡´°¿Ú´óСÒѾ¸Ä±ä
¡¡
WM_MOVE
¡¡´°¿ÚλÖÃÒѾÒƶ¯
¡¡
È»ºó³ÌÐòÖ´ÐÐUpdateWindow£¬Õâ¸öº¯ÊýÏò´°¿Ú¹ý³Ì·¢ËÍÒ»ÌõWM_PAINTÏûÏ¢£¬½Ó×Å£¬Ö÷³ÌÐò¿ªÊ¼½øÈëÏûϢѻ·£¬Windows¸ù¾Ý¸÷ÖÖÒòËظø´°¿Ú¹ý³Ì·¢ËÍÏàÓ¦µÄÏûÏ¢£¬Ò»Ö±µ½µ÷ÓÃDestroyWindowsΪֹ¡£±í4¡£8ÁгöÁËDestoryWindowÏò´°¿Ú¹ý³Ì·¢Ë͵ÄÏûÏ¢¡£
±í4¡£8¡¡¡¡µ÷ÓÃDestroyWindowʱ´°¿Ú¹ý³ÌÊÕµ½µÄÏûÏ¢
ÏûÏ¢·¢Éú
¡¡Ëµ¡¡¡¡¡¡¡¡Ã÷
¡¡
WM_NCACTIVATE
¡¡´°¿Ú¼¤»î״̬¸Ä±ä
¡¡
WM_ACTIVATE
¡¡´°¿Ú×¼±¸·Ç¼¤»î
¡¡
WM_ACTIVATEAPP
¡¡´°¿Ú×¼±¸·Ç¼¤»î
¡¡
WM_KILLFOCUS
¡¡Ê§È¥½¹µã
¡¡
WM_DESTROY
¡¡´°¿Ú¼´½«±»´Ý»Ù
¡¡
WM_NCDESTROY
¡¡´°¿ÚµÄ·Ç¿Í»§Çø¼°ËùÓÐ×Ó´°¿ÚÒѾ±»´Ý»Ù
¡¡
ÔÚËùÓÐÕâЩ½×¶ÎµÄÏûÏ¢ÖУ¬´ó²¿·ÖµÄÏûÏ¢¶¼²»ÐèÒª³ÌÐò×Ô¼º¹ØÐÄ£¬WindowsÖ»ÊǾ¡ÒåÎñ֪ͨ´°¿Ú¹ý³Ì¶øÒÑ£¬´°¿Ú¹ý³ÌתÊ־ͽ»¸øDefWindowProcÈ¥´¦ÀíÁË¡£³ÌÐòÐèÒª¹ØÐĵÄÏûÏ¢ÓÐÏÂÃæÕâЩ£¬¿ÉÒÔ¸ù¾ÝÐèҪѡÔñʹÓãº
¡ñ¡¡¡¡¡¡WM_CREATE¡ª¡ª·ÅÖô°¿Ú³õʼ»¯´úÂ룬È罨Á¢¸÷ÖÖ×Ó´°¿Ú£¨×´Ì¬À¸ºÍ¹¤¾ßÀ¸µÈ£©¡£
¡ñ¡¡¡¡¡¡WM_SIZE¡ª¡ª·ÅÖÃλÖð²ÅŵĴúÂ룬ÒòΪ½¨Á¢µÄ×Ó´°¿Ú¿ÉÄÜÐèÒªËæ´°¿Ú´óСµÄ¸Ä±ä¶øÒƶ¯Î»Öá£
¡ñ¡¡¡¡¡¡WM_PAINT¡ª¡ªÈç¹ûÐèÒª×Ô¼º»æÖÆ¿Í»§Çø£¬ÔòÔÚÕâÀï°²ÅÅ´úÂë¡£
¡ñ¡¡¡¡¡¡WM_CLOSE¡ª¡ªÏòÓû§È·ÈÏÊÇ·ñÍ˳ö£¬Èç¹ûÍ˳öÔò´Ý»Ù´°¿Ú²¢·¢ËÍWM_QUITÏûÏ¢¡£
¡ñ¡¡¡¡¡¡WM_DESTROY¡ª¡ª´°¿Ú´Ý»Ù£¬ÔÚÕâÀï·ÅÖÃÊÍ·Å×ÊÔ´µÈɨβ´úÂë¡£
ÔÚÀý×Ó³ÌÐòÖУ¬ÎÒÃÇ´¦ÀíÁËWM_PAINTÏûÏ¢À´»æÖÆ¿Í»§Çø£¬¹¦ÄܾÍÊÇÔÚ´°¿ÚµÄÖмäдÉÏÒ»ÐÐ×Ö£º¡°Win32¡¡Assembly£»¡¡Simple¡¡and¡¡powerful¡¡£¡¡±¹ý³ÌÊÇÏÈͨ¹ýBeginPaint»ñÈ¡´°¿Ú¿Í»§ÇøµÄ¡°É豸»·¾³¡±¾ä±ú£¬È»ºóͨ¹ýGetClientRect»ñÈ¡¿Í»§ÇøµÄ´óС£¬×îºóͨ¹ýDrawTextº¯Êý½«×Ö·û´®°´ÕÕÈ¡µÃµÄÆÁÄ»´óС¾ÓÖÐдµ½¡°É豸»·¾³¡±ÖУ¬Ò²¾ÍÊÇ´°¿ÚÉÏ¡£Èç¹û²»ÐèÒªÏÔʾÕâ¸ö×Ö·û´®£¬ÔòÁ¬WM_PAINTÏûÏ¢Ò²²»Óô¦Àí¡£
3¡£¡¡ÏûÏ¢µÄĬÈÏ´¦Àí¡ª¡ªDefWindowProc
WindowsÔ¤¶¨ÒåµÄÏûÏ¢·¶Î§ÊÇ0¡«03ffh£¬¹²1¡¡024¸öÏûÏ¢£¬²é¿´Ò»ÏÂÍ·ÎļþWindows¡£inc£¬¿ÉÒÔ·¢ÏÖʵ¼ÊÒѶ¨ÒåµÄÏûÏ¢ÊýÄ¿Óм¸°Ù¸ö£¬ÕâЩÏûÏ¢ÖеĴ󲿷ֶÔÓÚ´°¿ÚµÄÔËÐÐÀ´Ëµ¶¼ÊDZØÐèµÄ£¬Èç¹û´°¿Ú¹ý³ÌÒª´¦ÀíÿһÖÖÏûÏ¢£¬ÄÇô´°¿Ú¹ý³ÌÖеÄelseifÓï¾ä¾Í»áÃàÑÓÊýǧÐУ¬µ«ÊÇ´°¿ÚµÄÐÐΪ¾ÍÊÇÓÉ´¦ÀíÕâЩÏûÏ¢µÄ·½·¨À´±íÏֵģ¬²»´¦ÀíÓÖ²»ÐУ¬Ôõô°ìÄØ£¿
ʵ¼ÊÉϴ󲿷ִ°¿ÚµÄÐÐΪ¶¼ÊDz¶àµÄ£¬ÕâÒâζ×ÅÈç¹ûÒª´°¿Ú¹ý³Ì´¦ÀíÈ«²¿µÄÏûÏ¢£¬²»Í¬´°¿ÚµÄ´°¿Ú¹ý³Ì´úÂëÓ¦¸ÃÊÇ´óͬСÒìµÄ£¬ÄÇô¿ÉÒÔÓÃÒ»¸öÄ£¿éÀ´ÒÔĬÈϵķ½Ê½´¦ÀíÏûÏ¢£¬Win32ÖеÄDefWindowProcº¯ÊýʵÏֵľÍÊÇÕâ¸ö¹¦ÄÜ¡£
²»ÒªÐ¡¿´ÁËÕâ¸öDefWindowProc£¬ÕýÊÇËüÓÃĬÈϵķ½Ê½´¦ÀíÁ˼¸°ÙÖÖÏûÏ¢£¬²ÅʹÓû§ÄÜÓÃÇøÇø°ÙÀ´ÐдúÂëд³öÒ»¸öÈ«¹¦ÄܵĴ°¿Ú¡£Ò²ÕýÊÇËùÓеĴ°¿Ú¶¼ÓÃDefWindowProcĬÈÏ´¦Àí³ÌÐò×Ô¼º²»´¦ÀíµÄÏûÏ¢£¬²ÅʹËüÃǵÄÐÐΪ¿´ÉÏÈ¥´óͬСÒ죬ÒòΪËüÃDZ³ºóʵ¼ÊÉÏÊÇͬһ¿é´úÂëÔÚ´¦Àí¡£
ÔÚ´°¿Ú¹ý³ÌµÄ·ÖÖ§Óï¾äÖУ¬Óû§´¦ÀíËùÓÐÐèÒª¸öÐÔ»¯´¦ÀíµÄÏûÏ¢£¬¶ÔÓÚ±íÏÖÐÐΪÊÇĬÈÏÐÐΪµÄÏûÏ¢£¬ÔòÔÚelse·ÖÖ§ÖÐÓÃDefWindowProcÀ´´¦Àí£¬¶ÔÓÚWindowsÀ´Ëµ£¬Ëü²¢²»¹ØÐÄÏûÏ¢ÔÚ´°¿Ú¹ý³ÌÖÐÊdzÌÐòÓÃ×Ô¼ºµÄ´úÂë´¦ÀíµÄ»¹ÊÇÓÃDefWindowProc´¦ÀíµÄ£¬ËüÖ»¿´eaxÖеķµ»ØÖµÀ´Á˽⴦Àí½á¹û£¬ËùÒÔ²»¹ÜÏûÏ¢ÊÇË´¦ÀíµÄ£¬¶¼±ØÐëÔÚeaxÖзµ»ØÕýÈ·µÄÖµ¡£DefWindowProc·µ»ØʱeaxÖоÍÊÇËü¶ÔÏûÏ¢µÄ´¦Àí½á¹û£¬³ÌÐòÖ»ÒªÖ±½Ó°Ñeax´«»Ø¸øWindows¾ÍÐÐÁË£¬ËùÒÔÔÚÀý×Ó³ÌÐòÖУ¬DefWindowProcºóÃæÖ±½ÓÓÃÒ»¾äretÖ¸Áî·µ»Ø¡£
±í4¡£9ÖÐÁгöÁËDefWindowProcÖжÔһЩÏûÏ¢µÄ´¦Àí·½·¨£¬Èç¹ûºÍÓû§ÆÚÍûµÄ²»Í¬£¬¾Í±ØÐëÔÚ´°¿Ú¹ý³ÌÖÐ×Ô¼º´¦Àí¡£
±í4¡£9¡¡¡¡DefWindowProc¶ÔһЩÏûÏ¢µÄĬÈÏ´¦Àí·½Ê½
Ïû¡¡¡¡¡¡¡¡Ï¢
¡¡DefWindowProcµÄ´¦Àí·½Ê½
¡¡
WM_PAINT
¡¡·¢ËÍWM_ERASEBKGNDÏûÏ¢À´²Á³ý±³¾°
¡¡
WM_ERASEBKGND
¡¡Óô°¿ÚÀà½á¹¹ÖеÄhbrBackgroundË¢×ÓÀ´»æ»´°¿Ú±³¾°
¡¡
WM_CLOSE
¡¡µ÷ÓÃDestroyWindowÀ´´Ý»Ù´°¿Ú
¡¡
WM_NCLBUTTONDBLCLK
¡¡ÕâÊÇ·Ç¿Í»§Çø£¨Èç±êÌâÀ¸£©Êó±êË«»÷ÏûÏ¢£¬DefWindowProc²âÊÔÊó±êµÄλÖã¬È»ºóÔÙ²ÉÈ¡ÏàÓ¦µÄ´ëÊ©£¬Èç±êÌâÀ¸Ë«»÷½«×î´ó»¯ºÍ»Ö¸´´°¿Ú
¡¡
WM_NCLBUTTONUP
¡¡ÕâÊÇ·Ç¿Í»§ÇøÊó±êÊÍ·ÅÏûÏ¢£¬Í¬Ñù£¬DefWindowProc²âÊÔÊó±êµÄλÖÃÈ»ºóÔÙ²ÉÈ¡ÏàÓ¦µÄ´ëÊ©£¬ÈçÊó±êÔÚ¡°¹Ø±Õ¡±°´Å¥µÄλÖÃÊͷŽ«µ¼Ö·¢ËÍWM_CLOSEÏûÏ¢
¡¡
WM_NCPAINT
¡¡·Ç¿Í»§Çø»æÖÆÏûÏ¢£¬DefWindowProc½«»æÖƱ߿òºÍ¿Í»§Çø
¡¡
´ÓÕâЩĬÈϵĴ¦Àí·½·¨¿ÉÒÔ¿´³ö£¬ÏëÒªÒ»¸ö´°¿ÚºÍ±ðµÄ´°¿Ú¿´ÆðÀ´²»Ò»Ñù£¬±ÈÈçÏëÒª´°¿Ú¿´ÆðÀ´ÏñÆ»¹û»úµÄ´°¿ÚÒ»Ñù£¬²¢ÇҰѹرհ´Å¥ÒƵ½±êÌâÀ¸×î×ó±ßÈ¥£¬ÄÇô¿ÉÒÔ×Ô¼º´¦ÀíWM_NCPAINTÏûÏ¢£¬°Ñ·Ç¿Í»§Çø»³ÉÆ»¹û»ú´°¿ÚµÄÑù×Ó£¬²¢°Ñ¹Ø±Õ°´Å¥»µ½±êÌâÀ¸×ó±ßÈ¥£¬²¢ÇÒ×Ô¼º´¦ÀíWM_NCLBUTTONUPÏûÏ¢£¬µ±¼ì²âµ½Êó±ê°´ÏµÄλÖÃÔÚ×Ô¼ºµÄ¹Ø±Õ°´Å¥ÉϵÄʱºò£¬Ôò·¢ËÍWM_CLOSEÏûÏ¢¡£¶Ô±ðµÄÏûÏ¢µÄ´¦Àí˼·Ҳ¿ÉÒÔ°´ÕâÖÖ·½·¨ÀàÍÆ¡£
ÁíÍ⣬¿ÉÒÔ·¢ÏÖDefWindowProc¶ÔWM_CLOSEµÄĬÈÏ´¦ÀíÊǵ÷ÓÃDestroyWindow´Ý»Ù´°¿Ú£¬DestroyWindow»áÒý·¢Ò»¸öWM_DESTROYÏûÏ¢£¬WM_CLOSEºÍWM_DESTROYµÄ²»Í¬Ö®´¦ÊÇ£ºWM_CLOSE´ú±íÓû§ÓйرյÄÒâÏò£¬´°¿Ú¹ý³ÌÓÐȨ²»¡°·þ´Ó¡±£¬µ«ÊÕµ½WM_DESTROYµÄʱºò´°¿ÚÒѾÔڹرչý³ÌÖÐÁË£¬²»¹Ü´°¿Ú¹ý³ÌÔ¸²»Ô¸Ò⣬´°¿ÚµÄ¹Ø±ÕÒѾÊDz»¿ÉÍì»ØµÄÊÂÁË¡£
¶ÔÓÚÕâÁ½¸öÏûÏ¢£¬´°¿Ú¹ý³Ì±ØÐë´¦ÀíÆäÖеÄÒ»¸ö£¬ÒòΪ±ØÐëÓиöµØ·½·¢ËÍWM_QUITÏûÏ¢À´½áÊøÏûϢѻ·£¬Àý×Ó³ÌÐòÖд¦ÀíWM_CLOSEÏûÏ¢£¬ÔÚÆäÖÐÓÃDestoryWindow´Ý»Ù´°¿Ú£¬ÔÙµ÷ÓÃPostQuitMessage½áÊøÏûϢѻ·£»³ÌÐòÒ²¿ÉÒÔ²»´¦ÀíWM_CLOSEÏûÏ¢£¬ÈÃDefWindowProcÒÔĬÈÏ´¦ÀíµÄ·½Ê½´Ý»Ù´°¿Ú£¬µ«Õâʱºò±ØÐë´¦ÀíWM_DESTROYÏûÏ¢£¬ÔÚÆäÖе÷ÓÃPostQuitMessage·¢ËÍWM_QUITÒÔ½áÊøÏûϢѻ·¡£
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ4Õ¡¡µÚÒ»¸ö´°¿Ú³ÌÐò
4¡£3¡¡´°¿Ú¼äµÄÏûÏ¢»¥·¢
¡¡¡¡¡¡¡¡
ÔÚÇ°ÃæµÄÄÚÈÝÖУ¬ÒѾ֪µÀÔÚ²»Í¬Ó¦ÓóÌÐòÖ®¼äµÄ´°¿ÚÖпÉÒÔ»¥·¢ÏûÏ¢£¨Èçͼ4¡£4Ëùʾ£©£¬·½·¨ÊÇͨ¹ýSendMessage»òÕßPostMessageº¯Êý£¬ËüÃǵÄÓ÷¨ÈçÏ£º
¡¡¡¡¡¡¡¡invoke¡¡¡¡PostMessage£»hWnd£»Msg£»wParam£»lParam
¡¡¡¡¡¡¡¡invoke¡¡¡¡SendMessage£»hWnd£»Msg£»wParam£»lParam
¶ÔÓÚ²»Í¬µÄMsg£¬wParamºÍlParamµÄº¬ÒåÊDz»Í¬µÄ£¬Èç¶ÔÓÚWM_SETTEXTÊÇ£º
wParam¡¡=¡¡0£»¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Î´¶¨Ò壬±ØÐëΪ0
lParam¡¡=¡¡£¨LPARAM£©£¨LPCTSTR£©lpsz£»¡¡¡¡//¡¡ÒªÉèÖõÄ×Ö·û´®µØÖ·
ÏëÒ»Ïë¾Í»á·¢ÏÖÒ»¸öÎÊÌ⣺WindowsÖв»Í¬Ó¦ÓóÌÐòµÄµØÖ·¿Õ¼äÊǸôÀëµÄ£¨Èçͼ1¡£6Ëùʾ£©£¬¼ÙÉè³ÌÐò1ÒªÓÃSendMessageµ÷ÓóÌÐò2ËùÊô´°¿ÚµÄ´°¿Ú¹ý³Ì£¬µ«³ÌÐò2´°¿Ú¹ý³ÌµÄ´úÂë²¢²»ÔÚ³ÌÐò1µÄµØÖ·¿Õ¼äÖУ¬ÄÇôSendMessageÈçºÎµ÷ÓÃËüÄØ£¿ÆäʵºÜ¼òµ¥£¬µ±³ÌÐò1µ÷ÓÃSendMessageº¯ÊýµÄʱºò£¬Windows»áÏȱ£´æwParamºÍlParam²ÎÊý²¢µÈ´ý£¬µÈÂÖµ½³ÌÐò2µÄʱ¼äƬµÄʱºòÔÙÈ¥µ÷ÓÃËüµÄ´°¿Ú¹ý³Ì£¬²¢°Ñ±£´æµÄwParamºÍlParam²ÎÊý·¢¸øËü£¬µÈ´°¿Ú¹ý³Ì·µ»ØµÄʱºò£¬Windows¼ÇÏ·µ»ØÖµ²¢µÈ´ý£¬ÔÙµÈÂÖµ½³ÌÐò1µÄʱ¼äƬµÄʱºò°Ñ·µ»ØÖµµ±×öSendMessageµÄ·µ»ØÖµ´«¸