²Ä¤G¤Q¤@³¹¡@¹ï¸Ü²°

³o¤@³¹Ä~Äò«e¤@³¹¡A¤¶²Ð¼Ð·Ç±±¨î¶µªº¥t¥~¨âºØ¡G²M³æ²°±±¨î¶µ»P¤U©Ô¦¡¤è¶ô±±¨î¶µ¡C°£¦¹¤§¥~¡AÁÙ¤¶²Ð¹ï¸Ü²°­±ªO¡A¥¦¥i¥H²¤Æ«Ø¥ß±±¨î¶µªº¹Lµ{¡C


¹ï¸Ü²°Â²¤¶

¹ï¸Ü²°¤Î¨äºØÃþ

³o¤@³¹¤£¦A¥Î CreateWindowEx ªº¤è¦¡«Ø¥ß±±¨î¶µ¡A¦Ó§ï¥Î¹ï¸Ü²°­±ªO¡]dialog template¡^«Ø¥ß¥H¹ï¸Ü²°¬°¥D­n¬É­±ªºÀ³¥Îµ{¦¡¡C³o¤@¤U¤l´N¥X²{¤F¹ï¸Ü²°­±ªO¡B¹ï¸Ü²°³o¨â­Ó±M¦³¦Wµü¡A¦ý¤£¥²ºò±i¡A®e¤p¤ì°¸ºCºC¸ÑÄÀ¡C

¨ä¹ê¾Þ§@¹q¸£ªº¤H­Ì±`±`¨Ï¥Î¹ï¸Ü²°¡A¨Ò¦p¦b°O¨Æ¥»¤¤¶}±ÒÀɮ׮ɴN·|¸õ¥X¨Ó¤@­Ó¦W¬°¡u¶}±Ò¡vªºµøµ¡¡A¦p¤U­±¥ª¹Ï¡AÅý¨Ï¥ÎªÌ¥i¥H¬D¿ï¬Y­Ó¥Ø¿ýùØ­±ªº¬Y­ÓÀɮ׶}±Ò¡A¥H«K½s¿è¡C¤S©ÎªÌ¨Ï¥ÎªÌ¦b°O¨Æ¥»¤¤­n´M§ä¤@¬q¤å¦r®É¡A¤]·|¸õ¥X¤@­Ó¦W¬°¡u´M§ä¡vªºµøµ¡¡AÅý¨Ï¥ÎªÌ¿é¤J­n§ä¤°»ò¤å¦r¡C³o¨â­Ó¸õ¥X¨Óªºµøµ¡¡A¡u¶}±Ò¡v»P¡u´M§ä¡v¡A³£¬O¹ï¸Ü²°¡G ¹ï¸Ü²°¡]dialog box¡^¬O¹Ï§Î¨Ï¥ÎªÌ¤¶­±ªº­«­n³¡¤À¡A¥Î©ó»P¨Ï¥ÎªÌ¶i¦æ¤¬°Ê¨Ã¦¬¶°¨Ï¥ÎªÌ¿é¤Jªº¸ê®Æ¡AµM«á³B²z³o¨Ç¸ê®Æ¡A§¹¦¨¨Ï¥ÎªÌ©Ò­n¨Dªº°Ê§@¡C

  1. ±j¨î¦^À³¹ï¸Ü²°¡]modal dialog boxes¡^¥ç¥i½Ķ¦¨¼ÒºA¹ï¸Ü²°©Î¼Ò¦¡¹ï¸Ü²°¡A¬O«ü¨Ï¥ÎªÌ¦bÃö³¬¹ï¸Ü²°¤§«e¤£¤¹³\¤Á´«¨ì¦P¤@µ{¦¡ªº¨ä¥Lµøµ¡¤¤¡A¦ý¥i¥H¤Á´«¨ì¨ä¥Lµ{¦¡ªºµøµ¡¤¤¡F«Ø¥ß±j¨î¦^À³¹ï¸Ü²°­n©I¥s DialogBoxParam¡C¨Ò¦p¤W¹Ï¤¤ªº¡u¶}±Ò¡v¹ï¸Ü²°ÄÝ©ó±j¨î¦^À³¹ï¸Ü²°¡C
  2. ¤£±j¨î¦^À³¹ï¸Ü²°¡]modeless dialog boxes¡^¥ç¥i½Ķ¦¨«D¼ÒºA¹ï¸Ü²°©Î«D¼Ò¦¡¹ï¸Ü²°¡A¬O«ü¨Ï¥ÎªÌ¥i¥HÀH·N¦b¹ï¸Ü²°©M¨ä¥Lµøµ¡¤§¶¡¤Á´«¡F«Ø¥ß¤£±j¨î¦^À³¹ï¸Ü²°­n©I¥s CreateDialogParam¡C¨Ò¦p¤W¹Ï¤¤ªº¡u´M§ä¡v¹ï¸Ü²°Äݩ󤣱j¨î¦^À³¹ï¸Ü²°¡C

¤£½×­þ¤@ºØ¹ï¸Ü²°»P¤@¯ëµøµ¡³£¦³¬Û¦ü¤§³B¡A¤]¦³¤£¦Pªº¦a¤è¡F¨Æ¹ê¤W¹ï¸Ü²°¤]¬O¤@ºØµøµ¡¡A©Ò¥H·|¦³¬Û¦Pªº¦a¤è¡A¨Ò¦p¨âªÌ³£¦³¼ÐÃDÄæ¡A³£¥i¥H¥H·Æ¹«©ì¦²¦Ó§ïÅܦì¸m¡K¡Kµ¥µ¥¡C¤£¦Pªº¦a¤è¦b©ó«Ø¥ß¤@¯ëµøµ¡¤§«e¡A»Ýµù¥Uµøµ¡Ãþ§O¡A³o¦b«e­±¤w¸gÀ³¥Î¹L«Ü¦h¦¸¤F¡C¦ý¬O«Ø¥ß¹ï¸Ü²°¤§«e¡A¤£¶·¥ýµù¥Uµøµ¡Ãþ§O¡A¦]¬°¹ï¸Ü²°ªºµøµ¡Ãþ§O¤w¸g¹w¥ýµù¥U¦b¨t²Î¤º³¡¤F¡A¥¦ªºÃþ§O¦WºÙ¬O¥H¼Æ­È¡A32770¡Aªí¥Ü¡C³o­Óµøµ¡Ãþ§O¤]«ü©w¤Fµøµ¡¨ç¦¡¡A¦Ó³o­Óµøµ¡¨ç¦¡¥]§t¦b¨t²Î¤º³¡ªº¡u¹ï¸Ü²°ºÞ²z¾¹¡v¤¤¡A³B²z¹ï¸Ü²°ªº¤j³¡¤À°T®§¡A¨Ò¦p­«·sø»s¤u§@°Ï¡A«ö Tab Áä¦b¤£¦P±±¨î¶µ¶¡¤Á´«¡B«ö Enter Áä¬Û·í©ó¥H·Æ¹«¥ªÁäÂIÀ»«ö¤U¹w³]¤UÀ£¦¡«ö¶sµ¥¡C°£¦¹¤§¥~¡A¹ï¸Ü²°ºÞ²z¾¹ÁÙ·|®Ú¾Ú¹ï¸Ü²°­±ªO¤¤©w¸qªº±±¨î¶µ¡A«Ø¥ß¹ï¸Ü²°¤¤©Ò¦³ªº±±¨î¶µ¡C

±j¨î¦^À³¹ï¸Ü²°»P¤£±j¨î¦^À³¹ï¸Ü²°¹ï°T®§ªº³B²z¤è¦¡¤£¦P¡C«Ø¥ß±j¨î¦^À³¹ï¸Ü²°­n©I¥s DialogBoxParam¡AµM«á Windows ÁÙ·|¦b¨t²Î¤º³¡«Ø¥ß¤@­Ó°T®§°j°é¡A³o­Ó°T®§°j°é·|§â°T®§µo°eµ¹¹ï¸Ü²°ºÞ²z¾¹¡A¦Ó¹ï¸Ü²°ºÞ²z¾¹¦b³B²z°T®§ªº¹Lµ{¤¤·|©I¥sÀ³¥Îµ{¦¡¦Û¦æ©w¸qªº¹ï¸Ü²°¨ç¦¡¡C¹ï¸Ü²°¨ç¦¡¬Û·í©ó¤@¯ëµøµ¡¤ºªºµøµ¡¨ç¦¡¡A³B²z·P¿³½ìªº°T®§¡C·í¹ï¸Ü²°Ãö³¬ªº®É­Ô¡AWindows ¾P·´¸Ó°T®§°j°é¡A¨Ã±q DialogBoxParam ¨ç¼Æªð¦^¡C³o´N¬O¥²¶·Ãö³¬±j¨î¦^À³¹ï¸Ü²°«á¡A¤~¯à¤Á´«¨ì¦P¤@­ÓÀ³¥Îµ{¦¡ªº¨ä¥Lµøµ¡¡C

«Ø¥ß¤£±j¨î¦^À³¹ï¸Ü²°«h¬O©I¥s CreateDialogParam¡A¦b«Ø¥ß¤§«áª½±µªð¦^¡C¤£±j¨î¦^À³¹ï¸Ü²°ªº°T®§°j°é´N¬OÀ³¥Îµ{¦¡ªº°T®§°j°é¡A¦]¬°³o¼Ë¤~¯à¦b¤£Ãö³¬¹ï¸Ü²°ªº±¡§Î¤U¡A¤Á´«¨ì¦P¤@À³¥Îµ{¦¡ªº¨ä¥Lµøµ¡¤¤¡C

DialogBoxParam API

·Q­n«Ø¥ß±j¨î¦^À³¹ï¸Ü²°¡A­n©I¥s DialogBoxParam API¡A¨ä­ì«¬¬°¡G

invoke  DialogBoxParam,\
        hInstance,\     ; handle to application instance
        lpTemplateName,\; identifies dialog box template
        hWndParent,\    ; handle to owner window
        lpDialogFunc,\  ; pointer to dialog box procedure
        dwInitParam     ; initialization value

©³¤U¸ÑÄÀ DialogBoxParam ªº°Ñ¼Æ¡G

DialogBoxParam ·|©I¥s CreateWindowEx ¨Ó«Ø¥ß¹ï¸Ü²°­±ªO¤ºªº±±¨î¶µ¨Ã«Ø¥ß°T®§°j°é¡AµM«áµo°e WM_INITDIALOG °T®§µ¹¹ï¸Ü²°¨ç¦¡¡A¦pªG¹ï¸Ü²°­±ªO«ü©w¤F DS_SETFONT ©Î DS_SHELLFONT ­·®æ¡AÁÙ·|µo°e WM_SETFONT °T®§¡C³Ì«áÅã¥Ü¹ï¸Ü²°¡]¤£ºÞ¹ï¸Ü²°­±ªO¦³¨S¦³«ü©w WS_VISIBLE ­·®æ¡^¡B¸T¥Î¾Ö¦³ªÌµøµ¡¡C

·í¹ï¸Ü²°¨ç¦¡©I¥s EndDialog ®É¡A·|¾P·´¹ï¸Ü²°¡B°T®§°j°é¡B¨Ã¥B±Ò¥Î¾Ö¦³ªÌµøµ¡¡C¤@¯ë¦Ó¨¥¡A·í¨Ï¥ÎªÌ«ö¤U¹ï¸Ü²°¼ÐÃDÄæ¥kÃ䪺Ãö³¬«ö¶s®É¡A·|¹ï¹ï¸Ü²°µo¥X WM_CLOSE °T®§¡AÀ³¥Îµ{¦¡©ó¦¹°T®§¤¤©I¥s EndDialog ²×µ²¹ï¸Ü²°¡CÀ³¥Îµ{¦¡¤]¥i¥H«Ø¥ß¡uÂ÷¶}¡v«ö¶s¡A¦ý¥²¶·³B²z WM_COMMAND °T®§¡A¥H«K²×µ²¹ï¸Ü²°¡C

¦pªG DialogBoxParam ¦¨¥\°õ¦æ¡A¥u¦³µ¥¹ï¸Ü²°¨ç¦¡©I¥s EndDialog API ¤§«á¡A¤~µ²§ô DialogBoxParam API¡A©Ò¥H EndDialog ªº nResult °Ñ¼Æ©Ò«ü©wªº¼Æ­È¡A´N¬O DialogBoxParam ªº¦^¶Ç­È¡C¦pªG DialogBoxParam ¦]¬° hWndParent °Ñ¼ÆµL®Ä¦Ó¥¢±Ñ¡A«h¦^¶Ç­È¬°¹s¡A¥H«K»Pª© Windows ¬Û®e¡C¦pªG DialogBoxParam ¦]¥ô¦ó¨ä¥L­ì¦]¦Ó¥¢±Ñ¡A«h¶Ç¦^­È¬° ¡Ð1¡C

EndDialog API

EndDialog ¨Ï¨t²ÎºR·´±j¨î¦^À³¹ï¸Ü²°¡A¨Ãµ²§ô¸Ó¹ï¸Ü²°ªº©Ò¦³¤u§@¡CEndDialog ªº­ì«¬¬O¡G

invoke  EndDialog
        hDlg,\          ; handle to dialog box
        nResult         ; value to return

hDlg ¬O­n³Q¾P·´ªº¹ï¸Ü²°¥N½X¡CnResult ¬O¤@¼Æ­È¡AÀ³¥Îµ{¦¡©I¥s DialogBoxParam «Ø¥ß¹ï¸Ü²°¡A·íºR·´¹ï¸Ü²°®É¡ADialogBoxParam ªº¦^¶Ç­È¡CEndDialog ¦pªG°õ¦æ¦¨¥\¡A¦^¶Ç­È¬O¤@¡A§_«h¬O¹s¡C©I¥s DialogBox¡BDialogBoxParam¡BDialogBoxIndirect ©Î DialogBoxIndirectParam «Ø¥ßªº¹ï¸Ü²°¥²¶·¨Ï¥Î EndDialog ¨Ó¾P·´¡C

¹ï¸Ü²°¨ç¦¡¡]Dialog Box Procedure¡^

¹ï¸Ü²°¨ç¦¡¸òµøµ¡¨ç¦¡¤@¼Ë¡A³£ÄÝ©ó¦^©I¨ç¦¡¡]callback function¡^¡A¨ä­ì«¬¤]¤@¼Ë¡G

¹ï¸Ü²°¨ç¦¡¦WºÙ   PROC    hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg==°T®§ÃѧO½X1
        ³B²z°T®§ÃѧO½X1ªºµ{¦¡½X
  
.elseif uMsg==°T®§ÃѧO½X2
        ³B²z°T®§ÃѧO½X2ªºµ{¦¡½X

.elseif uMsg==WM_CLOSE
        invoke  EndDialog,hDlg,nResult 
         ⁝
.else
        xor     rax,rax ;¥¼³B²zªº°T®§¦^¶Ç­È¬O 0
        ret
.endif

        mov     rax,1   ;¤w³B²z¹Lªº°T®§¦^¶Ç­È¬O 1
        ret
¹ï¸Ü²°¨ç¦¡¦WºÙ   ENDP

¹ï¸Ü²°¨ç¦¡¦WºÙ¥i¥H¥ô·N¨ú¡A¦b²Õ¦X»y¨¥¤¤¡A³o¥u¤£¹L¬O­Ó¦ì§}¡C¹ï¸Ü²°¨ç¦¡¦³¥|­Ó°Ñ¼Æ¡A¦Ó¥B¤£¦h¤£¤Ö¥¿¦n¥|­Ó¡A³o¥|­Ó°Ñ¼Æ©Mµøµ¡¨ç¦¡ªº°Ñ¼Æ¤]³£¬Û¦P¡C»¡©ú¦p¤U¡G

¹ï¸Ü²°¨ç¦¡ªºµ²ºc»Pµøµ¡¨ç¦¡¤@¼Ò¤@¼Ë¡A³£¬O®Ú¾Ú°T®§ÃѧO½X³B²z°T®§¡C¤£¦Pªº¬O¡Aµøµ¡¨ç¦¡¹ï©ó¤£·P¿³½ìªº°T®§©Î¤£³B²zªº°T®§¡A³£¬O¥æ¥Ñ DefWindowProc ³B²z¡A¦Ó¨ä¦^¶Ç­È´N¬O DefWindowProc ªº¦^¶Ç­È¡C¦ý¬O¹ï¸Ü²°¨ç¦¡¹ï©ó¤£·P¿³½ìªº°T®§©Î¤£³B²zªº°T®§¡A¬O¥æ¥Ñ¹ï¸Ü²°ºÞ²z¾¹³B²z¡A³W©w¦^¶Ç­È¥²¶·³]¬° 0¡Aªí¥Ü¥¼³B²zÅý¹ï¸Ü²°ºÞ²z¾¹³B²z¡F¹ï©ó¤w³B²zªº°T®§¡A¦^¶Ç­È¥²¶·³]¬°¤@¡Aªí¥Ü¹ï¸Ü²°ºÞ²z¾¹¤£¥²¦A²z·|¤F¡C

