windows»·¾³ÏÂ32λ»ã±àÓïÑÔ³ÌÐòÉè¼Æ-µÚ10ÕÂ
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
ÒÔºó²Å´ÓSendMessage·µ»Ø£¨Èçͼ4¡£4ÖмýÍ·IIËùʾ£©¡£
´°¿Ú¹ý³ÌÊÇÓÉWindows»Øµ÷µÄ£¬WindowsÓÖÊÇÔõô֪µÀÍùÄÄÀï»Øµ÷ÄØ£¿´ð°¸ÊÇÎÒÃÇÔÚµ÷ÓÃRegisterClassExº¯ÊýµÄʱºò¸æËßÁËWindows¡£
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ4Õ¡¡µÚÒ»¸ö´°¿Ú³ÌÐò
4¡£2¡¡·ÖÎö´°¿Ú³ÌÐò£¨1£©
¡¡¡¡¡¡¡¡
Á˽âÁËÏûÏ¢Çý¶¯ÌåϵµÄ¹¤×÷Á÷³ÌÒÔºó£¬ÈÃÎÒÃÇÀ´·ÖÎöÈçºÎÓÃWin32»ã±àʵÏÖÕâÒ»ÇУ¬±¾½ÚºÍÏÂÒ»½Ú½«Ïêϸ·ÖÎöFirstWindowÔ´³ÌÐò¡£
4¡£2¡£1¡¡¡¡Ä£¿éºÍ¾ä±ú
1¡£¡¡Ä£¿éµÄ¸ÅÄî
Ò»¸öÄ£¿é´ú±íµÄÊÇÒ»¸öÔËÐÐÖеÄexeÎļþ»òdllÎļþ£¬ÓÃÀ´´ú±íÕâ¸öÎļþÖÐËùÓеĴúÂëºÍ×ÊÔ´£¬´ÅÅÌÉϵÄÎļþ²»ÊÇÄ£¿é£¬×°ÈëÄÚ´æºóÔËÐÐʱ¾Í½Ð×öÄ£¿é¡£Ò»¸öÓ¦ÓóÌÐòµ÷ÓÃÆäËûDLLÖеÄAPIʱ£¬ÕâЩDLLÎļþ±»×°ÈëÄڴ棬¾Í²úÉúÁ˲»Í¬µÄÄ£¿é£¬ÎªÁËÇø·ÖµØÖ·¿Õ¼äÖеIJ»Í¬Ä£¿é£¬Ã¿¸öÄ£¿é¶¼ÓÐÒ»¸öΩһµÄÄ£¿é¾ä±úÀ´±êʶ¡£
ºÜ¶àAPIº¯ÊýÖж¼ÒªÓõ½³ÌÐòµÄÄ£¿é¾ä±ú£¬ÒÔ±ãÀûÓóÌÐòÖеĸ÷ÖÖ×ÊÔ´£¬ËùÒÔÔÚ³ÌÐòµÄÒ»¿ªÊ¼¾ÍÏÈÈ¡µÃÄ£¿é¾ä±ú²¢´æ·Åµ½Ò»¸öÈ«¾Ö±äÁ¿ÖпÉÒÔÊ¡È¥ºÜ¶àµÄÂé·³£¬ÔÚWin32ÖУ¬Ä£¿é¾ä±úÔÚÊýÖµÉϵÈÓÚ³ÌÐòÔÚÄÚ´æÖÐ×°ÈëµÄÆðʼµØÖ·¡£
È¡Ä£¿é¾ä±úʹÓõÄAPIº¯ÊýÊÇGetModuleHandle£¬ËüµÄʹÓ÷½·¨ÊÇ£º
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡GetModuleHandle£»lpModuleName
lpModuleName²ÎÊýÊÇÒ»¸öÖ¸Ïòº¬ÓÐÄ£¿éÃû³Æ×Ö·û´®µÄÖ¸Õ룬¿ÉÒÔÓÃÕâ¸öº¯ÊýÈ¡µÃ³ÌÐòµØÖ·¿Õ¼äÖи÷¸öÄ£¿éµÄ¾ä±ú£¬ÀýÈ磬Èç¹ûÏëµÃµ½User32¡£dllµÄ¾ä±úÒÔ±ãʹÓÃÆäÖаüº¬µÄͼ±ê×ÊÔ´£¬ÄÇô¿ÉÒÔÈçÏÂʹÓãº
szUserDll¡¡¡¡¡¡¡¡¡¡¡¡¡¡db¡¡¡¡'User32¡£dll'£»0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡GetModuleHandle£»addr¡¡szUserDll
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£if¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡hUserDllHandle£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£endif
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Èç¹ûʹÓòÎÊýNULLµ÷ÓÃGetModuleHandle£¬ÄÇôµÃµ½µÄÊǵ÷ÓÃÕß±¾Ä£¿éµÄ¾ä±ú£¬ÎÒÃǵÄÔ´³ÌÐòÖоÍÊÇÕâÑùʹÓõģº
invoke¡¡¡¡GetModuleHandle£»NULL
mov¡¡¡¡¡¡¡¡¡¡hInstance£»eax
¿ÉÒÔ×¢Òâµ½£¬°Ñ·µ»ØµÄ¾ä±ú·Åµ½ÁËhInstance±äÁ¿Àï¶ø²¢²»ÊÇ·ÅÔÚhModuleÖУ¬ÎªÊ²Ã´ÊÇ¡¡hInstanceÄØ£¿¡¡InstanceÊÇ¡°ÊµÀý¡±£¬ËüµÄ¸ÅÄîÀ´×ÔÓÚWin16£¬Win16Öв»Í¬ÔËÐгÌÐòµÄµØÖ·¿Õ¼ä²¢·ÇÊÇÍêÈ«¸ôÀëµÄ£¬Ò»¸ö¿ÉÖ´ÐÐÎļþÔËÐкóÐγɡ°Ä£¿é¡±£¬¶à´Î¼ÓÔØͬһ¸ö¿ÉÖ´ÐÐÎļþʱ£¬Õâ¸ö¡°Ä£¿é¡±Êǹ«Óõģ¬ÎªÁËÇø·Ö¶à´Î¼ÓÔصġ°¿½±´¡±£¬¾Í°Ñÿ¸ö¡°¿½±´¡±½Ð×öʵÀý£¬Ã¿¸öʵÀý¾ùÓò»Í¬µÄ¡°ÊµÀý¾ä±ú¡±£¨hInstance£©ÖµÀ´±êʶËüÃÇ¡£
µ«ÔÚWin32ÖУ¬³ÌÐòÔËÐÐʱÊǸôÀëµÄ£¬Ã¿¸öʵÀý¶¼Ê¹ÓÃ×Ô¼ºË½ÓеÄ4¡¡GB¿Õ¼ä£¬¶¼ÈÏΪ×Ô¼ºÊÇΩһµÄ£¬²»´æÔÚÒ»¸öÄ£¿éµÄ¶à¸öʵÀýµÄÎÊÌ⣬ʵ¼ÊÉÏÔÚWin32ÖУ¬ÊµÀý¾ä±ú¾ÍÊÇÄ£¿é¾ä±ú£¬µ«ºÜ¶àAPIÔÐÍÖÐÓõ½Ä£¿é¾ä±úµÄʱºòʹÓõÄÃû³Æ»¹ÊÇÑØÓÃhInstance£¬ËùÒÔÎÒÃÇ»¹ÊǰѱäÁ¿Ãû³ÆȡΪhInstance¡£
ÔÚCÓïÑԵıà³ÌÖУ¬hInstanceͨ¹ýWinMainÓÉϵͳ´«È룬WinMainµÄÔÐÍÊÇ£º
WinMain£¨hInstance£»hPrevInstance£»lpzCmdParam£»nCmdShow£©£¬³ÌÐò²»ÓÃ×Ô¼ºÈ¥»ñµÃhInstance£¬µ«ÔÚWin32»ã±àÖбØÐë×Ô¼º»ñÈ¡£¬Èç¹û²»Á˽âhModule¾ÍÊÇhInstanceµÄ»°£¬¾ÍÎÞ·¨µÃÖªÈçºÎµÃµ½hInstance£¬ÒòΪ²¢Ã»ÓÐÒ»¸öÀàËÆÓÚGetInstanceHandleÖ®ÀàµÄAPIº¯Êý¡£
2¡£¡¡¾ä±úÊÇʲô
Ëæ×Å·ÖÎöµÄÉîÈ룬¾ä±ú£¨handle£©Ò»´ÊÒ²³öÏÖµÃƵ·±ÁËÆðÀ´£¬¡°¾ä±ú¡±ÊÇʲôÄØ£¿¾ä±úÖ»ÊÇÒ»¸öÊýÖµ¶øÒÑ£¬ËüµÄÖµ¶Ô³ÌÐòÀ´ËµÊÇûÓÐÒâÒåµÄ£¬ËüÖ»ÊÇWindowsÓÃÀ´±íʾ¸÷ÖÖ×ÊÔ´µÄ±àºÅ¶øÒÑ£¬ËùÒÔÖ»ÓÐWindows²ÅÖªµÀÔõôʹÓÃËüÀ´ÒýÓø÷ÖÖ×ÊÔ´¡£¡¡
¾ÙÀý˵Ã÷£¬ÆÁÄ»ÉÏÒѾÓÐ10¸ö´°¿Ú£¬Windows°ÑËüÃÇ´Ó1µ½10±àºÅ£¬Ó¦ÓóÌÐòÓÖ½¨Á¢ÁËÒ»¸ö´°¿Ú£¬ÏÖÔÚWindows°ÑËü±àºÅΪ11£¬È»ºó°Ñ11µ±×ö´°¿Ú¾ä±ú·µ»Ø¸øÓ¦ÓóÌÐò£¬Ó¦ÓóÌÐò²¢²»ÖªµÀ11´ú±íµÄÊÇʲô£¬µ«ÔÚ²Ù×÷´°¿ÚµÄʱºò£¬°Ñ11µ±×ö¾ä±ú´«¸øWindows£¬Windows×ÔÈ»¿ÉÒÔ¸ù¾ÝÕâ¸öÊýÖµ²é³öÊÇÄĸö´°¿Ú¡£µ±¸Ã´°¿Ú¹Ø±ÕµÄʱºò£¬11Õâ¸ö±àºÅ×÷·Ï¡£µÚ¶þ´ÎÔËÐеÄʱºò£¬Èç¹ûÆÁÄ»ÉÏÏÖÓÐ5¸ö´°¿Ú£¬ÄÇôÏÖÔÚ¾ä±ú¿ÉÄܾÍÊÇ6ÁË£¬ËùÒÔ£¬Ó¦ÓóÌÐò²¢²»ÓùØÐľä±úµÄ¾ßÌåÊýÖµÊǶàÉÙ¡£´ò¸ö±È·½£¬¿ÉÒ԰Ѿä±úµ±×öÊÇÉ̳¡ÖмķÅÊé°üʱӪҵԱ¸øµÄÖ½Ìõ£¬Ö½ÌõÉϵıê¼ÇÓû§²¢²»ÖªµÀÊÇʲôÒâ˼£¬µ«°ÑËü½»»¹¸øÓªÒµÔ±µÄʱºò£¬Ëý×ÔÈ»»áÕÒµ½ÕýÈ·µÄÊé°ü¡£
WindowsÖм¸ºõËùÓеĶ«Î÷¶¼ÊÇÓþä±úÀ´±êʶµÄ£¬Îļþ¾ä±ú¡¢´°¿Ú¾ä±ú¡¢Ï߳̾ä±úºÍÄ£¿é¾ä±úµÈ£¬Í¬ÑùµÀÀí£¬²»±Ø¹ØÐÄËüÃǵÄÖµ¾¿¾¹ÊǶàÉÙ£¬ÄÃÀ´ÓþÍÊÇÁË£¡
4¡£2¡£2¡¡¡¡´´½¨´°¿Ú
ÔÚ´´½¨´°¿Ú֮ǰ£¬ÏÈҪ̸µ½¡°Àࡱ¡£¡°ÀࡱµÄ¸ÅÄî¶ÁÕ߶¼²»Ä°Éú£¬Ö÷ÒªÊÇΪÁË°ÑÒ»×éÎïÌåµÄÏàͬÊôÐÔ¹éÄÉÕûÀíÆðÀ´·â×°ÔÚÒ»Æð£¬ÒÔ±ãÖظ´Ê¹Óã¬ÔÚ¡°ÀࡱÒѶ¨ÒåµÄÊôÐÔ»ù´¡ÉϼÓÉÏÆäËû¸öÐÔ»¯µÄÊôÐÔ£¬¾ÍÐγÉÁ˸÷ʽ¸÷ÑùµÄ¸öÌå¡£
WindowsÖд´½¨´°¿ÚͬÑùʹÓÃÕâÑùµÄ²ã´Î½á¹¹¡£Ê×Ïȶ¨ÒåÒ»¸ö´°¿ÚÀ࣬ȻºóÔÚ´°¿ÚÀàµÄ»ù´¡ÉÏÌí¼ÓÆäËûµÄÊôÐÔ½¨Á¢´°¿Ú¡£²»ÓÃÒ»²½µ½Î»µÄ°ì·¨ÊÇÒòΪºÜ¶à´°¿ÚµÄ»ù±¾ÊôÐÔºÍÐÐΪ¶¼ÊÇÒ»ÑùµÄ£¬Èç°´Å¥¡¢Îı¾ÊäÈë¿òºÍÑ¡Ôñ¿òµÈ£¬¶ÔÕâЩ¶«Î÷Windows¶¼Ô¤¶¨ÒåÁ˶ÔÓ¦µÄÀ࣬ʹÓÃʱֱ½ÓʹÓöÔÓ¦µÄÀàÃû½¨Á¢´°¿Ú¾Í¿ÉÒÔÁË¡£Ö»ÓÐÓû§×Ô¶¨ÒåµÄ´°¿Ú²ÅÐèÒªÏȶ¨Òå×Ô¼ºµÄÀ࣬ÔÙ½¨Á¢´°¿Ú¡£ÕâÑù¿ÉÒÔ½ÚÊ¡×ÊÔ´¡£
1¡£¡¡×¢²á´°¿ÚÀà
½¨Á¢´°¿ÚÀàµÄ·½·¨ÊÇÔÚϵͳÖÐ×¢²á£¬×¢²á´°¿ÚÀàµÄAPIº¯ÊýÊÇRegisterClassEx£¬×îºóµÄ¡°Ex¡±ÊÇÀ©Õ¹µÄÒâ˼£¬ÒòΪËüÊÇWin16ÖÐRegisterClassµÄÀ©Õ¹¡£Ò»¸ö´°¿ÚÀඨÒåÁË´°¿ÚµÄһЩÖ÷ÒªÊôÐÔ£¬È磺ͼ±ê¡¢¹â±ê¡¢±³¾°É«¡¢²Ëµ¥ºÍ¸ºÔð´¦Àí¸Ã´°¿ÚËùÊôÏûÏ¢µÄº¯Êý¡£ÕâЩÊôÐÔ²¢²»ÊǷֳɶà¸ö²ÎÊý´«µÝ¹ýÈ¥µÄ£¬¶øÊǶ¨ÒåÔÚÒ»¸öWNDCLASSEX½á¹¹ÖУ¬ÔٰѽṹµÄµØÖ·µ±²ÎÊýÒ»´ÎÐÔ´«µÝ¸øRegisterClassEx£¬WNDCLASSEXÊÇWNDCLASS½á¹¹µÄÀ©Õ¹¡£
WNDCLASSEXµÄ½á¹¹¶¨ÒåΪ£º
WNDCLASSEX¡¡STRUCT
¡¡¡¡CbSize¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»½á¹¹µÄ×Ö½ÚÊý
¡¡¡¡Style¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»Àà·ç¸ñ
¡¡¡¡LpfnWndProc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»´°¿Ú¹ý³ÌµÄµØÖ·
¡¡¡¡CbClsExtra¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿
¡¡¡¡CbWndExtra¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿
¡¡¡¡HInstance¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»ËùÊôµÄʵÀý¾ä±ú
¡¡¡¡HIcon¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»´°¿Úͼ±ê
¡¡¡¡HCursor¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»´°¿Ú¹â±ê
¡¡¡¡HbrBackground¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»±³¾°É«
¡¡¡¡LpszMenuName¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»´°¿Ú²Ëµ¥
¡¡¡¡LpszClassName¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»ÀàÃû×Ö·û´®µÄµØÖ·
¡¡¡¡HIconSm¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡¡¡£»Ð¡Í¼±ê
WNDCLASSEX¡¡ENDS
ÔÚFirstWindow³ÌÐòÖУ¬×¢²á´°¿ÚÀàµÄ´úÂëÊÇ£º
¡¡¡¡¡¡¡¡local¡¡¡¡¡¡@stWndClass£ºWNDCLASSEX¡¡¡¡£»¶¨ÒåÒ»¸öWNDCLASSEX½á¹¹
¡¡¡¡¡¡¡¡¡
¡¡
¡¡¡¡¡¡¡¡invoke¡¡¡¡RtlZeroMemory£»addr¡¡@stWndClass£»sizeof¡¡@stWndClass
¡¡¡¡¡¡¡¡invoke¡¡¡¡LoadCursor£»0£»IDC_ARROW
¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hCursor£»eax
¡¡¡¡¡¡¡¡push¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡hInstance
¡¡¡¡¡¡¡¡pop¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hInstance
¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡@stWndClass¡£cbSize£»sizeof¡¡WNDCLASSEX
¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡@stWndClass¡£style£»CS_HREDRAW¡¡or¡¡CS_VREDRAW
¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡@stWndClass¡£lpfnWndProc£»offset¡¡_ProcWinMain
¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hbrBackground£»COLOR_WINDOW¡¡£«¡¡1
¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡@stWndClass¡£lpszClassName£»offset¡¡szClassName
¡¡¡¡¡¡¡¡invoke¡¡¡¡RegisterClassEx£»addr¡¡@stWndClass
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ4Õ¡¡µÚÒ»¸ö´°¿Ú³ÌÐò
4¡£2¡¡·ÖÎö´°¿Ú³ÌÐò£¨2£©
¡¡¡¡¡¡¡¡
³ÌÐò¶¨ÒåÁËÒ»¸öWNDCLASSEX½á¹¹µÄ±äÁ¿@stWndClass£¬ÓÃRtlZeroMemory½«ËüÌîΪȫÁ㣨¾Ö²¿±äÁ¿³õʼ»¯µÄÖØÒªÐÔÔÚµÚ3ÕÂÖÐÒѾǿµ÷¹ý£©£¬ÔÙÌîд½á¹¹µÄ¸÷¸ö×ֶΣ¬ÕâÑù£¬Ã»Óи³ÖµµÄ²¿·Ö¾Í±£³ÖΪ0£¬½á¹¹¸÷×ֶεĺ¬ÒåÈçÏ£º
¡ñ¡¡¡¡¡¡hIcon¡ª¡ªÍ¼±ê¾ä±ú£¬Ö¸¶¨ÏÔʾÔÚ´°¿Ú±êÌâÀ¸×óÉϽǵÄͼ±ê¡£WindowsÒѾԤ¶¨ÒåÁËһЩͼ±ê£¬Í¬Ñù£¬³ÌÐòÒ²¿ÉÒÔʹÓÃÔÚ×ÊÔ´ÎļþÖж¨ÒåµÄͼ±ê£¬ÕâЩͼ±êµÄ¾ä±ú¿ÉÒÔÓÃLoadIconº¯Êý»ñµÃ¡£Àý×Ó³ÌÐòûÓÐÓõ½Í¼±ê£¬ËùÒÔWindows¸ø´°¿ÚÏÔʾÁËÒ»¸öĬÈϵÄͼ±ê¡£
¡ñ¡¡¡¡¡¡hCursor¡ª¡ª¹â±ê¾ä±ú£¬Ö¸¶¨ÁËÊó±êÔÚ´°¿ÚÖеĹâ±êÐÎ×´¡£Í¬Ñù£¬WindowsÒ²Ô¤¶¨ÒåÁËһЩ¹â±ê£¬¿ÉÒÔÓÃLoadCursor»ñÈ¡ËüÃǵľä±ú£¬IDC_ARROWÊÇWindowsÔ¤¶¨ÒåµÄ¼ýÍ·¹â±ê£¬Èç¹ûÏëʹÓÃ×Ô¶¨ÒåµÄ¹â±ê£¬Ò²¿ÉÒÔ×Ô¼ºÔÚ×ÊÔ´ÎļþÖж¨Òå¡£
¡ñ¡¡¡¡¡¡lpszMenuName¡ª¡ªÖ¸¶¨´°¿ÚÉÏÏÔʾµÄĬÈϲ˵¥£¬ËüÖ¸ÏòÒ»¸ö×Ö·û´®£¬ÃèÊö×ÊÔ´ÎļþÖв˵¥µÄÃû³Æ£¬Èç¹û×ÊÔ´ÎļþÖв˵¥ÊÇÓÃÊýÖµ¶¨ÒåµÄ£¬ÄÇôÕâÀïʹÓò˵¥×ÊÔ´µÄÊýÖµ¡£´°¿ÚÖеIJ˵¥Ò²¿ÉÒÔÔÚ½¨Á¢´°¿Úº¯ÊýCreateWindowExµÄ²ÎÊýÖÐÖ¸¶¨¡£Èç¹ûÔÚÁ½¸öµØ·½¶¼Ã»ÓÐÖ¸¶¨£¬ÄÇô½¨Á¢µÄ´°¿ÚÉϾÍûÓв˵¥¡£
¡ñ¡¡¡¡¡¡hInstance¡ª¡ªÖ¸¶¨Òª×¢²áµÄ´°¿ÚÀàÊôÓÚÄĸöÄ£¿é£¬Ä£¿é¾ä±úÔÚ³ÌÐò¿ªÊ¼µÄµØ·½ÒѾÓÃGetModuleHandleº¯Êý»ñµÃ¡£
¡ñ¡¡¡¡¡¡cbSize¡ª¡ªÖ¸¶¨WNDCLASSEX½á¹¹µÄ³¤¶È£¬ÓÃsizeofα²Ù×÷À´»ñÈ¡¡£ºÜ¶àWin32¡¡API²ÎÊýÖеĽṹ¶¼ÓÐcbSize×ֶΣ¬ËüÖ÷ÒªÊÇÓÃÀ´Çø·Ö½á¹¹µÄ°æ±¾£¬µ±ÒÔºóÐÂÔöÁËÒ»¸ö×Ö¶Îʱ£¬cbSize¾ÍÏàÓ¦Ôö´ó£¬Èç¹ûµ÷ÓõÄʱºòcbSize»¹ÊÇÀϵij¤¶È£¬±íʾÔËÐеÄÊÇ»ùÓھɽṹµÄ³ÌÐò£¬ÕâÑù¿ÉÒÔ·ÀֹʹÓÃÎÞЧµÄ×ֶΡ£
¡ñ¡¡¡¡¡¡style¡ª¡ª´°¿Ú·ç¸ñ¡£CS_HREDRAWºÍCS_VREDRAW±íʾ´°¿ÚµÄ¿í¶È»ò¸ß¶È¸Ä±äʱÊÇ·ñÖØ»´°¿Ú¡£±È½ÏÖØÒªµÄÊÇCS_DBLCLKS·ç¸ñ£¬Ö¸¶¨ÁËËü£¬Windows²Å»á°ÑÔÚ´°¿ÚÖпìËÙÁ½´Îµ¥»÷Êó±êµÄÐÐΪ·Òë³ÉË«»÷ÏûÏ¢WM_LBUTTONDBLCLK·¢¸ø´°¿Ú¹ý³Ì¡£±ÊÕß¾ÍÔø¾ÍüÁËÖ¸¶¨Ëü£¬½á¹ûÔõôҲ¸ã²»³öË«»÷ÏûÏ¢À´¡£
¡ñ¡¡¡¡¡¡hbrBackground¡ª¡ª´°¿Ú¿Í»§ÇøµÄ±³¾°É«¡£Ç°ÃæµÄhbr±íʾËüÊÇÒ»¸öË¢×Ó£¨Brush£©µÄ¾ä±ú£¬¡°Ë¢×Ó¡±Ò»´ÊÐÎÏóµØ±íʾÁËÌî³äÒ»¸öÇøÓòµÄ×Åɫģʽ¡£WindowsÔ¤¶¨ÒåÁËһЩˢ×Ó£¬ÈçBLACK_BRUSHºÍWHITE_BRUSHµÈ£¬¿ÉÒÔÓÃÏÂÁÐÓï¾äÀ´µÃµ½ËüÃǵľä±ú£º
¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡GetObjectStock£»¡¡WHITE_BRUSH
µ«ÔÚÕâÀïÒ²¿ÉÒÔʹÓÃÑÕÉ«Öµ£¬WindowsÒѾԤ¶¨ÒåÁËһЩÑÕÉ«Öµ£¬·Ö±ð¶ÔÓ¦´°¿Ú¸÷²¿·ÖµÄÑÕÉ«£¬ÈçCOLOR_BACKGROUND£¬COLOR_HIGHLIGHT£¬COLOR_MENUºÍCOLOR_WINDOWµÈ£¬Ê¹ÓÃÑÕÉ«ÖµµÄʱºò£¬Windows¹æ¶¨±ØÐëÔÚÑÕÉ«ÖµÉϼÓ1£¬ËùÒÔ³ÌÐòÖеÄÖ¸ÁîÊÇ£º
mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hbrBackground£»COLOR_WINDOW¡¡£«¡¡1
¡ñ¡¡¡¡¡¡lpszClassName¡ª¡ªÖ¸¶¨³ÌÐòÔ±Òª½¨Á¢µÄÀàÃüÃû£¬ÒÔ±ãÒÔºóÓÃÕâ¸öÃû³ÆÀ´ÒýÓÃËü¡£Õâ¸ö×Ö¶ÎÊÇÒ»¸ö×Ö·û´®Ö¸Õ룬ÔÚ³ÌÐòÀËüÖ¸Ïò¡°MyClass¡±×Ö·û´®¡£
¡ñ¡¡¡¡¡¡cbWndExtraºÍcbClsExtra¡ª¡ª·Ö±ðÊÇÔÚWindowsÄÚ²¿±£´æµÄ´°¿Ú½á¹¹ºÍÀà½á¹¹Öиø³ÌÐòÔ±Ô¤ÁôµÄ¿Õ¼ä´óС£¬ÓÃÀ´´æ·Å×Ô¶¨ÒåÊý¾Ý£¬ËüÃǵĵ¥Î»ÊÇ×Ö½Ú¡£²»Ê¹ÓÃ×Ô¶¨ÒåÊý¾ÝµÄ»°£¬ÕâÁ½¸ö×ֶξÍÊÇ0¡£
¡ñ¡¡¡¡¡¡lpfnWndProc¡ª¡ª×îÖØÒªµÄ²ÎÊý£¬ËüÖ¸¶¨ÁË»ùÓÚÕâ¸öÀཨÁ¢µÄ´°¿ÚµÄ´°¿Ú¹ý³ÌµØÖ·¡£Í¨¹ýÕâ¸ö²ÎÊý£¬Windows¾ÍÖªµÀÁËÔÚDispatchMessageº¯ÊýÖаѴ°¿ÚÏûÏ¢·¢µ½ÄÄÀïÈ¥£¬Ò»¸ö´°¿Ú¹ý³Ì¿ÉÒÔΪ¶à¸ö´°¿Ú·þÎñ£¬Ö»ÒªÕâЩ´°¿ÚÊÇ»ùÓÚͬһ¸ö´°¿ÚÀཨÁ¢µÄ¡£WindowsÖв»Í¬Ó¦ÓóÌÐòÖеİ´Å¥ºÍÎı¾¿òµÄÐÐΪ¶¼ÊÇÒ»ÑùµÄ£¬¾ÍÊÇÒòΪËüÃÇÊÇ»ùÓÚÏàͬµÄWindowsÔ¤¶¨ÒåÀཨÁ¢µÄ£¬ËüÃDZ³ºóµÄ´°¿Ú¹ý³ÌÆäʵÊÇͬһ¶Î´úÂë¡£
½á¹¹ÖеÄstyle±íʾ´°¿ÚµÄ·ç¸ñ£¬WindowsÒѾÓÐһЩԤ¶¨ÒåµÄÖµ£¬ËüÃÇÊÇÒÔCS£¨Class¡¡StyleµÄËõд£©¿ªÊ¼µÄ±êʶ·û£¬Èç±í4¡£1Ëùʾ¡£
±í4¡£1¡¡¡¡Ò»Ð©´°¿ÚÀàµÄstyleÔ¤¶¨ÒåÖµ
Ô¤¶¨ÒåÖµ
¡¡16½øÖÆÖµ
¡¡¶ÔÓ¦¶þ½øÖÆλ
¡¡
CS_VREDRAW
¡¡00000001h
¡¡0
¡¡
CS_HREDRAW
¡¡00000002h
¡¡1
¡¡
CS_KEYCVTWINDOW
¡¡00000004h
¡¡2
¡¡
CS_DBLCLKS
¡¡00000008h
¡¡3
¡¡
CS_OWNDC
¡¡00000020h
¡¡5
¡¡
CS_CLASSDC
¡¡00000040h
¡¡6
¡¡
¡
¡¡¡¡
¡¡¡¡
¡¡
¿ÉÒÔ¿´µ½£¬ÕâЩԤ¶¨Òåֵʵ¼ÊÉÏÔÚʹÓò»Öظ´µÄÊý¾Ý룬ËùÒÔ¿ÉÒÔ×éºÏÆðÀ´Ê¹Óã¬Í¬Ê±Ê¹Óò»Í¬µÄÔ¤¶¨ÒåÖµ²¢²»»áÒýÆð»ìÏý¡£
¶ÔÓÚ²»Í¬¶þ½øÖÆλ×éºÏµÄ¼ÆË㣬¡°¼Ó¡±ºÍ¡°»ò¡±µÄ½á¹ûÊÇÒ»ÑùµÄ£¬ÔÚFirstWindow³ÌÐòÖÐÓÃCS_HREDRAW¡¡or¡¡CS_VREDRAWÀ´´ú±íÁ½¸ö×éºÏ£¬ÈôÓÃCS_HREDRAW£«CS_VREDRAWÒ²²¢Ã»ÓÐʲô²»Í¬£¬µ«Ç¿ÁÒ½¨ÒéʹÓÃor£¬ÒòΪÈç¹û²»Ð¡ÐÄÖ¸¶¨ÁËÁ½¸öͬÑùµÄ·ç¸ñʱ£ºCS_HREDRAW¡¡or¡¡CS_VREDRAW¡¡or¡¡CS_VREDRAWºÍÔÀ´µÄÊýÖµÊÇÒ»ÑùµÄ£¬¶øCS_HREDRAW£«CS_VREDRAW£«¡¡CS_VREDRAW¾Í²»¶ÔÁË£¬ÒòΪ1¡¡or¡¡1£½1£¬¶ø1£«1¾ÍµÈÓÚ2ÁË¡£
2¡£¡¡½¨Á¢´°¿Ú
½ÓÏÂÀ´µÄ²½ÖèÊÇÔÚÒѾע²áµÄ´°¿ÚÀàµÄ»ù´¡ÉϽ¨Á¢´°¿Ú£¬Ê¹Óá°ÀࡱµÄÔÒòÊǶ¨Òå´°¿ÚµÄ¡°¹²ÐÔ¡±£¬½¨Á¢´°¿Úʱ¿Ï¶¨»¹ÒªÖ¸¶¨´°¿ÚµÄºÜ¶à¡°¸öÐÔ»¯¡±µÄ²ÎÊý¡ª¡ªÈçWNDCLASSEX½á¹¹ÖÐûÓж¨ÒåµÄÍâ¹Û¡¢±êÌ⡢λÖᢴóСºÍ±ß¿òÀàÐ͵ÈÊôÐÔ£¬ÕâЩÊôÐÔÊÇÔÚ½¨Á¢´°¿Úʱ²ÅÖ¸¶¨µÄ¡£
ºÍ×¢²á´°¿ÚÀàʱÓÃÒ»¸ö½á¹¹´«µÝËùÓвÎÊý²»Í¬£¬½¨Á¢´°¿ÚʱËùÓеÄÊôÐÔ¶¼ÊÇÓõ¥¸ö²ÎÊýµÄ·½Ê½´«µÝµÄ£¬½¨Á¢´°¿ÚµÄº¯ÊýÊÇCreateWindowEx£¨×¢ÒⲻҪд³ÉCreateWindowsEx£©£¬Í¬Ñù£¬ËüÊÇWin16ÖÐCreateWindowº¯ÊýµÄÀ©Õ¹£¬Ö÷Òª±íÏÖÔÚ¶àÁËÒ»¸ödwExStyle£¨À©Õ¹·ç¸ñ£©²ÎÊý£¬ÔÒòÊÇWin32±ÈWin16ÖжàÁ˺ܶàÖÖ´°¿Ú·ç¸ñ£¬ÔÀ´µÄÒ»¸ö·ç¸ñ²ÎÊýÒѾ²»¹»ÓÃÁË¡£CreateWindowExº¯ÊýµÄʹÓ÷½·¨ÊÇ£º
invoke¡¡¡¡CreateWindowEx£»dwExStyle£»lpClassName£»lpWindowName£»dwStyle£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡x£»y£»nWidth£»nHeight£»hWndParent£»hMenu£»hInstance£»lpParam
ËäÈ»Õâ¸öº¯ÊýµÄ²ÎÊý¶à´ï12¸ö£¬µ«ËüÃǺܺÃÀí½â£º
¡ñ¡¡¡¡¡¡lpClassName¡ª½¨Á¢´°¿ÚʹÓõÄÀàÃû×Ö·û´®Ö¸Õ룬ÔÚFirstWindow³ÌÐòÖÐÖ¸Ïò¡°MyClass¡±×Ö·û´®£¬±íʾʹÓá°MyClass¡±ÀཨÁ¢´°¿Ú£¬ÕâÕýÊÇÎÒÃÇ×Ô¼º×¢²áµÄÀ࣬ÕâÑùÒ»À´£¬Õâ¸ö´°¿Ú¾ÍÓС°MyClass¡±µÄËùÓÐÊôÐÔ£¬²¢ÇÒÏûÏ¢½«±»·¢µ½¡°MyClass¡±ÖÐÖ¸¶¨µÄ´°¿Ú¹ý³ÌÖÐÈ¥£¬µ±È»£¬ÕâÀïÒ²¿ÉÒÔÊÇWindowsÔ¤¶¨ÒåµÄÀàÃû¡£
¡ñ¡¡¡¡¡¡lpWindowName¡ª¡ªÖ¸Ïò±íʾ´°¿ÚÃû³ÆµÄ×Ö·û´®£¬¸ÃÃû³Æ»áÏÔʾÔÚ±êÌâÀ¸ÉÏ¡£Èç¹û¸Ã²ÎÊý¿Õ°×£¬Ôò±êÌâÀ¸ÉÏʲô¶¼Ã»ÓС£
¡ñ¡¡¡¡¡¡hMenu¡ª¡ª´°¿ÚÉÏÒª³öÏֵIJ˵¥µÄ¾ä±ú¡£ÔÚ×¢²á´°¿ÚÀàµÄʱºòÒ²¶¨ÒåÁËÒ»¸ö²Ëµ¥£¬ÄÇÊÇ´°¿ÚµÄĬÈϲ˵¥£¬Òâ˼ÊÇÈç¹ûÕâÀïûÓж¨Òå²Ëµ¥£¨ÓòÎÊýNULL£©¶ø×¢²á´°¿ÚÀàʱ¶¨ÒåÁ˲˵¥£¬ÔòʹÓô°¿ÚÀàÖж¨ÒåµÄ²Ëµ¥£»Èç¹ûÕâÀïÖ¸¶¨Á˲˵¥¾ä±ú£¬Ôò²»¹Ü´°¿ÚÀàÖÐÓÐûÓж¨Ò嶼½«Ê¹ÓÃÕâÀﶨÒåµÄ²Ëµ¥£»Á½¸öµØ·½¶¼Ã»Óж¨Òå²Ëµ¥¾ä±ú£¬Ôò´°¿ÚÉÏûÓв˵¥¡£ÁíÍ⣬µ±½¨Á¢µÄ´°¿ÚÊÇ×Ó´°¿Úʱ£¨dwStyleÖÐÖ¸¶¨ÁËWS_CHILD£©£¬Õâ¸