¹ï¸Ü²°¨ç¦¡³q±`¤£³B²z WM_PAINT °T®§¡A¦]¬°Ã¸»s¹ï¸Ü²°¤ºªº¤º®e¡A¥]§t¦U±±¨î¶µ¡A³£¤w¥æ¥Ñ¹ï¸Ü²°ºÞ²z¾¹³B²z¡C


¹ï¸Ü²°­±ªO¡]Dialog Box Templates¡^

¦b DialogBoxParam ªº²Ä¤G­Ó°Ñ¼Æ¡A¬O¹ï¸Ü²°­±ªOªº¦WºÙ¡A¨º»ò¡A³o¤S¬O¤°»ò©O¡H

¹ï¸Ü²°­±ªO¬O¸ê·½´y­zÀɤºªº¤@¶ô°Ï°ì¡A¥¦´y­z¤F¹ï¸Ü²°ªº¥~Æ[»P¨ä¤ºªº±±¨î¶µ¡C¨Æ¹ê¤W¡A±±¨î¶µªº½Ï¥Í³Ì¥D­nªº¥Øªº´N¬O°t¦X¹ï¸Ü²°¡AÅý¨Ï¥ÎªÌ¨Ì¾Ú¤£¦Pªº¸ê®Æ¿ï¾Ü¾A¦Xªº±±¨î¶µ¿é¤J¡C¤]¥¿¦]¦p¦¹¡A¹ï¸Ü²°­±ªO»P±±¨î¶µ¯à¬Û¤¬·f°t¡C¹ï¸Ü²°­±ªOªºµ²ºc¦p¤U¡G

nameID  DIALOGEX    x, y, width, height[, helpID]
[ optional-statements ]
BEGIN
  control-statements
  ⁝
END

©³¤U¸ÑÄÀ¹ï¸Ü²°­±ªO¦U³¡¤À¥Îªk¡G

①¡B­º¥ý»¡©ú DIALOGEX ±Ô­z¡G

⑴¡BnameID¡GnameID ¬O¹ï¸Ü²°¦WºÙ¡A¥i¥H¬O¦r¦ê¡A¤]¥i¥H¬O 1¡ã65535 ¤§¶¡ªº¥¿¾ã¼Æ¡A¥¦¥²¶·»P DialogBoxParam ªº²Ä¤G­Ó°Ñ¼Æ¤@¼Ë¡C
⑵¡Bx¡By¡G¦bÃöÁä¦r DIALOGEX ¤§«áªº x¡By ¬O¹ï¸Ü²°ªº¿Ã¹õ®y¼Ð¡A³æ¦ì¬O¹ï¸Ü²°³æ¦ì¡]dialog units¡Aµy«á»¡©ú¡^¡C
⑶¡Bwidth¡Bheight¡G¤À§O¬O¹ï¸Ü²°¼e«×»P°ª«×¡A³æ¦ì¬O¹ï¸Ü²°³æ¦ì¡C
⑷¡BhelpID¡GÃѧO½X¡A¦b WM_HELP ³B²z´Á¶¡¥Î¨Óªí¥Ü¹ï¸Ü²°ªºÃѧO½X¡A¦b¤@¹ï¡u[]¡v¤¤ªº¤º®e¥i¥H¬Ù²¤¡C

②¡Boptional-statements ¬O´y­z¹ï¸Ü²°ªºÄÝ©Ê¡A¨C¤@¶µÄݩʳ£¥Ñ«e­±ªº±Ô­z»P¨ä«áªºÄݩʪí¥Ü¡A¨C¤@¶µ±Ô­z³£¬O¥i¥H¬Ù²¤ªº¡C©³¤U¬O³o¨Ç¥i¿ï±Ô­zªº»¡©ú¡G

⑴¡BCAPTION "text"¡GCAPTION ±Ô­z¤§«áªº "text" ·|Åã¥Ü¦b¹ï¸Ü²°¼ÐÃDÄæ¤W¡A¥²¶·¥H¤@¹ï¡u"¡v¬A¦í¡C
⑵¡BFONT pointsize, "typeface", weight, italic, charset¡G
⒜¡Bpointsize ¬O«ü©w¦r§Î¤j¤p¡A³æ¦ì¬OÂI¡C
⒝¡Btypeface ¬O¦r§Î¦WºÙ¡A¥²¶·¥Î¤@¹ï¡u"¡v¥]¬A°_¨Ó¡C
⒞¡Bweight ¬O¦r§Î²Ê²Ó¡A°_ÀY¬O¡uFW_¡v¡CFW_THIN ¬O³Ì²Óªº¦r§Î¡FFW_MEDIUM ¬O²Ê²Ó¾A¤¤ªº¦r§Î¡FFW_HEAVY ¬O³Ì²Êªº¦r§Î¡C
⒟¡Bitalic ¬O«ü¬O§_¬°±×Åé¦r¡A1 ªí¥Ü¥Î±×Åé¦r¡F0 ¤£¥Î±×Åé¦r¡C
⒠¡Bcharset ¬O¦r¤¸¶°¡A½Ð°Ñ¦Ò²Ä¤Q¤K³¹¡C
⒡¡B­Y¤£«ü©w FONT¡A¨º»ò´N·|¨Ï¥Î¨t²Î¦r§Î¡C
⑶¡BSTYLE style¡G¹ï¸Ü²°ªº­·®æ¡A¥i¥H¨Ï¥Îªº­·®æ»P CreateWindowsEx ªº dwStyle °Ñ¼Æ¤@¼Ë¡A¤]¥i¥H¨Ï¥Î¤Uªí¹ï¸Ü²°¯S¦³ªº­·®æ¡C¦pªG¦³«Ü¦hºØ­·®æ¡A¤¤¶¡¥H¡u|¡v¤À¹j¡A¡u|¡v¥Nªí or ¹Bºâ¡A³o¬O¦b¸ê·½´y­zÀɤ¤ªº¹Bºâ¡C
­·®æ¼Æ­È»¡©ú
DS_FIXEDSYS8¨Ï¥Îµ¥¼e«×ªº SYSTEM_FIXED_FONT ¦r§Î¨ú¥N¹w³]ªº SYSTEM_FONT
DS_SETFONT40HÅý¹ï¸Ü²°¨Ï¥Î FONT ±Ô­z©w¸qªº¦r§Î
DS_SHELLFONT48H¹ï¸Ü²°¨Ï¥Î¨t²Î¦r«¬¡A¦Ó¥B FONT ±Ô­z¤¤ªº "typeface" ¥²¶·³]©w¬° "MS Shell Dlg"¡A§_«h¤£·|¦³§@¥Î¡CDS_SHELLFONT ¨ä¹ê´N¬O DS_FIXEDSYS | DS_SETFONT¡C
DS_MODALFRAME80H«Ø¥ß¨ã¦³±j¨î¦^À³¹ï¸Ü²°ªº¥~®Ø
DS_CENTER800H§â¹ï¸Ü²°¸m©ó¾Ö¦³ªÌµøµ¡ªº¤u§@°Ï¤¤¤ß¡A¦pªG¥¼«ü©w©Ò¦³ªÌµøµ¡¡A´N¸m©ó¤u§@°Ï°ìªº¤¤¤ß¡]¤u§@°Ï°ì¬O«ü¥¼³Q¤u§@¦C©Î¥ô¦óÀ³¥Îµ{¦¡¦C¾B¾×ªº°Ï°ì¡^
DS_CENTERMOUSE1000H¹ï¸Ü²°Åã¥Ü©ó·Æ¹«´å¼Ð¦ì¸m
WS_THICKFRAME40000H¥i¥HÅý¨Ï¥ÎªÌ±N·Æ¹«²¾¦Ü¹ï¸Ü²°¥~®Ø¡A«ö¦í·Æ¹«¥ªÁ䤣©ñ¡AµM«á©ì¦²¦Ó§ïÅܹï¸Ü²°¤Ø¤o
WS_SYSMENU80000H¦b¹ï¸Ü²°¼ÐÃDÄ楪Ãä²K¥[¨t²Î¥\¯àªí¡A¥kÃä²K¥[Ãö³¬«ö¶s
¦b±j¨î¦^À³¹ï¸Ü²°¤¤¡A³Ì±`¨Ï¥Îªº­·®æ¬O¡uWS_POPUP | DS_MODALFRAME¡v¡C
⑷¡BCLASS "class"¡G¦bÃöÁä¦r CLASS ¤§«áªº class ¬OÃþ§O¦WºÙ¡A¥²¶·¥H¤@¹ï¡u"¡v¬A¦í¡C³q±`¹ï¸Ü®Öªºµøµ¡Ãþ§O¬O 32770¡A¦ý¤]¥i¥H¦Û¦æ«ü©w¡A³oºØ±¡§Î¸û¤Ö¨Ï¥Î¡A³q±`¬O­n¦Û¦æ¼¶¼g¹ï¸Ü²°¨ç¦¡³B²z°T®§¡A¥]§t­«·sø»s¡BÅÜ´«¿é¤JµJÂIµ¥°T®§¡C
⑸¡BMENU menuname¡GMENU ±Ô­z¥i¥H¨Ï¹ï¸Ü²°¨ã¦³¥\¯àªí¡A¦ý³oºØ±¡§Î¤£±`¨£¡Cmenuname ¬O¥\¯àªí¦WºÙ©ÎÃѧO½X¡A¦pªG¬O¦WºÙ¤£¥i¥Î¡u"¡v¬A¦í¡A¤]¥i¥H¬O 1¡ã65535 ¤§¶¡ªºµL¸¹¾ã¼Æ¡C¤£½×­þ¤@ºØ¡A³£­n»P¦ì©ó¸ê·½´y­zÀɤ¤¡AMENU ±Ô­z¤§«eªº¦WºÙ©ÎµL¸¹¼Æ¤@¼Ë¡C
⑹¡BEXSTYLE = extended-styles¡G¹ï¸Ü²°ªº©µ¦ù­·®æ¡A»P CreateWindowEx ²Ä¤@­Ó°Ñ¼Æ¤@¼Ë¡A©Î¬d¾\ MSDN¡C
⑺¡BLANGUAGE language, sublanguage¡Glanguage, sublanguage ¤À§O¬O¥D­n»y¨¥»P¦¸­n»y¨¥¡A¨£»y¨¥ÃѧO½X¡C
⑻¡BCHARACTERISTICS dword¡G©w¸q¹ï¸Ü²°ªº¯S¼x¸ê®Æ¡A³o¸ê®Æ¶È¤@­ÓÂù¦r²Õ¤j¤p¡A¦Ó¥B¥u«O¯d¦b RES Àɤ¤¡A¦b³sµ²¤§«á¤£·|«O¯d¦b EXE Àɤº¡C¦]¦¹³o¸ê®Æ¥u¯à³Q¸ê·½½s¿è¾¹©Î¸ê·½½sĶ¾¹¨Ï¥Î¡A¹ï¨t²Î¦Ó¨¥¨S¤°»ò¥Î³~¡C
⑼¡BVERSION dword¡G«ü©wª©¥»¸¹½X¡C

③¡Bcontrol-statements¡G¦b BEGIN/END ¤§¶¡¬O©w¸q¹ï¸Ü²°¤ºªº±±¨î¶µ¡ABEGIN/END ¤]¥i¥H¥Î¤@¹ï¡u{}¡v¥N´À¡A¨ä¤ºªº±±¨î¶µ¥i¯à¤£¥u¤@­Ó¡A¦]¦¹¦b control-statements ¤§¤U¥H¡u⁝¡vªí¥Ü¡C©w¸qªº¹ï¸Ü²°ªº¤è¦¡¦³¨âºØ¡G

⑴¡B¥H¤@¯ë±±¨î¶µªº©w¸q¥h´y­z±±¨î¶µ¡A§Î¦¡¦p¤U¡G
CONTROL "text", id, "class name", style, x, y, width, height
⒜¡BCONTROL ¬O¸ê·½´y­zÀɪº±Ô­z¡A¤j¤p¼g¤£©ë¡Aªí¥Ü­n¶}©l©w¸q±±¨î¶µ¤F¡C
⒝¡Btext ¬OÅã¥Ü¦b±±¨î¶µ¤W­±ªº¤å¦r¡A¶·¥H¤@¹ï¡u"¡v¬A¦í¡C¨ä¤ºªº¤å¦r³Q RC.EXE ½sĶ¤§«á·|³QÂà´«¦¨¸U°ê½X¡Ctext ¤]¥i¥H¥]§t´«¦æ¦r¤¸¡]\n¡^¡B¸õ®æ¦r¤¸¡]\t¡^¡B¤Þ¸¹¦r¤¸¡]\"¡^¡Ctext ¤º¤]¥i¥H¥]§t¡u&¡v¡A¦b¥¦¤§«áªº¦r¥À·|¥[¤W©³½u¡A¥Nªí¦¹¦r¥Àªº«öÁä¬O¥[³tÁä¡C¦pªG¯u­n¦b±±¨î¶µÅã¥Ü¡u&¡v¦r¤¸¡A´N­n¨Ï¥Î¡u&&¡v¡C
⒞¡Bid ¬O 0¡ã65535 ªºµL¸¹¾ã¼Æ¡A¬O±±¨î¶µªºÃѧO½X¡C
⒟¡Bclass name ¬Oµøµ¡Ãþ§O¡A¥i¥H¥Î¤@¹ï¡u"¡v¬A¦í¤]¥i¥H¤£¥Î¡Cclass name ¥i¥H¬O STATIC¡BBUTTON¡BEDIT¡BLISTBOX¡BSCROLLBAR ©Î COMBOBOX¡A¤j¤p¼g¤£©ë¡C
⒠¡Bstyle ¬O±±¨î¶µªº­·®æ¡C¤£¥²¥]§t¡uWS_CHILD | WS_VISIBLE¡v¡A¨t²Î·|¦Û¦æ¥[¤W¥h¡C
⒡¡Bx¡By ¬O±±¨î¶µªº¦ì¸m¡A³æ¦ì¬O¹ï¸Ü²°³æ¦ì¡C
⒢¡Bwidth¡Bheight ¬O±±¨î¶µªº¼e«×»P°ª«×¡A³æ¦ì¬O¹ï¸Ü²°³æ¦ì¡C
⑵¡B¥Î⑴¤è¦¡©w¸q±±¨î¶µ¡A¥i¯à»Ý­n¸û¦hªº­·®æ¡A©Ò¥H¸ê·½½sĶ¾¹¤]±µ¨ü©³¤Uªº¤è¦¡©w¸q±±¨î¶µ¡G
control-type "text", id, x, y, width, height [, style]
⒜¡B¨ä¤¤ control-type ¥i¥H¬O¤Uªí¤¤ªº±±¨î¶µÃþ«¬¡A¤Uªí¤]»¡©ú¤F©w¸q¤F±±¨î¶µÃþ«¬¤]¦P®É©w¸q¤F±±¨î¶µÃþ§O¡A¤Î©w¸q¤F¤º©w­·®æ¡A¥¿¦]¬°¦p¦¹¡A©Ò¥H¤ñ¥Î⑴¤è¦¡©w¸q±±¨î¶µ¸û¬°Â²¼ä¡C
µøµ¡Ãþ§O
class name
±±¨î¶µÃþ«¬
control-type
¦WºÙ¤º©w­·®æ
STATICLTEXT¦V¥ª¹ï»ôÀRºA±±¨î¶µSS_LEFT | WS_GROUP
CTEXT¦V¤¤¹ï»ôÀRºA±±¨î¶µSS_CENTER | WS_GROUP
RTEXT¦V¥k¹ï»ôÀRºA±±¨î¶µSS_RIGHT | WS_GROUP
ICON¹Ï¥ÜÀRºA±±¨î¶µSS_ICON
BUTTONPUSHBUTTON¤UÀ£¦¡«ö¶sBS_PUSHBUTTON | WS_TABSTOP
DEFPUSHBUTTON¹w³]¤UÀ£¦¡«ö¶sBS_DEFPUSHBUTTON | WS_TABSTOP
CHECKBOX½Æ¿ï®ØBS_CHECKBOX | WS_TABSTOP
AUTOCHECKBOX¦Û°Ê½Æ¿ï®ØBS_AUTOCHECKBOX | WS_TABSTOP
RADIOBUTTON³æ¿ï«ö¶sBS_RADIOBUTTON
AUTORADIOBUTTON¦Û°Ê³æ¿ï«ö¶sBS_AUTORADIOBUTTON
GROUPBOX¸s²Õ®ØBS_GROUPBOX
EDITEDITTEXT½s¿è®ØES_LEFT | WS_BORDER | WS_TABSTOP
LISTBOXLISTBOX²M³æ²°±±¨î¶µLBS_NOTIFY | WS_BORDER | WS_VSCROLL
SCROLLBARSCROLLBAR±²°Ê¶b±±¨î¶µSBS_HORZ
COMBOBOXCOMBOBOX¤U©Ô¦¡¤è¶ô±±¨î¶µCBS_SIMPLE
⒝¡Btext ¸ò¤W­z⑴ªº⒝¬Û¦P¡A¦ý¬O EDITTEXT¡BLISTBOX¡BSCROLLBAR¡BCOMBOBOX ³£¨S¦³ text¡C
⒞¡Bx¡By »P width¡Bheight ¸ò¤W­z⑴ªº⒡¡B⒢¬Û¦P¡C
⒟¡Bstyle ¥i¬Ù²¤¡A¦ý¦pªGÁٻݭn¨ä¥L­·®æ¡A´N¥i¥H©ó¦¹³B©w¸q¡C
⒠¡B¤Wªí¤¤ªº¤º©w­·®æ¨º¤@Äæ¡A¨CºØ±±¨î¶µÁ٨㦳¡uWS_CHILD | WS_VISIBLE¡v¡C¨Ò¦p¡A¥H¤U­±¤è¦¡©w¸qÀRºA±±¨î¶µ¡G
LTEXT   "¤áÄy¦a¡G",1, 6, 7,35, 12
¨º»ò¦¹ÀRºA±±¨î¶µªº­·®æ¦³¡uWS_CHILD | WS_VISIBLE | SS_LEFT | WS_GROUP¡v¡AÃѧO½X¬° 1¡C

¤@­Ó¹ï¸Ü²°­±ªOªº¨Ò¤l

©³¤U¤¶²Ð¤@­Ó¹ï¸Ü²°­±ªOªº¨Ò¤l¡A¥¦°õ¦æªºµ²ªG¦p¥k¹Ï¡C¹Ï¤¤¶È¶È«Ø¥ß¦n¦U±±¨î¶µ¡A¨Ã¥¼¦b¤U©Ô¦¡¤è¶ô±±¨î¶µ¡B²M³æ²°±±¨î¶µ¤¤²K¥[¶µ¥Ø¡A¤]¨S¦³³]©w©Ê§Oªº¨â­Ó¦Û°Ê³æ¿ï«ö¶s­þ­Ó¬O¹w³]ªº¡A³o¨Ç¤u§@¥²¶·¥ÑÀ³¥Îµ{¦¡ªº©I¥s¬ÛÃöªº API §¹¦¨¡C

MY_DLG  DIALOGEX    0,0,154,110
FONT    10,"MS Shell Dlg"
CAPTION "¨­¤ÀÃÒ²£¥Í¾¹"
BEGIN
  LTEXT       "¤áÄy¦a¡G",1,             6, 7,35, 12
  COMBOBOX               IDCB_PLACE,   39, 5,54,240,CBS_DROPDOWNLIST
  GROUPBOX        "©Ê§O",2,            98, 3,42, 43
  AUTORADIOBUTTON "¨k©Ê",IDB_BOY,     102,16,30, 12
  AUTORADIOBUTTON "¤k©Ê",IDB_GIRL,    102,29,30, 12
  LTEXT   "³]Äy«e¤áÄy¡G",3,             6,26,72, 11
  LISTBOX                IDLB_BEFORE,   6,36,72, 52
  EDITTEXT               IDE_ID,        8,90,80, 12,NOT WS_BORDER
  PUSHBUTTON      "²£¥Í",IDB_GENERATE,100,70,40, 14
  DEFPUSHBUTTON   "Â÷¶}",IDB_EXIT,    100,90,40, 14
END

¥i¥H¬Ý¨ì¡A¤U©Ô¦¡¤è¶ô±±¨î¶µ¡B²M³æ²°±±¨î¶µ©M½s¿è®Ø³£¨S¦³ text¡Aª½±µ¸õ¹L¡C¥Î EDITTEXT ¥Í¦¨ªº½s¿è®Ø·|¥]§t¥~®Ø¡A¬O¦]¬°¤º©w­·®æ¦³ WS_BORDER¡A¦pªG·Q­n»s§@µL¥~®Øªº¡A¥i¥H¥Î¡uNOT WS_BORDER¡v¡C¤]¥i¥H¥Î CONTROL ±Ô­z©w¸q½s¿è®Ø¡G

CONTROL "", IDE_ID, "EDIT", ES_LEFT|WS_TABSTOP, 8, 90, 80, 12

¥Î³o¤èªk®É¡A¦pªG¦b¨â­Ó¡u"¡v¤§¶¡¥[¤W¤å¦r¡A¨º»ò½s¿è®Ø´N·|¦³¹w³]ªº¤å¦r¤F¡C¦pªG­n¹³¤W¤@³¹¨º¼Ë¡A©I¥s CreateWindowEx «Ø¥ß³o­Ó½s¿è®Ø¡Aµ{¦¡¦p¤U¡G

rect    RECT    <8,90,8+80,90+12>
  ⁝
invoke  MapDialogRect,hDlg,ADDR rect
mov     r10d,rect.right
mov     r11d,rect.bottom
sub     r10d,rect.left
sub     r11d,rect.top
invoke  CreateWindowEx,0,OFFSET szEditClass,0,\
        WS_CHILD or WS_VISIBLE or ES_LEFT or WS_TABSTOP,\
        rect.left,rect.top,r10d,r11d,hDlg,IDE_ID,hInstance,0

¦]¬°²Ä¤T­Ó°Ñ¼Æ¬O¹s¡A¥Í¦¨ªº½s¿è®Ø¤º¨ÃµL¥ô¦ó¤å¦r¡F¤]¥i¥H§â²Ä¤T­Ó°Ñ¼Æ§ï¦¨¬Y­Ó¦r¦ê¦ì§}¡A³o®É­Ô½s¿è®Ø¤º´N·|¦³¹w³]¦r¦ê¤F¡C¦P²z¡A¨ä¥L±±¨î¶µ¥i¥H¥Î CONTROL ±Ô­z«Ø¥ß¡A¨Ò¦p¦Û°Ê³æ¿ï«ö¶s

  CONTROL  "¨k©Ê", IDB_BOY,  "BUTTON",BS_AUTORADIOBUTTON, 102, 16, 30, 12
  CONTROL  "¤k©Ê", IDB_GIRL, "BUTTON",BS_AUTORADIOBUTTON, 102, 29, 30, 12

¨ä¥L¤£¤@¤@Á|¨Ò¤F¡C©³¤UÁÙ¦³¤@¨ÇÃö©ó¹ï¸Ü²°ªº¸ê®Æ¡A¤]¤@¨Ö»¡¤F¡C

WM_INITDIALOG °T®§

¦b¹ï¸Ü²°«Ø¥ß¦n¦ý¥¼Åã¥Ü©ó¿Ã¹õ¤§«e¡A¨t²Î·|§â WM_INITDIALOG °T®§¶Ç°eµ¹¹ï¸Ü²°¨ç¦¡¡C¥¦¤]¬O¹ï¸Ü²°¨ç¦¡¦¬¨ìªº²Ä¤@«h°T®§¡A¨ä§@¥Î¬Û·í©óµøµ¡¨ç¦¡ªº WM_CREATE¡A¤@¯ë·|¦b³B²z¦¹°T®§®É¶i¦æªì©l¤Æ¤u§@¡CWM_INITDIALOG °T®§ªº lParam ¬O©I¥s DialogBoxParam¡BCreateDialogIndirectParam¡BCreateDialogParam¡BDialogBoxIndirectParam API «Ø¥ß¹ï¸Ü²°ªº³Ì«á¤@­Ó°Ñ¼Æ¤§­È¡C

³B²z§¹ WM_INITDIALOG °T®§«á¡A¦pªG¹ï¸Ü²°¨ç¦¡±N¦^¶Ç­È³]¬°¤@¡A¨º»ò¦b¹ï¸Ü²°­±ªO¤¤²Ä¤@­Ó¨ã¦³ WS_TABSTOP ­·®æªº±±¨î¶µ¡A±NÀò±oÁä½L¿é¤JµJÂI¡F¦pªG§â¦^¶Ç­ÈÀ³³]¬°¹s¡A«h¥ÑÀ³¥Îµ{¦¡©I¥s SetFocus ¦Û¦æ¨M©w­þ­Ó±±¨î¶µ±o¨ìÁä½L¿é¤JµJÂI¡C

WS_TABSTOP »P WS_GROUP ­·®æ

·í¹ï¸Ü²°¥X²{¦b¿Ã¹õ¤§«á¡A°£«D¨Ì«e­z¤è¦¡«ü©w­þ­Ó±±¨î¶µ¨ã¦³¿é¤JµJÂI¡A¤j³¡¤Àªº±¡ªp¬O¥Ñ¹ï¸Ü²°­±ªO¤¤¡A²Ä¤@­Ó¨ã¦³ WS_TABSTOP ­·®æªº±±¨î¶µ±o¨ì¿é¤JµJÂI¡C·í¨Ï¥ÎªÌ¨C«ö¤UÁä½L¤Wªº TAB Áä¤@¦¸¡A¿é¤JµJÂI«K·|Âಾ¨ì¹ï¸Ü²°­±ªO¤¤¤U¤@­Ó¨ã¦³ WS_TABSTOP ­·®æªº±±¨î¶µ¡Cª½¨ì³Ì«á¤@­Ó¨ã¦³ WS_TABSTOP ­·®æ±±¨î¶µ®É¡A¿é¤JµJÂI¤S·|¦^¨ì²Ä¤@­Ó¨ã¦³ WS_TABSTOP ­·®æ±±¨î¶µ¡C

¦b¹ï¸Ü²°­±ªO¤¤¡AÀRºA±±¨î¶µ¡ALTEXT¡BCTEXT¡BRTEXT¡BICON ³£¤£¨ã¿é¤JµJÂI¡A©Ò¥H¤£À³¨ã WS_TABSTOP ­·®æ¡F°²¦pÀ³¥Îµ{¦¡±j¦æ¨ÏÀRºA±±¨î¶µ¨ã¦³ WS_TABSTOP ­·®æ¡AÁÙ¬O¥i¥Hªº¡A¦ý¬O·|­n¦h«ö¤@¦¸ TAB Áä¤~¯à¸õ¨ì¤U¤@­Ó±±¨î¶µ¡C

¦b¹ï¸Ü²°­±ªO¤¤¥H LISTBOX¡BCOMBOBOX ©w¸q²M³æ²°±±¨î¶µ»P¤U©Ô¦¡¤è¶ô±±¨î¶µ¡A³£¤£¨ã WS_TABSTOP ­·®æ¡A³oÂI¤p¤ì°¸¤wÅçÃÒ¹L¡C·íµM¡AÀ³¥Îµ{¦¡ÁÙ¬O¥i¥H¨Ì»Ý­n¥[¤W¥h¡CMSDN ùØ°O¸ü¤U©Ô¦¡¤è¶ô±±¨î¶µ¤º©w¬O¦³ WS_TABSTOP ­·®æ¬O¿ùªº¡C

¥H RADIOBUTTON¡BAUTORADIOBUTTON ©w¸qªº³æ¿ï«ö¶s©Î¦Û°Ê³æ¿ï«ö¶s¹w³]ªº­·®æ¨Ã¤£¥]§t WS_TABSTOP¡A¦ý¬O¤@¥¹³Q°é¿ï«á¡A´N¦Û°Ê¨ã¦³ WS_TABSTOP ­·®æ¡C¦pªG¦³¼Æ­Ó³æ¿ï«ö¶s©Î¦Û°Ê³æ¿ï«ö¶s³Q¦C¦b¦P¤@­Ó¸s²Õ¡A¨º»ò´N¥u¦³³Q°é¿ï¤¤ªº¨ã¦³ WS_TABSTOP ­·®æ¡A¨ä¥L«h¤£¨ã¦¹­·®æ¡F¦pªG³Q°é¿ï¤¤³æ¿ï«ö¶s©Î¦Û°Ê³æ¿ï«ö¶s¨ã¿é¤JµJÂI¡A¨Ï¥ÎªÌ¥i¥H«ö¤è¦VÁä¡A¦b¸s²Õ¤º§ïÅÜ¿é¤JµJÂI¡A³o®É WS_TABSTOP ¤]ÀH¤§ÅÜ°Ê¡C¦pªG¦b¨C­Ó RADIOBUTTON¡BAUTORADIOBUTTON ³£¥[¤W WS_TABSTOP ­·®æªº¸Ü¡A¨º»ò¨Ï¥ÎªÌ¥i¥H«ö TAB Áä¡A¨Ï±o³æ¿ï«ö¶s©Î¦Û°Ê³æ¿ï«ö¶s±o¨ì¿é¤JµJÂI¡C

­n¦p¦ó±N¼Æ­Ó³æ¿ï«ö¶s©Î¦Û°Ê³æ¿ï«ö¶s³]¬°¦P¤@­Ó¸s²Õ©O¡H¤èªk«Ü²³æ¡A¥u»Ý¦b·Q³]¬°¦P¤@­Ó¸s²Õªº²Ä¤@­Ó±±¨î¶µ³]¸m WS_GROUP §Y¥i¡A¦Ó¦b¤U¤@­Ó¸s²Õªº²Ä¤@­Ó±±¨î¶µ¦A³]¸m WS_GROUP ­·®æ§Y¥i¡C³]¸m¦n¤§«á¡A¨C­Ó¨ã¦³ WS_GROUP ªº±±¨î¶µ¡A¬J¬O³o­Ó¸s²Õªº¶}©l¡A¤]¬O¤W­Ó¸s²Õªºµ²§ô¡C

¹ï¸Ü²°³æ¦ì¡]Dialog Units¡^

¦b¹ï¸Ü²°­±ªO¤¤¡A´y­z±±¨î¶µªº¦ì¸m¥H¤Î¤Ø¤o¡A¨ä³æ¦ì¨Ã«D¹³¯À¡A¦Ó¬OºÙ¬°¡u¹ï¸Ü²°³æ¦ì¡vªº³æ¦ì¡A¤]ºÙ¬°¡u¹ï¸Ü²°ÅÞ¿è³æ¦ì¡v¡]dialog logical units¡^¡A²ºÙ DLU¡C©³¤U²Î¤@ºÙ¦¹³æ¦ì¬°¹ï¸Ü²°³æ¦ì©Î DLU¡C¹ï¸Ü²°³æ¦ìªº¤j¤p»P¦r§Î©M¦r§Îªº¤j¤p¦³Ãö¡A¬Æ¦ÜÁÙ»P¤ô¥­¤è¦V©Î¹]Áè¤è¦V¦³Ãö¡C³o¼Ë³]©wªº­ì¦]¬O¬°¤F¦b¹ï¸Ü²°­±ªO§ïÅܦr§Î©Î¦r§Î¤j¤p®É¡A¨Ã¤£·|¼vÅT¦U­Ó±±¨î¶µªº»P¦r§Îªº¬Û¹ï¤j¤p¡A¦b¤@©wµ{«×¤W®ø«Ú¤F¦]¦r§Î§ïÅܦӨϱ±¨î¶µ¤Wªº¤å¦r³QºIÂ_ªº¯ÊÂI¡C

ÁöµM¦³³o­ÓÀuÂI¡A¦ý¬O´N³y¦¨¤F DLU »P¹³¯À¤§¶¡ªº´«ºâ«Ü½ÆÂø¡C³o¤j­P¥i¤À¬°¨â¤è­±¸ÑÄÀ¡G①¦pªG¹ï¸Ü²°¨Ï¥Î¨t²Î¦r§Î¡B②¦pªG¹ï¸Ü²°¨Ï¥Î«D¨t²Î¦r§Î¡C

¦pªG¹ï¸Ü²°¨Ï¥Î¨t²Î¦r§Î¡A¨º»ò DLU ¤ô¥­¤è¦V¤@­Ó³æ¦ì¬O¨t²Î¦r§Î¥­§¡¼e«×ªº¥|¤À¤§¤@¡ADLU ¹]Áè¤è¦V¤@­Ó³æ¦ì¬O¨t²Î¦r§Î¥­§¡°ª«×ªº¤K¤À¤§¤@¡C©I¥s GetDialogBaseUnits ¥i¥HÀò±o¨t²Î¦r§Îªº¥­§¡¼e«×»P°ª«×¡A°²³]¤À§O¬O W ©M H¡A¨º»ò DLU ¤ô¥­¤è¦V¤@­Ó³æ¦ì¬O W¡Ò4 ¹³¯À¡ADLU ¹]Áè¤è¦V¤@­Ó³æ¦ì¬O H¡Ò8 ¹³¯À¡C°²¦p¦³­Ó±±¨î¶µ¦ì©ó®y¼Ð ¡]x,y¡^³B¡A³o¬O¥H DLU ¬°³æ¦ì¡A¨º»ò¥H¹³¯Àªí¥Ü¡A¨ä X ®y¼Ð¬° x¡ÑW¡Ò4¡AY ®y¼Ð¬° y¡ÑH¡Ò8¡C¦b DLU »P¹³¯À´«ºâªº¹Lµ{¤¤¡A²o¯A¤F°£ªk¹Bºâ¡A·|¦³±Ë±ó¤p¼Æ³y¦¨»~®tªº¥i¯à¡C·L³n«Øij§Q¥Î MulDiv API ¶i¦æ­pºâ¡C

¹ï¤j¦h¼Æªº¹ï¸Ü²°¦Ó¨¥¡AÀ³¥Îµ{¦¡·|¦Û¦æ«ü©w¦r§Î¡A¦]¦¹ GetDialogBaseUnits ¤£¤Ó¦³¥Î¡C¨Ï¥Î«D¨t²Î¦r§Îªº¹ï¸Ü²°¡A­n¦b DLU »P¹³¯À¤§¶¡´«ºâ¡A³Ì²«Kªº¤èªk¬O©I¥s MapDialogRect API¡A¨Æ¹ê¤W¡A¥¦¤]¯à³B²z¨t²Î¦r§Î¡CMapDialogRect ¨ä¹ê¨Ã¤£­pºâ¥X¤@­Ó¤ô¥­¤è¦V DLU ¬O¦h¤Ö¹³¯À¡A©Î¤@­Ó¹]Áè¤è¦V DLU ¬O¦h¤Ö¹³¯À¡A¦Ó¬Oª½±µ­pºâ±±¨î¶µ©Ò¦bªº¯x§Î¡Aª½±µ¥Ñ DLU Åܦ¨¥H¹³¯Àªí¥Ü¡C

GetDlgItem API

¥Ñ¹ï¸Ü²°­±ªO«Ø¥ß¹ï¸Ü²°¥H¤Î¨ä¤ºªº±±¨î¶µ¡AÁöµM²«K¡A¦ý¦³®É»Ý­n±±¨î¶µ¥N½X®É¡A´N¦³°ÝÃD¤F¡C©¯¦n Windows ¨t²Î¦³´£¨Ñ GetDlgItem API¡A¥¦¯à°÷±q±±¨î¶µÃѧO½X¨ú±o±±¨î¶µ¥N½X¡A»yªk¬O¡G

invoke  GetDlgItem,\
        hDlg,\          ; handle of dialog box
        nIDDlgItem      ; identifier of control

hDlg ¬O¹ï¸Ü²°¥N½X¡AnIDDlgItem ¬O¸Ó¹ï¸Ü²°¤ºªº±±¨î¶µÃѧO½X¡C­Y GetDlgItem °õ¦æ¦¨¥\¡A¦^¶Ç­È¬°±±¨î¶µ¥N½X¡F­Y°õ¦æ¥¢±Ñ¡A¦^¶Ç­È¬°¹s¡C¨Æ¹ê¤W¡AGetDlgItem ªº°Ñ¼Æ hDlg ¤£¤@©w¬O¹ï¸Ü²°¥N½X¡AnIDDlgItem ¤£¤@©w¬O±±¨î¶µÃѧO½X¡A¥u­n¬O¤÷µøµ¡»P¤lµøµ¡ªºÃö«Y³£¥i¥H¨Ï¥Î GetDlgItem ¨Ó¨ú±o¤lµøµ¡¥N½X¡C


²M³æ²°±±¨î¶µ¡]List Box Control¡^

²M³æ²°±±¨î¶µ¬O¤@­Ó¯x§Îªº°Ï°ì¡A¨ä¤º¦³¦h­Ó¶µ¥Ø¥i¨Ñ¨Ï¥ÎªÌ¿ï¨ú¡C³o¨Ç¶µ¥Ø¥i¥H¬O¦r¦ê¡BÂI°}¹Ï¡A©Î¬O¥H¨âªÌ¨Óªí¥Ü¡C¨Ò¦p¥k¹Ïªº¡u¼x±B¡v¹ï¸Ü²°­n¨D¨Ï¥ÎªÌ¿ï¾Ü¦Û¤vªº©Ê§O»P¶Ý¦n¡A¦b¡u©Ê§O¡G¡vÀRºA±±¨î¶µ¤U¤è¡A¦³¨k¤H¡B¤k¤H¨â­Ó¶µ¥Ø©Ò¦bªº¯x§Î°Ï°ì´N¬O²M³æ²°±±¨î¶µ¡F¦¹¥~¡A¦b¡u¶Ý¦n¡G¡vÀRºA±±¨î¶µ¤U­±¡A¥]§tª±¹qª±¡B¬Ý¹q¼v¡K¡Kµ¥¶µ¥Øªº¯x§Î°Ï°ì¡A¤]¬O²M³æ²°±±¨î¶µ¡C

¥¦­Ì¤§¶¡ªº®t§O¦b©ó«eªÌ¬O³æ¿ï²M³æ²°¡A«áªÌ¬O½Æ¿ï²M³æ²°¡A²M³æ²°±±¨î¶µ´N¤À¬°³o¨âÃþ¡C¥i¥H±q¹Ï¤W¬Ý¥X¨Ó¡A©Ê§O«D¨k§Y¤k¡A¨Ï¥ÎªÌ¥i¥H¥Î·Æ¹«ÂI¿ï¨ä¤¤¥ô¤@¶µ¡A³Q¿ï¤¤ªº·|¥H²HÂŦâ­I´ºªí¥Ü¡A¹Ï¤¤³Q¿ï¤¤ªº¬O¤k¤H¡C¦¹¥~¡A¦b³o­Ó³æ¿ï²M³æ²°¤¤¡A¦³¨â­Ó¶µ¥Ø¡G¨k¤H»P¤k¤H¡A²M³æ²°·|½á¤©³o¨â­Ó¶µ¥Ø½s¸¹¡A¥Ñ¤W¦Ó¤U¡A±q¹s¶}©l¡AºÙ¬°¯Á¤Þ¡]index¡^¡A¨k¤Hªº¯Á¤Þ¬O 0¡A¤k¤H¬O 1¡C¥kÃ䪺½Æ¿ï²M³æ²°Åý¨Ï¥ÎªÌ¿ï¾Ü¶Ý¦n¡A¤@­Ó¤H¥i¥H¦³¦hºØ¶Ý¦n¡A¹Ï¤¤³Q¿ï¤¤ªº¦³¥|¶µ¡A¨ä¯Á¤Þ¤À§O¬O 1¡B2¡B3¡B5¡C

«Ø¥ß²M³æ²°±±¨î¶µ

¦b¹ï¸Ü²°­±ªO¨Ï¥Î LISTBOX «Ø¥ß²M³æ²°±±¨î¶µ¡A¦pªG¨S¦³³]¸m¯S§O­·®æ¡A´N¬O«Ø¥ß³æ¿ï²M³æ²°±±¨î¶µ¡C¦pªG­n«Ø¥ß½Æ¿ï²M³æ²°±±¨î¶µ¡A¥²¶·¥[¤W LBS_MULTIPLESEL ©Î LBS_EXTENDEDSEL ­·®æ¡C

LISTBOX  IDLB_SEX  , 6,16,30,40,WS_TABSTOP
LISTBOX  IDLB_HOBBY,45,16,36,60,LBS_MULTIPLESEL|WS_TABSTOP

©Î¬O¥Î CreateWindowEx «Ø¥ß²M³æ²°±±¨î¶µ¡A©³¤U¬Ù²¤¤F±±¨î¶µ¦ì¸m¤Î¤Ø¤oªº­pºâ¡G

azLbClass   DB  "LISTBOX",0
  ⁝
invoke  CreateWindowEx,0,OFFSET szLbClass,0,\
        WS_CHILD or WS_VISIBLE or WS_BORDER or WS_VSCROLL or LBS_NOTIFY or WS_TABSTOP,\
        x1,y1,w1,h1,hWnd,IDLB_SEX,hInstance,0
invoke  CreateWindowEx,0,OFFSET szLbClass,0,\
        WS_CHILD or WS_VISIBLE or WS_BORDER or WS_VSCROLL or LBS_NOTIFY or WS_TABSTOP or LBS_MULTIPLESEL,\
        x2,y2,w2,h2,hWnd,IDLB_HOBBY,hInstance,0

¥Î LBS_MULTIPLESEL »P LBS_EXTENDEDSEL ­·®æ³£·|²£¥Í½Æ¿ï²M³æ²°±±¨î¶µ¡A³o¨âºØ­·®æªº®t§O¦b©ó¨Ï¥Î¤£¦Pªº¤è¦¡¿ï¾Ü¦h­Ó¶µ¥Ø¡A½Ð°Ñ¾\¡u²M³æ²°±±¨î¶µªº­·®æ¡v¡C¤£½×­þ¤@ºØ­·®æ³y¦¨ªº½Æ¿ï²M³æ²°¡A³£¥i¥H¥ý§â·Æ¹«´å¼Ð²¾¨ì­n¿ï¨úªº¶µ¥Ø¤W¡AµM«á«ö¦í Ctrl Á䤣©ñ¡A¦A¥H·Æ¹«¥ªÁäÂIÀ»¸Ó¶µ¥Ø¡A´N¯à¿ï¨ú¸Ó¶µ¥Ø¡F³o¨BÆJ¥i­«½Æ¦h¦¸¡A´N¯à¿ï¨ú¦h­Ó¶µ¥Ø¡C¦pªG¤w¿ï¨ú­Y¤z¶µ¥Ø¡A¦ý¤S·Q¨ú®ø¨ä¤¤¬Y­Ó¶µ¥Ø¡A¥i¥H¥ý§â·Æ¹«´å¼Ð²¾¨ì¬Y¶µ¥Ø¤W­±¡AµM«á«ö¦í Ctrl Á䤣©ñ¡A¦A¥H·Æ¹«¥ªÁäÂIÀ»¬Y¶µ¥Ø¡A´N¯à¨ú®ø¬Y¶µ¥Ø¦Ó¤£¼vÅT¨ä¥L¤w¿ï¶µ¥Ø¡C

²M³æ²°±±¨î¶µªº­·®æ

©³¤U¦C¥X²M³æ²°ªº­·®æ¡G

²M³æ²°±±¨î¶µªº­·®æ¼Æ­È»¡©ú
LBS_NOTIFY1H²M³æ²°·|±N³qª¾½X¶Ç°eµ¹¤÷µøµ¡¡G¨Ï¥ÎªÌÂIÀ»²M³æ²°¤ºªº¶µ¥Ø¶Ç°e LBN_SELCHANGE ³qª¾½X¡AÂIÀ»¶µ¥Ø¨â¦¸¶Ç°e LBN_DBLCLK ³qª¾½X¡A¨ú®ø¤w¿ï©wªº¶µ¥Ø®É¶Ç°e LBN_SELCANCEL ³qª¾½X¡C
LBS_SORT2H¨Ì¸U°ê½X¶¶§Ç±Æ§Ç²M³æ²°¤¤ªº¦r¦ê¡C
LBS_NOREDRAW4H²M³æ²°¥~Æ[§ïÅܮɤ£·|­«·sø»s¡C¥i¥H¦b³B²z WM_SETREDRAW ®É­«·sø»s¡C
LBS_MULTIPLESEL8H¥H·Æ¹«¥ªÁäÂIÀ»¶µ¥Ø´N¯à¨Ï¸Ó¶µ¥Ø³Q¿ï¤¤¡A¦pªGÁÙ­n¿ï¨ä¥L¶µ¥Ø¡A¥i¥H¦A¥H·Æ¹«¥ªÁäÂIÀ»­n¿ïªº¶µ¥Ø¡Aª½¨ì©Ò¦³¸Ó¿ïªº¶µ¥Ø³£¿ï¤¤¬°¤î¡F¦pªG­n¨ú®ø¬Y­Ó¤w¿ï¤¤ªº¶µ¥Ø¡A´N¦b¸Ó¶µ¥Ø¦AÂI¿ï¤@¦¸´N¥i¨ú®ø¸Ó¶µ¥Ø¡C
LBS_OWNERDRAWFIXED10H¾Ö¦³ªÌ²M³æ²°¤ºªº¶µ¥Ø°ª«×§¡¬Û¦P®É¡A¥i³]¸m¦¹­·®æ¡C
LBS_OWNERDRAWVARIABLE20H¾Ö¦³ªÌ²M³æ²°¤ºªº¶µ¥Ø°ª«×¤£¦P®É¡A¥i³]¸m¦¹­·®æ¡C
LBS_HASSTRINGS40H«ü©w²M³æ²°¤º¥]§t¦r¦ê¶µ¥Ø¡A¨Æ¹ê¤W°£¤F¾Ö¦³ªÌø»sªº²M³æ²°¤§¥~¡A©Ò¦³²M³æ²°³£¹w³]¨ã¦³¦¹­·®æ¡A©Ò¥H¤@¯ë³£¤£¥²³]¸m¦¹­·®æ¡C¦pªG«Ø¥ß¤F¾Ö¦³ªÌø»sªº²M³æ²°¡A¥i¥H¨ã¦³¦¹­·®æ¡A¤]¥i¥H¤£§t¦¹­·®æ¡C¨ã¦³ LBS_HASSTRINGS ­·®æªº²M³æ²°¡A¥i¥HÅýÀ³¥Îµ{¦¡¨Ï¥Î LB_GETTEXT °T®§¨ÓÂ^¨ú¨ä¤º¬Y­Ó¶µ¥Øªº¦r¦ê¡C
LBS_USETABSTOPS80H¨Ï²M³æ²°¯à¿ëÃÑ TAB ¦r¤¸¨Ãø»s¡A¹w³] TAB ¦r¤¸¬Û¹j 32 ­Ó¹ï¸Ü²°³æ¦ì¡A¦ý¥i¥H¥Î LB_SETTABSTOPS °T®§§ïÅÜ¡C
LBS_NOINTEGRALHEIGHT100H¦b«Ø¥ß²M³æ²°®É¡AWindows ·|½Õ¾ã¤Ø¤o¡A¨Ï²M³æ²°³Ì¤U­±ªº¶µ¥Ø¯à§¹¥þÅã¥Ü¥X¨Ó¡F¦ý¨ã¦³ LBS_NOINTEGRALHEIGHT ­·®æ¤§²M³æ²°ªº¤Ø¤o»P«Ø¥ß®ÉÀ³¥Îµ{¦¡©Ò«ü©wªº¤Ø¤o§¹¥þ¤@¼Ë¡AWindows ¤£¶i¦æ½Õ¾ã¡C¦¹¥~¦b¨ã¦³ LBS_OWNERDRAWVARIABLE ªº¾Ö¦³ªÌø»s²M³æ²°¡A¥²¨ã³Æ¦¹­·®æ¡C
LBS_MULTICOLUMN200H«ü©w¦h¦æ¥B¨ã¤ô¥­±²°Êªº²M³æ²°¡C¨C¦æ¼e«×¥Î LB_SETCOLUMNWIDTH ¨Ó³]©w¡F­Y¬O LBS_OWNERDRAWFIXED ªº²M³æ²°«h¦b³B²z WM_MEASUREITEM °T®§®É³]©w¡F­Y³£¨S³]©w¨t²Î·|¦Û¦æ­pºâ¡C¨ã LBS_MULTICOLUMN ­·®æªº²M³æ²°µLªk¹]Áè±²°Ê¡A·|©¿²¤ WM_VSCROLL °T®§¡CLBS_MULTICOLUMN ¤£¯à©M LBS_OWNERDRAWVARIABLE ¦X¥Î¡A¦pªG¦P®É«ü©w¤F³o¨â­Ó­·®æ¡ALBS_OWNERDRAWVARIABLE ·|³Q©¿²¤¡C
LBS_WANTKEYBOARDINPUT400H²M³æ²°¨ã¦³¿é¤JµJÂI¥B¨Ï¥ÎªÌ«ö¤UÁä½L¤Wªº«öÁä®É¡A¤÷µøµ¡·|¦¬¨ì WM_VKEYTOITEM °T®§¡AÀ³¥Îµ{¦¡¥i¥H¶i¦æ¬Y¨Ç¾Þ§@¡C
LBS_EXTENDEDSEL800H¿ï¾Ü³sÄòªº¦h­Ó¶µ¥Ø¡C¥ý¥H·Æ¹«¥ªÁäÂIÀ»­n¿ïªº³sÄò¶µ¥Ø²Ä¤@­Ó¶µ¥Ø¡A«ö¦íÁä½L¤Wªº Shift Á䤣©ñ¡A¦A§â·Æ¹«´å¼Ð²¾¨ì­n¿ï¤¤ªº³Ì«á¤@­Ó¶µ¥ØÂIÀ»¥¦¡A´N¯à§â²Ä¤@­Ó¨ì³Ì«á¤@­Ó¤¤¶¡©Ò¦³¶µ¥Ø³£¿ï¤¤¡C
LBS_DISABLENOSCROLL1000H¨ã¦³ WS_VSCROLL ©Î WS_HSCROLL ­·®æªº²M³æ²°¤¤¡A¦pªG¶µ¥Ø¤Ó¤Ö¤£¦Ü©ó¨Ï²M³æ²°®e¯Ç¤£¤U¡A¨º´N¤£·|¥X²{±²¶b¡C¦ý¦pªG¨ã¦³ LBS_DISABLENOSCROLL ­·®æªº¸Ü¡A´N·|Åã²{¸T¥Îª¬ºAªº±²¶b¡C¦¹­·®æ¥²¶·»P WS_VSCROLL ©Î WS_HSCROLL ¤@°_¨Ï¥Î¡C
LBS_NODATA2000H¦¹­·®æ¥²¶·»P LBS_OWNERDRAWFIXED ¦X¥Î¡A¤£¥i»P LBS_HASSTRINGS ©Î LBS_SORT ¦X¥Î¡C¨ã¦³ LBS_NODATA ªº²M³æ²°»P¾Ö¦³ªÌø»s²M³æ²°¬Û¦ü¡A¤£·|¦b²M³æ²°¤ºÅã¥Ü¦r¦ê©Î¦ì¤¸¹Ï¡A¥²¶·¦b³B²z WM_DRAWITEM ¤¤Ã¸»s¶µ¥Ø¡C¨t²Î¤£·|ºÞ²z¨ã¦³ LBS_NODATA ªº²M³æ²°¤ºªº¶µ¥Ø¸ê®Æ¡A¥²¶·¥ÑÀ³¥Îµ{¦¡¦Û¦æºÞ²z¡A¦]¦¹¹ï©ó·s¼W¡B´¡¤J¡B§R°£¶µ¥Øªº©R¥O¡A¶È¶ÈÅܧ󶵥ØÁ`¼Æ¨Ã¤£·|¦b°O¾ÐÅ餤²K¥[©Î§R°£¶µ¥Ø¸ê®Æ¡A©Ò¥H·j´M¥²©w¥¢±Ñ¡C¨ã¦³ LBS_NODATA ªº²M³æ²°³q±`¥Î©ó¶µ¥ØÁ`¼Æ¤Ó¦h¡A¤×¨ä¶W¹L 1000 ªº®É­Ô¡C
LBS_NOSEL4000H²M³æ²°¤ºªº¶µ¥Ø¥u¯à¬d¦ý¤£¯à¿ï¨ú¡C
LBS_STANDARDA00003H¬Û·í©ó LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER¡C

¶Ç»¼°T®§µ¹²M³æ²°±±¨î¶µ

»PÀRºA±±¨î¶µ¡B½s¿è®Ø¡B«ö¶s¤@¼Ë¡AÀ³¥Îµ{¦¡¯à±N°T®§µo°eµ¹²M³æ²°±±¨î¶µ¡A¥HÀò±o²M³æ²°¤ºªº¸ê®Æ¡A©Î­n¨D²M³æ²°¶i¦æ¬Y¨Ç¾Þ§@¡C¤Uªí¶È¦C¥X±`¥Îªº°T®§¡A¨ä¥L§ó¦h°T®§½Ð¬d¾\ MSDN¡C

°T®§»¡©úwParamlParam¦^¶Ç­È
LB_ADDSTRING¦b²M³æ²°¤¤²K¥[¤@­Ó¦r¦ê¶µ¥Ø¡C­Y²M³æ²°¤£¨ã LB_SORT¡A¨º»ò·s²K¥[ªº¶µ¥Ø·|©ñ¦b³Ì¥½¶µ¡F¦pªG¨ã¦³ LB_SORT¡A·|¨Ì¾Ú¦r¦êªº¸U°ê½X±Æ¦C¤£¨Ï¥Î¡AÀ³³]¬° 0¥H¹sµ²§Àªº¦r¦ê¦ì§}¦^¶Ç­È¬O·s²K¥[¶µ¥Øªº¯Á¤Þ¡C¦pªGµo¥Í¿ù»~¡A¦^¶Ç­È¬° LB_ERR¡F¦pªG¦]ªÅ¶¡¤£¨¬¦Ó¥Í¦¨¿ù»~¡A¦^¶Ç­È¬° LB_ERRSPACE¡C
LB_GETSELCOUNT¨ú±o²M³æ²°¤º¤w¿ï©wªº¶µ¥ØÁ`¼Æ¤£¨Ï¥Î¡AÀ³³]¬° 0¤£¨Ï¥Î¡AÀ³³]¬° 0¤w¿ï©wªº¶µ¥ØÁ`¼Æ¡C­Y²M³æ²°¤£¨ã LBS_MULTIPLESEL ©Î LBS_EXTENDEDSEL ­·®æ¡A¦^¶Ç­È¬° LB_ERR
LB_GETCOUNT¨ú±o²M³æ²°¤º¶µ¥ØÁ`¼Æ¤£¨Ï¥Î¡AÀ³³]¬° 0¤£¨Ï¥Î¡AÀ³³]¬° 0­Y¦¨¥\¦^¶Ç­È¬°¶µ¥ØÁ`¼Æ¡A§_«h¬° LB_ERR
LB_GETTEXT¨ú±o¬Y­Ó¶µ¥Øªº¤å¦r­n¨ú±o¤å¦rªº¶µ¥Ø¯Á¤Þ¨ú±oªº¶µ¥Ø¤å¦r¦s©ñ¦ì§}­Y¦¨¥\¡A¦^¶Ç­È¬°¨ú±oªº¦r¤¸¼Æ¡A¤£¥]§tµ²§À¹s¡F§_«h¬° LB_ERR
LB_SELITEMRANGE¿ï©w©Î¨ú®ø¿ï©w¤@­Ó©Î¦h­Ó³sÄò¶µ¥Ø¡A»Ý¨ã¦³ LBS_MULTIPLESEL ­·®æ1 ¥Nªí¿ï©w¡A0 ¥Nªí¨ú®ø¿ï©w§C¦r²Õ¬O¶}©lªº¯Á¤Þ¡A°ª¦r²Õ¬Oµ²§ô¯Á¤Þ¦pªG¥¢±Ñ¦^¶Ç­È¬° LB_ERR
LB_GETCURSEL¨ú±o³æ¿ï²M³æ²°¤¤³Q¿ï©w¶µ¥Ø¤§¯Á¤Þ­È¤£¨Ï¥Î¡AÀ³³]¬° 0¤£¨Ï¥Î¡AÀ³³]¬° 0¦^¶Ç­È¬°³Q¿ï©w¶µ¥Ø¤§¯Á¤Þ­È¡A­Y¨S¦³³Q¿ï©wªº¶µ¥Ø¡A¦^¶Ç­È¬° LB_ERR
LB_GETSELITEMS¨ú±o½Æ¿ï²M³æ²°¤¤³Q¿ï©w¶µ¥Ø¤§¯Á¤Þ­È¡A¦¹¯Á¤Þ¥i¯à¦³«Ü¦h­Ó¡AÀx¦s©óÂù¦r²Õ°}¦C¤¤°}¦C¤º¤¸¯À­Ó¼Æ¦s©ñ¯Á¤Þªº°}¦C¦ì§}­Y¬°³æ¿ï²M³æ²°¡A¦^¶Ç­È¬O LB_ERR
LB_GETSELCOUNT¨ú±o½Æ¿ï²M³æ²°¤¤³Q¿ï©w¶µ¥Ø¼Æ¤£¨Ï¥Î¡AÀ³³]¬° 0¤£¨Ï¥Î¡AÀ³³]¬° 0¶Ç¦^­È¬O²M³æ²°³Q¿ï¤¤ªº¶µ¥Ø¼Æ¡F­Y¬°³æ¿ï²M³æ²°¡A¦^¶Ç­È¬O LB_ERR
LB_SETCURSEL¦b³æ¿ï²M³æ²°¤¤¿ï©w¤@­Ó¶µ¥Ø­n¿ï©wªº¶µ¥Ø¯Á¤Þ¤£¨Ï¥Î¡AÀ³³]¬° 0­Y¥¢±Ñ¦^¶Ç­È¬° LB_ERR
LB_SELITEMRANGE¦b½Æ¿ï²M³æ²°¤¤¿ï©w©Î¨ú®ø¿ï©w¼Æ­Ó³sÄòªº¶µ¥Ø­Y¬° 1¡Aªí¥Ü¿ï©w¡F­Y¬° 0¡Aªí¥Ü¨ú®ø¿ï©w§C¦r²Õ¬°°_©l¶µ¥Ø¯Á¤Þ¡A°ª¦r²Õ¬°µ²§ô¶µ¥Ø¯Á¤Þ­Y¥¢±Ñ¦^¶Ç­È¬° LB_ERR

ÁÙ¬O¥H¼x±B¹ï¸Ü²°¬°¨Ò¡C¥k¹Ï¤¤¡A­Y­n¦b­è«Ø¥ß¦nªº©Ê§O²M³æ²°¤¤¡A­n²K¥[¨â­Ó¶µ¥Ø¡u¨k¤H¡v¡B¡u¤k¤H¡v¡Aµ{¦¡½X¦p¤U¡G

szMale     DB   "¨k¤H",0,
szFemale   DB   "¤k¤H",0
  ⁝
        invoke  GetDlgItem,hDlg,IDLB_SEX
        mov     hLbSex,rax
        invoke  SendMessage,hLbSex,LB_ADDSTRING,0,OFFSET szMale
        invoke  SendMessage,hLbSex,LB_ADDSTRING,0,OFFSET szFemale

³q±`²M³æ²°·|¦³¹w³]¶µ¥Ø¡A¤]´N¬O¤@¶}©l¤w¸g¹w¥ý¿ï©wªº¶µ¥Ø¡A°²³]¹w³]ªº¶µ¥Ø¬O¡u¤k¤H¡v¡Aµ{¦¡½X¬°¡G

        invoke  SendMessage,hLbSex,LB_SETCURSEL,1,0

±`¥Îªº²M³æ²°ªº³qª¾½X

²M³æ²°ªº³qª¾½X¸ò«ö¶s¤@¼Ë¡AÂÇ¥Ñ WM_COMMAND ¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡A¦b WM_COMMAND °T®§¤¤¡AwParam ªº°ª¦r²Õ¡]¤]´N¬O²Ä 16¡ã31 ¦ì¤¸¡^¬O³qª¾½X¡A§C¦r²Õ¡]¤]´N¬O²Ä 0¡ã15 ¦ì¤¸¡^¬OÃѧO½X¡AlParam ¬O²M³æ²°¥N½X¡C²M³æ²°ªº³qª¾½X»P¨ä»¡©ú¨£¤Uªí¡G

³qª¾½X¼Æ­È»¡©ú
LBN_SELCHANGE1H·í¨Ï¥ÎªÌÂI¿ï¨ã³Æ LBS_NOTIFY ­·®æªº²M³æ²°¤¤¶µ¥Ø¡A¦Ó§ïÅÜ¿ï©w¶µ¥Ø®É¡A±N¦¹³qª¾½Xµo°eµ¹¤÷µøµ¡¡C­Y¬O¦]¬° LB_SETSEL¡BLB_SETCURSEL¡BLB_SELECTSTRING¡BLB_SELITEMRANGE ©Î LB_SELITEMRANGEEX °T®§Åܧó¿ï¨ú½d³ò¡A«h¤£·|¶Ç°e¦¹³qª¾½X¡C
LBN_DBLCLK2H·í¨Ï¥ÎªÌÂI¿ï²M³æ²°¤¤ªº¶µ¥Ø¨â¦¸¡C
LBN_SELCANCEL3H³qª¾À³¥Îµ{¦¡¨Ï¥ÎªÌ¤w¨ú®ø²M³æ²°¤¤ªº¿ï¨ú½d³ò¡C
LBN_SETFOCUS4H³qª¾À³¥Îµ{¦¡²M³æ²°¤w¦¬¨ìÁä½L¿é¤JµJÂI¡C
LBN_KILLFOCUS5H³qª¾À³¥Îµ{¦¡²M³æ²°¤w¥¢¥hÁä½L¿é¤JµJÂI¡C
LBN_ERRSPACE¡Ð2³qª¾À³¥Îµ{¦¡²M³æ²°µLªk°t¸m¨¬°÷ªº°O¾ÐÅé¡C

¤´¥H¼x±B¹ï¸Ü²°¬°¨Ò¡CÁöµMÀ³¥Îµ{¦¡¥ý¹w³]¤F©Ê§O¡A¦ý¨Ï¥ÎªÌÁÙ¬O¯à¨Ì¦Û¨­¬O¨k¬O¤k¿ï¾Ü©Ê§O¡A©Ò¥H³Ì«á­n³B²zªº®É­Ô¡AÁÙ¥²¶·¨ú±o¨Ï¥ÎªÌ³Ì«á©Ò¿ï©wªº©Ê§O¡C¨Ò¦p·í¨Ï¥ÎªÌÂIÀ»©Ê§O²M³æ²°¤¤ªº¶µ¥Ø®É¡Aµ{¦¡½X¦p¤U¡G

DlgProc PROC    hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_COMMAND
        mov     rax,r8  ;R8W¡×ÃѧO½X
        shr     rax,10h ;AX¡×³qª¾½X
  .if ax==LBN_SELCHANGE
        invoke  SendMessage,hLbSex,LB_GETCURSEL,0,0
    .if eax==0
        ;¦¹³B¬°³B²z¨k¤Hªºµ{¦¡½X
    .else
        ;¦¹³B¬°³B²z¤k¤Hªºµ{¦¡½X
    .endif

¤U©Ô¦¡¤è¶ô±±¨î¶µ¡]Combo Box Control¡^

¤U©Ô¦¡¤è¶ô±±¨î¶µ¤]½Ķ¦¨¤U©Ô¦¡²M³æ¡B²Õ¦X®Ø©Î½Æ¦X®Ø¡A©³¤U¥H½Æ¦X®ØºÙ¤§¡CÅU¦W«ä¸q¡A½Æ¦X®Ø¨ä¹ê¬Oµ²¦X¤F¨âºØ±±¨î¶µªº¥\¯à¦Ó¦¨¡A¨ä¤@¬O²M³æ²°¡A¥t¤@ªÌ¬O½s¿è®Ø©ÎÀRºA±±¨î¶µ¡]¤]ºÙ¤w¿ï°Ï¡Aselection field¡^¡C½Æ¦X®Ø¥i¤À¬°¤TºØ¡G

  1. ²³æ«¬¡]simple combo box¡^¡GÅã¥Ü¥i¿é¤J¤å¦rªº½s¿è®Ø¥H¤Î¥i¨£ªº²M³æ²°¡C
  2. ¤U©Ô«¬¡]drop-down combo box¡^¡G¶ÈÅã¥Ü¥i¿é¤J¤å¦rªº½s¿è®Ø¡A¨ä«á³sµÛ¤@­Ó¦V¤U½b¸¹ªº¹Ï¥Ü¡C¨Ï¥ÎªÌ«ö¤U¹Ï¥Ü¡A¤~·|¬Ý¨£²M³æ²°¡A¦pªG¿ï¾Ü¨ä¤¤¤@­Ó¿ï¶µ¡A¸Ó¿ï¶µ¤å¦r·|¥X²{¦b½s¿è®Ø¤º¡F¤]¥i¥Hª½±µ¦b½s¿è®Ø¤º¿é¤J¤å¦r¡C
  3. ¤U©Ô²M³æ«¬¡]drop-down list combo box¡^¡G¶ÈÅã¥ÜÀRºA±±¨î¶µ¡A¨ä«á³sµÛ¤@­Ó¦V¤U½b¸¹ªº¹Ï¥Ü¡C¨Ï¥ÎªÌ«ö¤U¹Ï¥Ü¡A¤~·|¬Ý¨£²M³æ²°¡A¨Ï¥ÎªÌµLªk¦bÀRºA±±¨î¶µ¿é¤J¤å¦r¡A¥u¯à¦b²M³æ²°¤¤¿ï©w¡A³Q¿ï©wªº¤å¦r·|Åã¥Ü©óÀRºA±±¨î¶µ¤W¡C

¥k¹Ï¤¤¡A³Ì¥ªÃ䪺¡u©Ê§O¡G¡vÀRºA±±¨î¶µ¤U­±ªº¬O²³æ«¬½Æ¦X®Ø¡A¤¤¶¡ªº¡u¾Ç¾ú¡G¡vÀRºA±±¨î¶µ¤U­±ªº¬O¤U©Ô«¬½Æ¦X®Ø¡A¥kÃ䪺¡u¤ë¦¬¤J¡G¡vÀRºA±±¨î¶µ¤U­±ªº¬O¤U©Ô²M³æ«¬½Æ¦X®Ø¡C¹Ï¤¤¨Ï¥ÎªÌ¥¿¦b¾Þ§@¤¤¶¡ªº¤U©Ô«¬½Æ¦X®Ø¡A¥ýÂIÀ»¥kÃ䪺¦V¤U¹Ï¥Ü«áÅã²{²M³æ²°¡A²{¦b¨Ï¥ÎªÌ§â·Æ¹«´å¼Ð²¾¨ì¡u¤j¾Ç¡vªº¶µ¥Ø¤W¡AÁÙ¥¼ÂIÀ»¡A©Ò¥H¤w¿ï°ÏÅã¥Üªº¬O­ì¥»¿ï©wªº¶µ¥Ø¤å¦r¡A¤p¾Ç¡C

«Ø¥ß½Æ¦X®Ø

¸ò¨ä¥L±±¨î¶µ¤@¼Ë¡A¥i¥H¦b¹ï¸Ü²°­±ªO¤¤©w¸q½Æ¦X®Ø¦A©I¥s DialogBoxParam «Ø¥ß½Æ¦X®Ø¡F¤]¥i¥Hª½±µ©I¥s CreateWindowEx «Ø¥ß¡C¦pªG¦b¹ï¸Ü²°­±ªO¤¤©w¸q½Æ¦X®Ø®É¡A²³æ«¬¤£¶·¯S§O«ü©w¨ä¥L­·®æ¡A¤U©Ô«¬»P¤U©Ô²M³æ«¬¶·¤À§O«ü©w CBS_DROPDOWN »P CBS_DROPDOWNLIST¡C¨Ò¦p¤W¹Ï¡u¼x±B¡v¹ï¸Ü²°¤¤ªº¤T­Ó½Æ¦X®Ø©w¸q¦p¤U¡G

  COMBOBOX   IDCB_SEX,   4,14,30,37
  COMBOBOX   IDCB_EDU,  43,14,43,12,CBS_DROPDOWN 
  COMBOBOX   IDCB_INC,  95,14,53,12,CBS_DROPDOWNLIST

¦b¹ï¸Ü²°­±ªOùؤ]¥i¥H¥Î CONTROL §Î¦¡¡A¤W­±¤T­Ó½Æ¦X®Ø¤]¥i¥H¼g¦¨¤U­±ªº¼Ë¤l¡G

  CONTROL   "",IDCB_SEX, "COMBOBOX",CBS_SIMPLE,       4,14,30,37
  CONTROL   "",IDCB_EDU, "COMBOBOX",CBS_DROPDOWN,    43,14,43,12
  CONTROL   "",IDCB_INC, "COMBOBOX",CBS_DROPDOWNLIST,95,14,53,12

¦b¹ï¸Ü²°­±ªO©w¸q½Æ¦X®Ø®É¡A¤£½×¬O¥H COMBOBOX ©Î¬O CONTROL ©w¸q¡A²³æ«¬½Æ¦X®Øªº°ª«×¬O¥]§t¤w¿ï°Ï»P²M³æ²°¡F¤U©Ô«¬»P¤U©Ô²M³æ«¬½Æ¦X®Øªº°ª«×¥i¥HÀH·N³]©w¡AWindows ·|±N¨ä½Õ¾ã¬°¤@¦Cªº°ª«×¡A²¦³º³o¨âÃþ½Æ¦X®Ø¶È¶ÈÅã¥Ü¤w¿ï°Ï¤Î¿ï©wªº¶µ¥Ø¡A¬G¥u»Ý¤@¦Cªº°ª«×¡C

°£¤F¦b¹ï¸Ü²°­±ªO©w¸q½Æ¦X®Ø¥~¡A¤]¥i¥Hª½±µ©I¥s CreateWindowEx¡Aµ{¦¡½X¦p¤U¡G

szCbClass   DB      "COMBOBOX",0
  ⁝
invoke  CreateWindowEx,0,OFFSET szCbClass,0,WS_CHILD or WS_VISIBLE or CBS_SIMPLE,\
        x1,y1,w1,h1,hDlg,IDCB_SEX,hInstance,0
invoke  CreateWindowEx,0,OFFSET szCbClass,0,WS_CHILD or WS_VISIBLE or CBS_DROPDOWN,\
        x2,y2,w2,h2,hDlg,IDCB_EDU,hInstance,0
invoke  CreateWindowEx,0,OFFSET szCbClass,0,WS_CHILD or WS_VISIBLE or CBS_DROPDOWNLIST,\
        x3,y3,w3,h3,hDlg,IDCB_SEX,hInstance,0

½Æ¦X®Øªº­·®æ

°£¤F CBS_SIMPLE¡BCBS_DROPDOWN¡BCBS_DROPDOWNLIST «ü©w¤£¦PÃþ«¬ªº½Æ¦X®Ø¤§¥~¡A½Æ¦X®Ø¤]¥i¥H¨Ï¥Î¤U­±ªº­·®æ¡A¥H¹F¨ì¯S®í¥Øªº¡C

²M³æ²°±±¨î¶µªº­·®æ¼Æ­È»¡©ú
CBS_SIMPLE1H²³æ«¬½Æ¦X®Ø
CBS_DROPDOWN2H¤U©Ô«¬½Æ¦X®Ø
CBS_DROPDOWNLIST3H¤U©Ô²M³æ«¬½Æ¦X®Ø
CBS_OWNERDRAWFIXED10H¾Ö¦³ªÌø»s½Æ¦X®Ø¤ºªº¶µ¥Ø°ª«×§¡¬Û¦P®É¡A¥i³]¸m¦¹­·®æ¡C
CBS_OWNERDRAWVARIABLE20H¾Ö¦³ªÌø»s½Æ¦X®Ø¤ºªº¶µ¥Ø°ª«×¤£¦P®É¡A¥i³]¸m¦¹­·®æ¡C
CBS_AUTOHSCROLL40H·í¨Ï¥ÎªÌ¦b½s¿è®Ø¿é¤J¤Ó¦h¦r¤¸®É¡A¦Û°Ê¦V¥k±²°Ê¡C¦pªG¨S¦³¦¹­·®æ¡A´N¤£¤¹³\µLªk¿é¤J¶W¥X½s¿è®Øªº¦r¤¸¡C
CBS_OEMCONVERT80H±N½Æ¦X®Øªº½s¿è±±¨î¶µ¤¤¿é¤Jªº¤å¦r±q Windows ¦r¤¸¶°Âà´«¬° OEM ¦r¤¸¶°¡AµM«á¦AÂà´«¦^ Windows ¦r¤¸¶°¡CÀ³¥Îµ{¦¡©I¥s CharToOem ±N½Æ¦X®Ø¤¤ªº Windows ¦r¦êÂà´«¬° OEM ¦r¤¸®É¡A¥i½T«O¥¿½Tªº¦r¤¸Âà´«¡A¦¹­·®æ¹ï©ó¤º§tÀɮצWºÙªº½Æ¦X®Ø³Ì¦³¥Î¡A¨Ã¥B¶È¾A¥Î©ó²³æ«¬©Î¤U©Ô«¬½Æ¦X®Ø¡C
CBS_SORT100H¨Ì¸U°ê½X¶¶§Ç±Æ§Ç²M³æ²°¤¤ªº¦r¦ê¡C
CBS_HASSTRINGS200H¨Ï¾Ö¦³ªÌø»s½Æ¦X®Ø¬O§t¦³¥Ñ¦r¦ê²Õ¦¨ªº¶µ¥Ø¡A¦Ó¥B½Æ¦X®Ø­t³dºûÅ@³o¨Ç¦r¦êªº°O¾ÐÅé©M¦ì§}¡A¥H«KÀ³¥Îµ{¦¡¥i¥H¨Ï¥Î CB_GETLBTEXT °T®§¨ÓÀ˯Á¯S©w¶µ¥Øªº¤å¦r¡C
CBS_NOINTEGRALHEIGHT400H¦b«Ø¥ß½Æ¦X®Ø®É¡AWindows ·|½Õ¾ã¤Ø¤o¡A¨Ï½Æ¦X®Ø³Ì¤U­±ªº¶µ¥Ø¯à§¹¥þÅã¥Ü¥X¨Ó¡F¦ý¨ã¦³ CBS_NOINTEGRALHEIGHT ­·®æ¤§½Æ¦X®Øªº¤Ø¤o»P«Ø¥ß®ÉÀ³¥Îµ{¦¡©Ò«ü©wªº¤Ø¤o§¹¥þ¤@¼Ë¡AWindows ¤£¶i¦æ½Õ¾ã¡C
CBS_DISABLENOSCROLL800H½Æ¦X®Øªº²M³æ²°¤º¡A¦pªG¶µ¥Ø¤Ó¤Ö¤£¦Ü©ó¨Ï²M³æ²°®e¯Ç¤£¤U¡A¨º´N¤£·|¥X²{±²¶b¡C¦ý¦pªG¨ã¦³ LBS_DISABLENOSCROLL ­·®æªº¸Ü¡A´N·|Åã²{¸T¥Îª¬ºAªº±²¶b¡C
CBS_UPPERCASE2000H±N¤w¿ï°Ï¤Î²M³æ²°¤ºªº¦r¤¸³£Åܬ°¤j¼g¡C
CBS_LOWERCASE4000H±N¤w¿ï°Ï¤Î²M³æ²°¤ºªº¦r¤¸³£Åܬ°¤p¼g¡C

¨ã¦³ CBS_OWNERDRAWFIXED ©Î CBS_OWNERDRAWVARIABLE ­·®æªº½Æ¦X®ØºÙ¬°¾Ö¦³ªÌø»sªº½Æ¦X®Ø¡A¥²¶·¥ÑÀ³¥Îµ{¦¡¦b³B²z WM_MEASUREITEM °T®§®É¨M©w½Æ¦X®Ø¤Ø¤o¡A¨Ã³B²z WM_DRAWITEM °T®§®Éø»s¶µ¥Ø¡C³o¸ò²Ä¤Q¤K³¹¾Ö¦³ªÌø»sªº¿ï¶µ¡]Owner-Drawn Menu Items¡^Ãþ¦ü¡C

¶Ç»¼°T®§µ¹½Æ¦X®Ø

¤Uªí¶È¦C¥X±`¥Îªº°T®§¡A¨ä¥L§ó¦h¸ê®Æ½Ð¬d¾\ MSDN¡C

°T®§»¡©úwParamlParam¦^¶Ç­È
CB_ADDSTRING¦b½Æ¦X®Ø²M³æ²°¤¤·s¼W¦r¦ê¶µ¥Ø¡C­Y¤£¨ã CBS_SORT ­·®æ¡A·s¼Wªº¶µ¥Ø¦ì©ó§ÀºÝ¡A§_«h¨Ì¸U°ê½X±Æ¦C¤£¨Ï¥Î¡AÀ³³]¬° 0­n¥[¤Jªº¦r¦ê¦ì§}¡A¦¹¦r¦ê¶·¥H¹sµ²§À­Y¦¨¥\¡A¦^¶Ç­È¬°·s¼W¶µ¥Øªº¯Á¤Þ¡F­Y¥¢±Ñ¡A¦^¶Ç­È¬° CB_ERR
CB_DELETESTRING§R°£½Æ¦X®Øªº²M³æ²°¤¤ªº¦r¦ê­n§R°£¤§¦r¦êªº¯Á¤Þ¤£¨Ï¥Î¡AÀ³³]¬° 0³Ñ¾l¶µ¥ØÁ`¼Æ
CB_GETCOUNT¨ú±o²M³æ²°¤ºªº¶µ¥ØÁ`¼Æ¤£¨Ï¥Î¡AÀ³³]¬° 0¤£¨Ï¥Î¡AÀ³³]¬° 0­Y¦¨¥\¡A¦^¶Ç­È¬°¶µ¥ØÁ`¼Æ¡F­Y¥¢±Ñ¡A¦^¶Ç­È¬° CB_ERR
CB_GETCURSEL¨ú±o¥Ø«e³Q¿ï¤¤¶µ¥Øªº¯Á¤Þ¤£¨Ï¥Î¡AÀ³³]¬° 0¤£¨Ï¥Î¡AÀ³³]¬° 0­Y¦¨¥\¡A¦^¶Ç­È¬°³Q¿ï¤¤¶µ¥Øªº¯Á¤Þ¡F­Y¥¢±Ñ¡A¦^¶Ç­È¬° CB_ERR
CB_GETLBTEXT±q²M³æ²°¤¤¨ú±o¬Y¶µ¥Øªº¦r¦ê­n¨ú±o¦r¦êªº¶µ¥Ø¯Á¤Þ¦s©ñ¦r¦ê¦ì§}­Y¦¨¥\¡A¦^¶Ç­È¬°¨ú±oªº¦r¦êªø«×¡F­Y¥¢±Ñ¡A¦^¶Ç­È¬° CB_ERR
CB_SETCURSEL±q½Æ¦X®Øªº²M³æ²°¤¤¿ï©w¬Y­Ó¶µ¥Ø­n¿ï©wªº¶µ¥Ø¯Á¤Þ¤£¨Ï¥Î¡AÀ³³]¬° 0­Y¦¨¥\¡A¦^¶Ç­È¬°¿ï©wªº¶µ¥Ø¯Á¤Þ¡F­Y wParam ¬°¡Ð1 ©Î¶W¹L¶µ¥ØÁ`¼Æ¡A¦^¶Ç­È¬° CB_ERR¡A¥B­ì¥»¿ï©wªº¶µ¥ØÅÜ¥¼¿ï©w

½Æ¦X®Ø§â³qª¾½Xµo°eµ¹¤÷µøµ¡

½Æ¦X®Øªº³qª¾½X¸ò²M³æ²°¤@¼Ë¡AÂÇ¥Ñ WM_COMMAND ¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡A¦b WM_COMMAND °T®§¤¤¡AwParam ªº°ª¦r²Õ¬O³qª¾½X¡A§C¦r²Õ¬OÃѧO½X¡AlParam ¬O½Æ¦X®Ø¥N½X¡C½Æ¦X®Ø±`¥Îªº³qª¾½X»P¨ä»¡©ú¨£¤Uªí¡A¨ä¥L§ó¦h¸ê®Æ½Ð¬d¾\ MSDN¡G

³qª¾½X¼Æ­È»¡©ú
CBN_SELCHANGE1Ãö³¬½Æ¦X®Øªº²M³æ²°®Éµo°e¦¹³qª¾½X¡C
CBN_DBLCLK2¨Ï¥ÎªÌÂùÀ»Â²³æ«¬½Æ¦X®Øªº²M³æ²°¤º¡A¬Y­Ó¶µ¥Ø®Éµo°e¦¹³qª¾½X¡C­YÂùÀ»¥t¥~¨âºØ½Æ¦X®Ø¤ºªº¶µ¥Ø®É¡A·|Ãö³¬²M³æ²°¡C
CBN_SETFOCUS3½Æ¦X®ØÀò±oÁä½L¿é¤JµJÂI®É°e¦¹³qª¾½X¡C
CBN_KILLFOCUS4½Æ¦X®Ø¥¢¥hÁä½L¿é¤JµJÂI®É°e¦¹³qª¾½X¡C
CBN_EDITCHANGE5½Æ¦X®Øªº½s¿è®Ø¤º¡A­Y¤å¦r§ïÅÜ¥Bµe­±¤w§ó·s§¹¦¨®É¡Aµo°e¦¹³qª¾½X¡C¤U©Ô²M³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C
CBN_EDITUPDATE6½Æ¦X®Øªº½s¿è®Ø¤º¡A­Y¤å¦r§ïÅÜ¥Bµe­±§ó·s«e¡Aµo°e¦¹³qª¾½X¡C¤U©Ô²M³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C
CBN_DROPDOWN7§Y±NÅã¥Ü½Æ¦X®Øªº²M³æ²°®Éµo°e¦¹³qª¾½X¡C²³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C
CBN_CLOSEUP8Ãö³¬½Æ¦X®Øªº²M³æ²°®É¶Ç°e¦¹³qª¾½X¡C²³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C

¦b¤U©Ô«¬¤Î¤U©Ô²M³æ«¬³o¨âÃþ½Æ¦X®Ø¤¤¡A¨Ï¥ÎªÌÂI¿ï½Æ¦X®Ø²M³æ²°¤ºªº¿ï¶µ®É¡A¤£¶È¥i¯à³y¦¨³Q¿ï©wªº¶µ¥ØÅܧó¡A¦P®É¤]·|Ãö³¬²M³æ²°¡A©Ò¥H·|²£¥Í¨â­Ó³qª¾½X¡GCBN_SELCHANGE¡BCBN_CLOSEUP¡C¦ý¨Ã¨S¦³¤èªk¯à°Ï§O­þ¤@­Ó³qª¾½X¥ýµo¥Í¡A¤@¯ë¥i¥H³B²z CBN_CLOSEUP¡Aµ¥Ãö³¬²M³æ²°¤§«á¦A³B²z¡C


½d¨Ò¡GMODAL1.ASM

¥»³¹½d¨Ò¡AMODAL1.ASM¡A¯à²£¥Í¤@­Ó±j¨î¦^À³¹ï¸Ü²°¡A¦¹¹ï¸Ü²°¬O¤@­Ó¨­¤ÀÃÒ¦r¸¹²£¥Í¾¹¡C¨­¤ÀÃÒ¦r¸¹¦³¯S®íªºÅçÃÒ³W«h¡A¨Ã¤£¬O¥ô·N¸¹½X³£¥i¥H¡A¦Ó MODAL1.ASM ©Ò¥Í¦¨ªº¨­¤ÀÃÒ¦r¸¹¯à³q¹LÅçÃÒ³W«h¡C­ì©lµ{¦¡¤Î¸ê·½´y­zÀɤÀ§O¬O MODAL1.ASM¡BMODAL1.RC¡A¥i¥H¨ì³oùؤU¸ü¡C

°õ¦æ®É¡A¥ý²£¥Í¤U¹Ï¥ªÃ䪺µøµ¡¡A´£¥Ü¨Ï¥ÎªÌ«ö¤U F5 Áä¡A¦pªG«ö¤U F5 Áä·|¼u¥X¤U¹Ï¥kÃ䪺±j¨î¦^À³¹ï¸Ü²°¡C²{¦b§A¥i¥H¸Õ¸Õ¡A¬Ý¬O§_¯à¨Ï­ì¥ýªºµøµ¡±Ò¥Î¡A¥HÅçÃÒ¦¹¹ï¸Ü²°¬O§_¬°±j¨î¦^À³¹ï¸Ü²°¡C¨Ï¥ÎªÌ¿ï¾Ü¦n¤áÄy¦a¡B©Ê§O¡B³]Äy«e¤áÄy¤§«áÂIÀ»²£¥Í«ö¶s¡A´N·|¦b¥ª¤U¨¤¥Í¦¨¤@²Õ¨­¤ÀÃÒ¦r¸¹¡C§A¥i¥H¨ì³oùØ¡A¬Ý¬Ý¥¦¬O§_³q¹LÅçÃÒ¡C ¤W¹Ï¤¤¡A¥Hµµ¦â®Ø®Ø¦íªº¬O¤U©Ô²M³æ«¬½Æ¦X®Ø¡A¥H¬õ®Ø®Ø¦íªº¬O²M³æ²°±±¨î¶µ¡C

«Ø¥ß±j¨î¦^À³¹ï¸Ü²°

MODEL1.ASM ·f°t¸ê·½´y­zÀɦӧΦ¨¤W¹Ïªº¹ï¸Ü²°¡A©³¤U¬O¸ê·½´y­zÀÉ¡AMODAL1.RC¡Aªº¤º®e¬O¡G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "RESOURCE.H"
#define IDCB_PLACE   2000
#define IDB_BOY      2001
#define IDB_GIRL     2002
#define IDLB_BEFORE  2003
#define IDE_ID       2004
#define IDB_GENERATE 2005
#define IDB_EXIT     2006

MY_ACCE ACCELERATORS
BEGIN
  VK_F5,2007,VIRTKEY
END

MY_DLG  DIALOGEX    0,0,154,110
FONT    10,"MS Shell Dlg"
CAPTION "¨­¤ÀÃÒ¦r¸¹²£¥Í¾¹"
BEGIN
  LTEXT       "¤áÄy¦a¡G",1,             6, 7,35, 12
  COMBOBOX               IDCB_PLACE,   39, 5,58,240,CBS_DROPDOWNLIST|WS_TABSTOP
  GROUPBOX        "©Ê§O",2,           104, 3,42, 43
  AUTORADIOBUTTON "¨k©Ê",IDB_BOY,     108,16,30, 12
  AUTORADIOBUTTON "¤k©Ê",IDB_GIRL,    108,29,30, 12
  LTEXT   "³]Äy«e¤áÄy¡G",3,             6,26,72, 11
  LISTBOX                IDLB_BEFORE,   6,36,72, 52,WS_TABSTOP
  EDITTEXT               IDE_ID,        8,90,80, 12,NOT WS_BORDER|ES_READONLY
  PUSHBUTTON      "²£¥Í",IDB_GENERATE,100,70,46, 14
  DEFPUSHBUTTON   "Â÷¶}",IDB_EXIT,    100,90,46, 14
END

¤W­±¸ê·½´y­zÀɪº²Ä 12 ¦æ©w¸q¤F F5 ¥[³tÁä¡A¥H¤Î¨äÃѧO½X¬° 2007¡C«ö¤U F5 Á䤧«á¡Aµo¥X WM_COMMAND °T®§¨ìµøµ¡¨ç¦¡¡A©ó¦¹°T®§¤¤©I¥s DialogBoxParam ¥H«Ø¥ß¹ï¸Ü²°¡Aµ{¦¡½X¦p¤U¡C·íµM¦b³o¤§«e¡A¥²¶·¸ü¤J¥[³tÁä¡A¦Ó¥B­n¨Ï°T®§°j°é¯àÃѧO¥X¥[³tÁä¡A³o¨Ç¦b²Ä¤Q¤E³¹¤w¸g»¡©ú¹L¡A©Î¬O¦Û¦æ¤U¸ü MODAL1.ASM ¬ã¨s¡C

        ⁝
;-----------------------------------------------------------------------------------------
WndProc PROC    hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
        LOCAL   ps:PAINTSTRUCT,client_rect:RECT
.switch uMsg
  .case WM_COMMAND
    .if r8w==2007       ;¦pªGR8W¡×2007¡Aªí¥Ü¨Ï¥ÎªÌ«ö¤U¥[³tÁä¡AF5
        invoke  DialogBoxParam,hInstance,OFFSET szDlgTempName,hWin,OFFSET DlgProc,0
    .endif
        ⁝

¹ï¸Ü²°¨ç¦¡

«Ø¥ß¦n¹ï¸Ü²°¤§«á¡A²Ä¤@­Ó­n³B²zªº°T®§¬O WM_INITDIALOG¡AÀ³¥Îµ{¦¡¥²¶·¦b³oùعï²M³æ²°¥H¤Î½Æ¦X®Ø¡]¤]¥s¤U©Ô¦¡¤è¶ô±±¨î¶µ¡^²K¥[¶µ¥Ø¡A§_«h¥¦­ÌùØ­±¬OªÅªº¨S¦³¥ô¦ó¶µ¥Ø¡A¨Ï¥ÎªÌ¤]´NµLªk¿ï©w¶µ¥Ø¡C¦b²M³æ²°»P½Æ¦X®Ø¤¤²K¥[¶µ¥Øªº¤èªk«Ü¬Û¦ü¡A³£¬O©I¥s SendMessage¡A¦p¤U¡G

invoke  SendMessage,hListBox,LB_ADDSTRING,0,OFFSET szString
invoke  SendMessage,hComboBox,CB_ADDSTRING,0,OFFSET szString

¦ý¦b MODAL1 ùØ­±¡A²M³æ²°¤¤­n·s²K¤J¤­­Ó¶µ¥Ø¡A½Æ¦X®Ø­n²K¤J 26 ­Ó¶µ¥Ø¡C²M³æ²°¶µ¥Ø¤Ö¡A±Ä¥Îª½±µ©I¥s¤­¦¸ SendMessage ªº¤è¦¡¡F½Æ¦X®Ø¶µ¥Ø¤Ó¦h¡A±Ä¥Î°j°éªº¤è¦¡¡C¤U­±ªºµ{¦¡¤ù¬q¥Î¨Ó§â 26 ­Ó¦r¦ê¶µ¥Ø¶ñ¤J½Æ¦X®Ø¤¤¡C¨ä¤¤ªº pPlace ¬O°Ï°ìÅܼơA¥Nªí¨C­Ó¦r¦êªº°_©l¦ì§}¡Fi ¤]¬O°Ï°ìÅܼơA¥Nªí¨C­Ó¶µ¥Øªº¯Á¤Þ¡C

        mov     i,0
        lea     r9,szPlace
        mov     pPlace,r9
next:   invoke  SendMessage,hComboBox,CB_ADDSTRING,0,pPlace
        add     pPlace,10       ;¨C­Ó¶µ¥Ø³£¦û¤F10­Ó¦ì¤¸²Õ
        cmp     i,5
        jne     @f
        add     pPlace,7        ;¦ý²Ä¤­¶µ(¥Ñ²Ä¹s¶µ¶}©lºâ)¤S¦h¤F¤C­Ó¦ì¤¸²Õ
@@:     inc     i
        cmp     i,26
        jb      next

½Æ¦X®Ø¤º°£¤F²Ä¤­­Ó¶µ¥Ø¤§¥~¡A¨ä¾l¶µ¥Øªº¦r¦êªø«×³£¬O 10 ­Ó¦ì¤¸²Õ¡]¥]§tµ²§Àªº¹s¡^¡F©Ò¥H¥Î CB_ADDSTRING °Ñ¼Æ©I¥s SendMessage ²K¥[¤@¶µ¥Ø«á¡A´N¨Ï pPlace ¼W¥[ 10¡A¥H«ü¦V¤U¤@­Ó¦r¦êªº¦ì§}¡F¦ý²Ä¤­¶µ¨Ò¥~¡A¦]¬°¥¦ªºªø«×¦³ 17 ­Ó¦ì¤¸²Õ¡C

³oùظɥR«ç»ò­pºâ³o¨Ç¦r¦êªø«×¬O¦h¤Ö­Ó¦ì¤¸²Õ¡H¦]¬° MODAL1.ASM ¨Ã¨S¦³¯S§O«ü©w¡A©Ò¥H¤å¦r±Ä¥Î ANSI ½s½X¡A¹ï¥¿Å餤¤å¦Ó¨¥¡A¨C­Ó¤¤¤å¦r»Ý¥Î¨â­Ó¦ì¤¸²Õªí¥Ü¡A­^¤å¦r¥À¡Bªü©Ô§B¼Æ¦r¡B²Å¸¹¡K¡Kµ¥¥u»Ý¤@­Ó¦ì¤¸²Õªí¥Ü¡C¨Ò¦p²Ä¹s­Ó¶µ¥Ø¬O¡u¥x¥_¥«(A),0¡v¡A¤T­Ó¤¤¤å¦r¦³¤»­Ó¦ì¤¸²Õ¡A¦A¥[¤W (¡B)¡BA¡B0¡A¦U¦û¤@­Ó¦ì¤¸²Õ¡A¦@¥|­Ó¦ì¤¸²Õ¡A¬GÁ`¦@¤Q­Ó¦ì¤¸²Õ¡C

±µ¤U¨ÓÁÙ­n¦b²M³æ²°¡B½Æ¦X®Ø¤¤¬D¿ï¤@­Ó¤w¿ï©wªº¶µ¥Ø§@¬°¹w³]¿ï©wªº¶µ¥Ø¡C¤@¯ë¦Ó¨¥¡A¹w³]¿ï©wªº¶µ¥Ø¬O¯Á¤Þ­È¬°¹sªº¶µ¥Ø¡A¹ï²M³æ²°»P½Æ¦X®Ø¦Ó¨¥¡A¤À§O¬O¡u¥X¥Í¤§¥»Äy°ê¥Á¡v¤Î¡u¥x¥_¥«(A)¡v¡C©I¥s SendMessage ®É¡A²Ä¤T­Ó°Ñ¼Æ¬°¹s¡Aµ{¦¡½X¦p¤U¡G

        invoke  SendMessage,hListBox,LB_SETCURSEL,0,0
        invoke  SendMessage,hComboBox,CB_SETCURSEL,0,0

·í¨Ï¥ÎªÌ«ö¤U¡uÂ÷¶}¡v©Î¡u²£¥Í¡v«ö¶s®É¡A·|¹ï¹ï¸Ü²°¨ç¦¡µo¥X WM_COMMAND °T®§¡C³B²z«ö¤U¡uÂ÷¶}¡v«ö¶sªº¹Lµ{«Ü²³æ¡Aª½±µ¸õÅD¦Ü©I¥s EndDialog ³B§Y¥i¡C³B²z«ö¤U¡u²£¥Í¡v«ö¶sªº¹Lµ{»Ý²£¥Í¨­¤ÀÃÒ¦r¸¹¡AµM«á¦AÅã¥Ü©ó°ßŪ½s¿è®Ø¤¤¡Cµ{¦¡½X¦p¤U¡G

.if uMsg==WM_COMMAND
        mov     rax,r8  ;R8W¡×ÃѧO½X
        shr     rax,10h ;AX¡×³qª¾½X
  .if ax==BN_CLICKED
    .if r8w==IDB_EXIT
        jmp     exit
    .elseif r8w==IDB_GENERATE
        call    generate
        invoke  SetWindowText,hEditID,OFFSET id
    .endif
  .endif

¨­¤ÀÃÒ¦r¸¹²£¥Í¾¹°Æµ{¦¡

¤¤µØ¥Á°ê¨­¤ÀÃÒ¦r¸¹³s¦P­^¤å¦r¥À¦@¤Q½X¡A½Ð°Ñ¾\ºû°ò¦Ê¬ì¡A©³¤U²§ã±Ô­z¡G

  1. ²Ä¤@½X¬°­^¤å¦r¥À¡A¥Nªí¤áÄy¦a¡C¨Ò¦p A ¥Nªí¥x¥_¥«¡BB ¥Nªí¥x¤¤¥«¡K¡K
  2. ²Ä¤G½X¬°©Ê§O¡A¥u¯à¬O 1 ©Î 2¡F1 ¥Nªí¨k©Ê¡A2 ¥Nªí¤k©Ê¡C
  3. ²Ä¤T½X¬°¤JÄy«e¨­¤À¡G0¡ã5 ªí¥Ü¦b¤¤µØ¥Á°ê¥X¥Í¡A7 ªí¥ÜµL°êÄy¤§¤H«á¤JÄy¤¤µØ¥Á°ê¡A8 ¬°´ä¿D©~¥Á«á¤JÄy¤¤µØ¥Á°ê¡A9 ¬°¤j³°©~¥Á«á¤JÄy¤¤µØ¥Á°ê¡A6 ­ì¬°¨ä¥L¦a°Ï©~¥Á«á¤JÄy¤¤µØ¥Á°ê¡C
  4. ²Ä¥|¡ã¤E½X¬°¬y¤ô¸¹¡C
  5. ²Ä¤Q½X¬°ÅçÃÒ½X¡A¨Ã«D¥ô·N¼Æ¦r§¡¥i¡A»Ý½Õ¾ã¦¹½X¨Ï¨­¤ÀÃÒ¦r¸¹¦³®Ä¡C

ÅçÃÒ½Xªº¼Æ­È¬O¦h¤Ö¡A»P²Ä¤@¡ã¤E½X¦³Ãö¡A­pºâ¹Lµ{¦p¤U¡G

  1. ­º¥ý¡A§â­^¤å¦r¥À¨Ì¾Ú¤UªíªºÂà´«¼Æ­È©î¦¨¤Q¦ì¼Æ»P­Ó¦ì¼Æ¡A¤À§O¬O A1¡BA2¡C¨Ò¦p¡u¥x«n¥«(D)¡v¡AA1¡×1¡BA2¡×3¡C
    ¦r¥ÀABCDEFGHIJKL MNOPQRSTUVWXYZ
    Âà´«¼Æ­È101112131415161734181920 2122352324252627282932303133
    µ¥»ù¼Æ­È1098765493221 0898765431320
  2. ²Ä¤G¡ã¤E½Xªºªü©Ô§B¼Æ¦r°²³]¬O N2¡BN3¡BN4¡BN5¡BN6¡BN7¡BN8¡BN9¡AÅçÃÒ½X¬O N10¡A¸g¥Ñ¤U­±¤½¦¡­pºâ N¡G
    N¡×A1¡ÏA2¡Ñ9¡ÏN2¡Ñ8¡ÏN3¡Ñ7¡ÏN4¡Ñ6¡ÏN5¡Ñ5¡ÏN6¡Ñ4¡ÏN7¡Ñ3¡ÏN8¡Ñ2¡ÏN9¡ÏN10
  3. ­Y N ¯à³Q 10 ¾ã°£¡A§Y¬°¦³®Äªº¨­¤ÀÃÒ¦r¸¹¡F§_«h¬OµL®Äªº¡C

²Ä¤@½X¬°­^¤å¦r¥À¡AÂà´«¼Æ­È¨Ã©î¦¨¤Q¦ì¼Æ»P­Ó¦ì¼Æ¤§«á¡A­Ó¦ì¼Æ­¼¥H¤E¦A»P¤Q¦ì¼Æ¬Û¥[¡A¨äµ²ªG¬O©T©wªº¡C³oµ²ªGªº¤Q¦ì¼Æ¤£·|¼vÅTÅçÃÒ¨­¤ÀÃÒ¬O§_¦³®Ä¡A©Ò¥H¥u¶·Àˬd­Ó¦ì¼Æ§Y¥i¡C¦pªG§â¥¦¦C¦¨ªí¯à´î¤Ö³\¦hµ{¦¡½X»P­pºâ¹Lµ{¡A¨ì®É¥u¶·¬dªí§Y¥i¡A³o´N¬O¤Wªí³Ì«á¤@¦Cµ¥»ù¼Æ­Èªº½t¥Ñ¡C¨Ò¦p¤áÄy¬O«ÌªF¿¤¡A©Ò¥Nªíªº­^¤å¦r¥À¬° T¡AÂà´«¼Æ­È¬° 27¡AA1¡×2¡AA2¡×7¡A©Ò¥H 2¡Ï7¡Ñ9¡×65¡A°£¥H¤Q±o¾l¼Æ¬° 5¡A©Ò¥Hµ¥»ù¼Æ­È¬O 5¡C

²¤Æ¹L«á¡A­pºâ N ­Èªº¤½¦¡¬°

¡@¡@N¡×µ¥»ù¼Æ­È¡ÏN2¡Ñ8¡ÏN3¡Ñ7¡ÏN4¡Ñ6¡ÏN5¡Ñ5¡ÏN6¡Ñ4¡ÏN7¡Ñ3¡ÏN8¡Ñ2¡ÏN9¡ÏN10

¨Ò¦p A271828183 ¬O§_¬°¦³®Äªº¨­¤ÀÃÒ¦r¸¹©O¡H­pºâ¹Lµ{¦p¤U¡G

  1. ²Ä¤@¨B¡G¬d¾\¤Wªí¡A±o¨ì A ªºµ¥»ù¼Æ­È¬° 1¡C
  2. ²Ä¤G¨B¡GN¡×1¡Ï2¡Ñ8¡Ï7¡Ñ7¡Ï1¡Ñ6¡Ï8¡Ñ5¡Ï2¡Ñ4¡Ï8¡Ñ3¡Ï1¡Ñ2¡Ï8¡Ï3¡×157¡]¶À¦â¦r¬Oµ¥»ù¼Æ­È¡A¥Õ¦â¦r¬O¨­¤ÀÃÒ¦r¸¹¡^
  3. ²Ä¤T¨B¡G157 ¤£¯à³Q¤Q¾ã°£¡A¬G A271828183 ¬°µL®Äªº¨­¤ÀÃÒ¦r¸¹¡C

MODAL1.ASM ¤¤²£¥Í¨­¤ÀÃÒ¦r¸¹ªºµ{¦¡½X¬O­Ó°Æµ{¦¡¡AºÙ¬° generate¡C¥¦­pºâÅçÃÒ½Xªº¤è¦¡¬O¥ý­pºâ«e¤E½X¤§©M¡A¦A°£¥H¤Q±o¨ä¾l¼Æ¡A©Ò¥HÅçÃÒ½X´N¬O¤Q»P¸Ó¾l¼Æ¤§®t¡CÁÙ¬O¥H¤W­±¬°¨Ò¤l¡A¦ý³Ì«á¤@½X 3 ¨Ã«D¥¿½TªºÅçÃÒ½X¡A§ï¥Î X ªí¥Ü¡A©Ò¥H¨­¤ÀÃÒ¦r¸¹¬O A27182818X¡C«e¤E½X¤§©M¬° 1¡Ï2¡Ñ8¡Ï7¡Ñ7¡Ï1¡Ñ6¡Ï8¡Ñ5¡Ï2¡Ñ4¡Ï8¡Ñ3¡Ï1¡Ñ2¡Ï8¡×154¡A154 °£¥H 10 ±o¾l¼Æ¬O 4¡A©Ò¥HÅçÃÒ½X¬O 10¡Ð4¡×6¡C

generate ªº­ì²z¤w¤¶²Ð§¹²¦¡A©³¤U¨Ó¹ê§@¬Ý¬Ý¡C­º¥ý¡Agenerate ²£¥Íªº¨­¤ÀÃÒ¦r¸¹±NÀx¦s¸ê®Æ°Ï¬q¤¤¡A©w¸qªº id °}¦C¡Cid °}¦C§t¦³ 16 ­Ó¤¸¯À¡A¦ý¥u¦³«e­± 11 ­Ó¤¸¯À¥Î±oµÛ¡A²Ä¹s­Ó¤¸¯À¬O¨­¤ÀÃÒ¦r¸¹ªº­^¤å¦r¥À¡A²Ä¤@­Ó¤¸¯À¥Nªí©Ê§O¡K¡K²Ä¤E­Ó¤¸¯À¬OÅçÃÒ½X¡A²Ä¤Q­Ó¤¸¯À¬O 0 ·í§@µ²§À¡C¦p¤U¡G

.DATA
        ⁝
id      DB      16 DUP (0)      ;²£¥Íªº¨­¤ÀÃÒ¦r¸¹¦s©ó¦¹°}¦C

¨­¥÷ÃÒ¦r¸¹ªº²Ä¤@½X

¨­¤ÀÃÒ¦r¸¹ªº²Ä¤@½X¬O¥Ñ¨Ï¥ÎªÌ¦b½Æ¦X®Ø¤º¿ï©wªº¤áÄy¦a¡A©I¥s SendMessage ¥i¥H¨ú±o½Æ¦X®Ø¤¤³Q¿ï©wªº¶µ¥Ø¡Cµ{¦¡½X¦p¤U¡G

        invoke  SendMessage,hComboBox,CB_GETCURSEL,0,0
        mov     id[0],al
        add     id[0],"A"       ;§â¥Nªí¤áÄy¦aªº­^¤å¦r¥À¦s¤Jid°}¦C
        lea     rbx,aryCode
        xlat
        mov     N,eax           ;N¡×µ¥»ù¼Æ­È

¨ä¦^¶Ç­È¥»¬° EAX¡A¦ý½Æ¦X®Ø¤ºªº¶µ¥Ø¶È 26 ­Ó¡A©Ò¥H¥i¥H¥Î AL ªí¥Ü´N¤w¨¬°÷¡A±N¨ä¦s¤J id °}¦C¤¤¡AµM«á±N¨ä¥[¤W "A"¡A¥HÂà´«¦¨­^¤å¦r¥À¡C±µ¤U¨Ó­n¥Ñ¤áÄy¦a¥Nªíªº­^¤å¦r¥À¨ú±oµ¥»ù¼Æ­È¡Ax86 «ü¥O XLAT «D±`¾A¦X°µ³o¥ó¨Æ¡C

x86 «ü¥O¡GXLAT/XLATB

XLAT »P XLATB ·N¸q¬Û¦P¡A«áªÌ¯S§O±j½Õ¹Bºâ¤¸ªºªø«×¬O¦ì¤¸²Õ¡CXLAT ­^¤å¬° table look-up translation¡A·N«ä¬O¬d¾\ªí®æ½Ķ¡A¦¹³Bªºªí®æ¥iµø¬°¤@­Ó¥Ñ¤¸¯Àªø«×¬°¦ì¤¸²Õ§Î¦¨ªº°}¦C¡]array¡^¡AXLAT ±N¥Ñ¦¹°}¦C¤¤¬d¥X¡]lookup¡^¨ä¤¤¤@­Ó¤¸¯À¤§­È¡C°õ¦æ XLAT ¤§«e¡A¥²¶·¥ý§â°}¦C¦ì§}¦s©ó RBX ¤º¡A²Ä´X­Ó¤¸¯À¦s¤J AL ¤º¡]¥Ñ²Ä¹s­Ó¶}©l¡^¡A¤~¯à¶}©l°õ¦æ¡F°õ¦æ§¹¦¨«á¡A©Ò±o¸Ó¤¸¯À¤§­È¦s©ó AL ¤º¡CXLAT ªº¹Bºâ¤¸¨ä¹ê¬O RBX¡BAL¡A¦ý¥þ¬Ù²¤¤£¼g¡A©Ò¥H»yªk¬O¡G

XLAT

¨Ò¦p©³¤Uªº¨Ò¤l¡A¦pªG AL ¬O 2¡A¨º»ò°õ¦æ§¹©³¤Uªº XLAT «ü¥O¤§«á¡AAL ·|Åܬ° 9¡G

aryCode  DB     1,0,9,8,7,6,5,4,9,3,2,2,1,0,8,9,8,7,6,5,4,3,1,3,2,0     ;¤áÄy¦aµ¥»ù¼Æ­È
        ⁝
        lea     rbx,aryCode
        xlat

¨­¥÷ÃÒ¦r¸¹ªº²Ä¤G¡B¤T½X

±µ¤U¨Ó¬O¥Ñ¨â­Ó³æ¿ï«ö¶s¨ú±o¨Ï¥ÎªÌ¿ï¨kÁÙ¬O¿ï¤k¡A¦]¬°³o¨â­Ó¬O³æ¿ï«ö¶s¡A¥u¯à¤G¾Ü¤@¤£¯à¦P®É¿ï¡A©Ò¥H¥uÀˬd¨k©Ê³æ¿ï«ö¶s¬O§_³Q°é¿ï¡Aµ{¦¡½X¦p¤U¡G

        invoke  SendMessage,hBtnBoy,BM_GETSTATE,0,0
        mov     ecx,1
        cmp     eax,BST_CHECKED ;­YEAX¡×BST_CHECKED¡Aªí¥Ü¨k©Ê¡AECX¡×1
        je      male            ;§_«hªí¥Ü¤k©Ê¡AECX¡×2
        mov     ecx,2
male:   mov     edx,ecx   ;EDX¡×1¡A¨k©Ê¡FEDX¡×2¡A¤k©Ê

³B²z©Ê§O¤è¦¡¸ò¤W­±³B²z¤áÄyÃþ¦ü¡A¦³¨â­Ó¨BÆJ¡G¤@¬O±N¨ä¦s¤J id °}¦C¡A¤G¬O­pºâ N ­È¡A¨Ã¤£§xÃø¡A¤£²Ó»¡¡C

±µ¤U¨Ó¬O¤JÄy«e¨­¤À¡A¤]´N¬O²Ä¤T½X¡C¨Ï¥ÎªÌ¦b²M³æ²°¿ï©w¶µ¥Ø¤§«á¡Agenerate ©I¥s SendMessage ¨ú±o¿ï©w¶µ¥Øªº¯Á¤Þ¡A¦p¤U¡G

        invoke  SendMessage,hListBox,LB_GETCURSEL,0,0
        mov     ecx,7
      .if eax==0
again1: rdrand  eax       ;EAX¡×0¡Aªí¥Ü¡u¥X¥Í¤§¥»Äy°ê¥Á¡v¡A²Ä¤T½X¥i¥H¬O0¡ã5
        and     eax,ecx   ;¥H¶Ã¼Æ¨M©w²Ä¤T½X¡A±Ë±ó²Ä¥|¦ì¤¸¤Î§ó°ª¦ì¤¸ªº¶Ã¼Æ
        cmp     eax,5     ;¦pªG±o¨ìªº¶Ã¼Æ¶W¹L5¡A¦A¸Õ¤@¦¸
        ja      again1
      .else
        add     eax,5     ;EAX¡×1¡Aªí¥Ü¡u¨ä¥L°êÄy©~¥Á¡v¡A²Ä¤T½X¬°6
      .endif              ;EAX¡×2¡Aªí¥Ü¡uµL¤áÄy°ê¥Á¡v¡A²Ä¤T½X¬°7
¤JÄy«e¨­¤ÀEAX²Ä¤T½X
¥X¥Í¤§¥»Äy°ê¥Á00¡ã5
¨ä¥L°êÄy©~¥Á16
µL¤áÄy°ê¥Á27
´ä¿D©~¥Á38
¤j³°¦a°Ï©~¥Á49
¤ñ¸û¯S§Oªº¬O¡A¦pªG¨Ï¥ÎªÌ¿ï¾Ü²Ä¤@­Ó¶µ¥Ø¡u¥X¥Í¤§¥»Äy°ê¥Á¡v¡A¨ä¯Á¤Þ­È¬O 0¡A¦ý¬O¦b¨­¤ÀÃÒ¦r¸¹ªº²Ä¤T½X¬O 0¡ã5 ¤§¶¡¡F¦pªG¨Ï¥ÎªÌ¿ï¾Ü²Ä¤G­Ó¶µ¥Ø¡u¨ä¥L°êÄy©~¥Á¡v¡A¯Á¤Þ­È¬O 1¡A¨­¤ÀÃÒ¦r¸¹ªº²Ä¤T½X¬O 6¡F¦pªG¨Ï¥ÎªÌ¿ï¾Ü²Ä¤T­Ó¶µ¥Ø¡uµL¤áÄy°ê¥Á¡v¡A¯Á¤Þ­È¬O 2¡A¨­¤ÀÃÒ¦r¸¹ªº²Ä¤T½X¬O 7¡K¡K¡C

§â¤W­±±Ô­z¦C¦¨¥kªí¡A§ó¯à¬Ý¥X SendMessage ªº¦^¶Ç­È EAX »P²Ä¤T½XªºÃö«Y¡C°£¤F¿ï¥ÎªÌ¿ï¾Ü¯Á¤Þ­È¬°¹sªº²Ä¤@­Ó¶µ¥Ø¥~¡A¨ä¥L¶µ¥Øªº¦^¶Ç­È EAX ¥[¤W 5 ´N¬O¨­¤ÀÃÒ¦r¸¹ªº²Ä¤T½X¤F¡C¦]¦¹§â SendMessage ªº¦^¶Ç­È¤À¦¨¨âÃþ¡A¤@¬O EAX ¬°¹s¡A¤G¬O¨ä¥L¦^¶Ç­È¡AµM«á¥H .if/.else/.endif §â¯Á¤Þ­È½Õ¾ã¦¨¨­¤ÀÃÒ¦r¸¹²Ä¤T½X¡C

¦pªG¦^¶Ç­È¬°¹s¡A¨­¤ÀÃÒ¦r¸¹²Ä¤T½X¦b 0¡ã5 ¤§¶¡¡AÁ`¤£¯à¨C¦¸³£¥H¯Á¤Þ­È·í¦¨¨­¤ÀÃÒ¦r¸¹²Ä¤T½X¡Agenerate ¥H¶Ã¼Æ¨M©w²Ä¤T½X¡C¦b x86 «ü¥O«ê¦n¦³¤@­Ó¶Ã¼Æ«ü¥O¡ARDRAND¡A¥i°Ñ¦Ò²Ä¤Q¤@³¹¡C

±µ¤U¨Ó¥»¸ÓÄ~Äò­pºâ¨­¤ÀÃÒ¦r¸¹ªº²Ä¥|¡ã¤E½X¡C³o¤»½X¥þ³£¬O¬y¤ô¸¹¡A§¡¥Ñ RDRAND ¥Í¦¨ªº¶Ã¼Æ²£¥Í¡A¦Ó¥B³o¨Ç¶Ã¼Æ³£­n¦b 0¡ã9 ¤§¶¡¡C¤]´N¬O»¡¡A³o¤»½X²£¥Í¹Lµ{¤@¼Ë¡AÀ³¸Ó¨Ï¥Î°j°é¡Cx86 ¤]¦³³o¼Ëªº«ü¥O¡ALOOP¡C

x86 «ü¥O¡GLOOP

LOOP «ü¥O¥i¥HÅý¬Y¬qµ{¦¡½X­«½Æ°õ¦æ¡A¨ä»yªk¬O

¼Ð°O:
        ⁝
        LOOP    ¼Ð°O

¦b LOOP »P¡u¼Ð°O:¡v¤§¶¡ªºµ{¦¡½X·|­«½Æ°õ¦æ¡A­«½Æ¦¸¼Æ¦b CX¡BECX¡BRCX ¼È¦s¾¹¤¤¡A¥¦­ÌºÙ¬°­p¼Æ¼È¦s¾¹¡]count register¡^¡C¨ì©³¥Î­þ­Ó¡A¨Ì¾Ú¦ì§}¤j¤p¨M©w¡G64 ¦ì¤¸¦ì§}¥Î RCX¡B32 ¦ì¤¸¦ì§}¥Î ECX¡B16 ¦ì¤¸¦ì§}¥Î CX¡C§Ú­Ì²{¦b¬O¼¶¼g 64 ¦ì¤¸²Õ¦X»y¨¥µ{¦¡¡A¦ì§}¤j¤p¤]¬O 64 ¦ì¤¸ªø¡A©Ò¥H¨Ï¥Î RCX §@¬°­p¼Æ¼È¦s¾¹¡A¨ä¤º¬°­«½Æ¦¸¼Æ¡C

¨Ï¥Î LOOP «ü¥O«e¡AÀ³¦b¡u¼Ð°O:¡v¤§«e´N±N RCX ³]¬°­«½Æ¦¸¼Æ¡Aµ¥ CPU °õ¦æ¨ì¡u¼Ð°O:¡v®É¶}©l°õ¦æ·|­«½Æ¦h¦¸ªºµ{¦¡½X¡C¤@¸ô°õ¦æ¤U¨Óµ¥¡A°õ¦æ¨ì LOOP «ü¥O®É¡ALOOP ·|¨Ï RCX ´î¤@¡F¦AÀˬd RCX ¬O§_Åܬ°¹s¡A¦pªG¤£¬°¹s¡A´N¸õÅD¦Ü¡u¼Ð°O:¡v°õ¦æ¡A³o¼Ë´N­«½Æ°õ¦æ¤F¡F¦pªG¬°¹s´N°õ¦æ LOOP ªº¤U¤@¹D«ü¥O¡A¸õÂ÷°j°é¡C°j°éªº·N«ä¡A´N¬O¹³³o¼Ë­«½Æ°õ¦æªºµ{¦¡½X¡C

¨Ò¦p©³¤Uªºµ{¦¡½X¡A·|¨Ï RAX ¤§­È¬° 100¡Ï99¡Ï98¡Ï¡K¡K¡Ï1 ¤§©M¡G

        xor     rax,rax ;¨ÏRAXÅܬ°0
        mov     rcx,100 ;­«½Æ¦¸¼Æ¡A¤]«ê¦n¬O­n¥[¤W¥hªº¼Æ­È
next:   add     rax,rcx
        loop    next

·íµM¡A¦b¡u¼Ð°O:¡v»P LOOP ¤§¶¡¡A¥i¥H¦³³\¦h¹D«ü¥O¡C

­pºâ¨­¥÷ÃÒ¦r¸¹ªº²Ä¥|¡ã¤E½X

¨­¥÷ÃÒ¦r¸¹ªº²Ä¥|¡ã¤E½X¡A¦@¤»½X¡A¥þ¬O¬y¤ô¸¹¡A³£¥Ñ RDRAND «ü¥OÀò±o¡A¦ý¬O²£¥Íªº¶Ã¼Æ¥²¶·¦b 0¡ã9 ¤§¶¡¡C©Ò¥H¥ý¥Î AND «ü¥O¯d¤U³Ì§Cªº 0¡ã4 ¦ì¤¸¡A¦pªG¶W¹L 9 ¨º´N¦A¸Õ¤@¦¸¡Aª½¨ì¤p©ó©Îµ¥©ó 9¡A¤~±N¨ä¦s©ó id °}¦C¡AµM«á¥[¤W "0"¡A¨Ï¨äÂà´«¦¨ ASCII ¦r¤¸¡C

°£¦¹¤§¥~¡AÁÙ­n­pºâ N ­È¡CÁÙ°O±o N¡×µ¥»ù¼Æ­È¡ÏN2¡Ñ8¡ÏN3¡Ñ7¡ÏN4¡Ñ6¡ÏN5¡Ñ5¡ÏN6¡Ñ4¡ÏN7¡Ñ3¡ÏN8¡Ñ2¡ÏN9¡ÏN10¡A¨ä¤¤«e¤T¶µ¤w³B²z§¹²¦¡A²{¦b­n§Q¥Î LOOP °j°é¡A­pºâ¤W¦¡¤¤ N4¡Ñ6¡ÏN5¡Ñ5¡ÏN6¡Ñ4¡ÏN7¡Ñ3¡ÏN8¡Ñ2¡ÏN9¡C¦]¬°¦³¤»½X¡A©Ò¥H³o°j°é¤ºªºµ{¦¡½X¥²¶·°õ¦æ¤»¦¸¡ARCX ·í³]¬° 6¡C²Ä¤@¦¸°õ¦æ®É¡A¥Ñ¶Ã¼Æ±o¨ì N4¡ARCX «ê¦n¬° 6¡F²Ä¤G¦¸°õ¦æ®É¡A±o¨ì N5¡ARCX «ê¦n¬° 5¡K¡K¡A¦]¦¹¥i¥H§â¥Ñ RDRAND ±o¨ìªº¶Ã¼Æ½Õ¾ã«áª½±µ­¼¥H RCX §Y¥i¡C¦ý³o¼Æ­È«Ü¤p¡A©Ò¥H­¼¥H CX ©Î ECX ¤]³£¬O¥i¥Hªº¡Cµ{¦¡½X¦p¤U¡G

;¥Ñ¶Ã¼Æ¥Í¦¨²Ä¥|½X¡ã²Ä¤E½X¡A¦@¤»½X
        mov     rcx,6     ;¥Í¦¨6½X¡A¦¹6½X¥Ñ¶Ã¼Æ¥Í¦¨
        mov     r10,OFFSET id+3
again2: rdrand  eax       ;°j°é¶}©l
        and     eax,0fh   ;±Ë±ó°ª©ó²Ä4­Ó¦ì¤¸ªº¸ê®Æ
        cmp     al,9      ;¦pªG¶W¹L9¡A¦A¸Õ¤@¦¸
        ja      again2
        mov     [r10],al  ; X¡× 4 5 6 7 8 9¡AX¥Nªí²Ä´X½X¡A¨ä­È¬°¶Ã¼Æ¡A¨Ã½Õ¾ã¦Ü0¡ã9¦s©óEAX
        mul     ecx       ;ECX¡×6 5 4 3 2 1¡A°j°é­n°õ¦æ¤»¦¸¡A¬Û­¼«áEAX¡×²ÄX½X¡ÑECX
        add     BYTE PTR [r10],"0"
        add     N,eax
        inc     r10
        loop    again2

­pºâ¨­¥÷ÃÒ¦r¸¹ªºÅçÃÒ½X

¨ì¦¹¬°¤î¡A¨­¤ÀÃÒ¦r¸¹ªº«e¤E½X³£¤w³]¦n¤F¡A¤]¤w­pºâ¦n N ªº«e¤E¶µ¡A´N®t N10¡A¤]´N¬O¥u³Ñ¤UÅçÃÒ½XÁÙ¥¼ºâ¥X¡C®Ú¾Ú¨­¥÷ÃÒ¦r¸¹ÅçÃÒªº­ì²zª¾¹D¡AN ªº«e¤E¶µ¦A¥[¤WÅçÃÒ½X¥²¶·³Q¤Q¾ã°£¡A¤~¬O¦³®Äªº¨­¤ÀÃÒ¦r¸¹¡C

¤Ï¹L¨Ó«ä¦Ò¡AN ªº«e¤E¶µ³Q¤Q¾ã°£¤§«áªº¾l¼Æ¦pªG¬O¹s¡A¨º»òÅçÃÒ½X´N¬O 0¡F¦pªG¾l¼Æ¤£¬O¹s¡A¨º»ò¾l¼Æ¦A¥[¤W¤@¼Æ©Ò±o¤§©M¦pªG¬O 10¡A¨º»ò·í«eªº N ¥[¤W¸Ó¼Æ¤]¯à³Q¤Q¾ã°£¡A¤]´N¬O»¡ÅçÃÒ½X´N¬O¸Ó¼Æ¡C

´«¥y¸Ü»¡¡AÅçÃÒ½Xªººâªk¬O¥ý¨D¥X·í«eªº N ­È°£¥H¤Q©Ò±o¾l¼Æ¡A¦A¥H¤Q´î¥h¾l¼Æ¡A©Ò±o¤§®t§Y¬°ÅçÃÒ½X¡C¦ý¦pªG N ­È¯à³Q¤Q¾ã°£¡A¨º»ò¾l¼Æ¬°¹s¡A¤Q´î¹sÁÙ¬O¤Q¡A¦ýÅçÃÒ½X¶·¥H¹sªí¥Ü¤£¯à¥H¤Qªí¥Ü¡C³Ì«áµ{¦¡½X¦p¤U¡G

;­pºâÅçÃÒ½X
        mov     eax,N     ;¦¹®ÉN¡×µ¥»ù¼Æ­È+²Ä¤G½X¡Ñ8+²Ä¤T½X¡Ñ7+²Ä¥|½X*6+²Ä¤­½X¡Ñ5+¡K¡K+²Ä¤E½X
        xor     edx,edx
        mov     r11d,10
        div     r11d
        or      edx,edx   ;­Y¨S¦³¾ã°£¡A10´î¥h¾l¼Æ¬°ÅçÃÒ½X
        jnz     nt_div    ;¦pªG¾ã°£¡AÅçÃÒ½X¬°0
        mov     dl,10
nt_div: sub     r11b,dl   ;R11B¡×10¡Ð¾l¼Æ¡×ÅçÃÒ½X
        add     r11b,"0"  ;R11B¡×§âÅçÃÒ½XÂà´«¦¨ASCII¦r¤¸
        mov     [r10],r11w

¨ì¦¹¤w±N¨­¥÷ÃÒ¦r¸¹³£­pºâ¥X¨Ó¤F¡A¤]±N¨­¤ÀÃÒ¦r¸¹¥H ASCII ¦r¦ê¦s©ó id °}¦C¤¤¡C¤W­±µ{¦¡½Xªº³Ì«á¤@¦æ¡A§â R11W ¦s¤J R10 ©Ò«üªº°O¾ÐÅé¦ì§}¤º¡A¦¹®É R11W ªº°ª¦ì¤¸²Õ¡A¤]´N¬O²Ä 8¡ã15 ¦ì¤¸¬°¹s¡A©Ò¥H id °}¦C¨ä¹ê¬O¥H¹sµ²§Àªº¦r¦ê¡A°h¥X generate °Æµ{¦¡¤§«á´N¥i¥H§â id ¦r¦ê¦L¥X¨Ó¡CMODAL1 ©I¥s SetWindowText API ¨Ó§¹¦¨³o¥ó¨Æ¡C

SetWindowText API

SetWindowText ¬O¥Î¨Ó³]©wµøµ¡ªº¦r¦ê¡A¹ï¤@¯ëµøµ¡¦Ó¨¥¬O³]©w¼ÐÃDÄæ¤Wªº¦r¦ê¡A¤]´N¬Oµøµ¡¦WºÙ¡F

invoke  SetWindowText,\
        hWnd,\          ; handle of window or control
        lpString        ; address of string

hWnd ¬O­n³]©w¤å¦rªºµøµ¡¤§µøµ¡¥N½X¡AlpString ¬O¦r¦ê¦ì§}¡A¦¹¦ì§}¤Wªº¦r¦ê¥²¶·¬O¥H¹sµ²§À¡Aµøµ¡¼ÐÃDÄæ¤W·|Åã¥Ü¦¹¦r¦ê¡C±±¨î¶µ¬O¤lµøµ¡¡A¤]ºâ¬Oµøµ¡ªº¤@ºØ¡A¤]¥i¥H¥Î SetWindowText ³]©w¨ä¤å¦r¡C¹ï½s¿è²µ¦Ó¨¥¡A¬O³]©w½s¿è®Ø¤ºªº¦r¦ê¡A¦¹¦r¦ê·|¥X²{¦b­ì¥»À³·í¬O¨Ï¥ÎªÌ¿é¤Jªº¦a¤è¡F¹ï«ö¶s¦Ó¨¥¡A¦¹¦r¦ê·|Åã¥Ü¦b«ö¶s¤W¡K¡K¨ä¥L¤£¤@¤@¦CÁ|¡C¦pªG SetWindowText ¦¨¥\°õ¦æ¡A¦^¶Ç­È¬°¤@¡A§_«h¦^¶Ç­È¬°¹s¡C


µù¤@

GetDialogBaseUnits API

GetDialogBaseUnits ¥Î©óÀò¨ú¹ï¸Ü²°¨t²Î¦r§Î¤¤¥­§¡¼e«×©M°ª«×¡CGetDialogBaseUnits ¨S¦³°Ñ¼Æ¡A©Ò¥H¥Îªk¬°¡G

invoke  GetDialogBaseUnits

¨ä¦^¶Ç­È EAX ¤¤ªº 0¡ã15 ¦ì¤¸¬°¹ï¸Ü²°¨t²Î¦r§Îªº¥­§¡¼e«×¡A¤]ºÙ¬°¡u¤ô¥­°ò·Ç³æ¦ì¡v¡]horizontal base unit¡^¡A16¡ã31 ¦ì¤¸¬°¹ï¸Ü²°¨t²Î¦r§Îªº¥­§¡°ª«×¡A¤]ºÙ¬°¡u¹]Áè°ò·Ç³æ¦ì¡v¡]vertical base unit¡^¡C¤£½×¬O¤ô¥­°ò·Ç³æ¦ì©Î¹]Áè°ò·Ç³æ¦ì¡A³æ¦ì³£¬O¹³¯À¡C

MulDiv API

MulDiv ±N«e¨â­Ó 32 ¦ì¤¸ªº°Ñ¼Æ¬Û­¼¡A©Ò±oªº 64 ¦ì¤¸­¼¿n¦A°£¥H²Ä¤T­Ó 32 ¦ì¤¸ªº°Ñ¼Æ¡A³Ì«áµ²ªG±Ë±ó©Î¶i¦ì¦¨³Ì±µªñªº¾ã¼Æ¡CMulDiv ªº­ì«¬¬O¡G

invoke  MulDiv,\
        nNumber,\       ; 32-bit signed multiplicand
        nNumerator,\    ; 32-bit signed multiplier
        nDenominator    ; 32-bit signed divisor

¦pªG MulDiv °õ¦æ¦¨¥\¡A¦^¶Ç­È¬°­pºâµ²ªG¡F¦pªG°õ¦æ¥¢±Ñ¡A¨Ò¦pµo¥Í·¸¦ì©Î°£¼Æ¬° 0¡A¦^¶Ç­È¬°¡Ð1¡C

MapDialogRect API

MapDialogRect ·|±N¤@­Ó¥H DLU ªí¥Üªº¯x§Î¥ª¤W¨¤»P¥k¤U¨¤®y¼Ð¡AÂà´«¦¨¥H¹³¯Àªí¥Üªº®y¼Ð¡C

invoke  MapDialogRect,\
        hDlg,\          ; handle of dialog box
        lpRect          ; address of structure with rectangle

hDlg ¬O¹ï¸Ü²°¥N½X¡AlpRect ¬O RECT µ²ºcÅ骺¦ì§}¡A¦¹µ²ºcÅ馳¥H DLU ªí¥Üªº¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ð¡C¦pªG MapDialogRect °õ¦æ¦¨¥\¡A¦^¶Ç­È¬°¤@¡A¦P®É lpRect ©Ò«ü¦ì§}ªº RECT µ²ºcÅ餺ªº®y¼Ð·|Åܦ¨¥H¹³¯Àªí¥Ü¡C¦pªG MapDialogRect °õ¦æ¥¢±Ñ¡A¦^¶Ç­È¬°¹s¡C


«á°O

¥»¨Ó­pµe§ïª©·sª©²Õ¦X»y¨¥®É¡A­nºë²¡B­n§ã­n¡A¥u¼g¤jºõ¡C¦ý¹ê»Ú¥h°µ¤§«á¡A¤×¨ä¬O³o¤Q´X³¹¤U¨Ó¡Aµo²{¨Æ»PÄ@¹H¡A«ÜÃø°µ¨ì¡C´X¥G¨C¤@³¹³£¦b¨â¡B¤T¸U¦r¤§¶¡¡A¹ïªì¾ÇªÌ¦Ó¨¥¡A­t¾á¤£¥i¿×¤£­«¡C¦ý¬O­n»¡ªº²Ó¸`¤Ó¦h¡A¦ü¥G¤]¬O¨S¿ìªkªº¨Æ¡C¥u¯à»¡Án©êºp¤F¡A¦p¦³°ÝÃD¡A½Ð¨Ó«H°Q½×¡C