³o¤@³¹Ä~Äò«e¤@³¹¡A¤¶²Ð¼Ð·Ç±±¨î¶µªº¥t¥~¨âºØ¡G²M³æ²°±±¨î¶µ»P¤U©Ô¦¡¤è¶ô±±¨î¶µ¡C°£¦¹¤§¥~¡AÁÙ¤¶²Ð¹ï¸Ü²°±ªO¡A¥¦¥i¥H²¤Æ«Ø¥ß±±¨î¶µªº¹Lµ{¡C
³o¤@³¹¤£¦A¥Î CreateWindowEx ªº¤è¦¡«Ø¥ß±±¨î¶µ¡A¦Ó§ï¥Î¹ï¸Ü²°±ªO¡]dialog template¡^«Ø¥ß¥H¹ï¸Ü²°¬°¥Dn¬É±ªºÀ³¥Îµ{¦¡¡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Åý¨Ï¥ÎªÌ¿é¤Jn§ä¤°»ò¤å¦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
¦b Windows §@·~¨t²Î¤¤¡A¨Ì¾Ú¦^À³ªº¤è¦¡¥i¤À¬°¨âºØ¹ï¸Ü²°¡G
¤£½×þ¤@ºØ¹ï¸Ü²°»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
·Qn«Ø¥ß±j¨î¦^À³¹ï¸Ü²°¡An©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 ¨Ï¨t²ÎºR·´±j¨î¦^À³¹ï¸Ü²°¡A¨Ãµ²§ô¸Ó¹ï¸Ü²°ªº©Ò¦³¤u§@¡CEndDialog ªºì«¬¬O¡G
invoke EndDialog hDlg,\ ; handle to dialog box nResult ; value to return
hDlg ¬On³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
¹ï¸Ü²°¨ç¦¡¸òµøµ¡¨ç¦¡¤@¼Ë¡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
¦b DialogBoxParam ªº²Ä¤GӰѼơA¬O¹ï¸Ü²°±ªOªº¦WºÙ¡A¨º»ò¡A³o¤S¬O¤°»ò©O¡H
¹ï¸Ü²°±ªO¬O¸ê·½´yzÀɤºªº¤@¶ô°Ï°ì¡A¥¦´yz¤F¹ï¸Ü²°ªº¥~Æ[»P¨ä¤ºªº±±¨î¶µ¡C¨Æ¹ê¤W¡A±±¨î¶µªº½Ï¥Í³Ì¥Dnªº¥Øªº´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
②¡Boptional-statements ¬O´yz¹ï¸Ü²°ªºÄÝ©Ê¡A¨C¤@¶µÄݩʳ£¥Ñ«e±ªº±Ôz»P¨ä«áªºÄݩʪí¥Ü¡A¨C¤@¶µ±Ôz³£¬O¥i¥H¬Ù²¤ªº¡C©³¤U¬O³o¨Ç¥i¿ï±Ôzªº»¡©ú¡G
·®æ | ¼ÆÈ | »¡©ú |
DS_FIXEDSYS | 8 | ¨Ï¥Îµ¥¼e«×ªº SYSTEM_FIXED_FONT ¦r§Î¨ú¥N¹w³]ªº SYSTEM_FONT |
DS_SETFONT | 40H | Åý¹ï¸Ü²°¨Ï¥Î FONT ±Ôz©w¸qªº¦r§Î |
DS_SHELLFONT | 48H | ¹ï¸Ü²°¨Ï¥Î¨t²Î¦r«¬¡A¦Ó¥B FONT ±Ôz¤¤ªº "typeface" ¥²¶·³]©w¬° "MS Shell Dlg"¡A§_«h¤£·|¦³§@¥Î¡CDS_SHELLFONT ¨ä¹ê´N¬O DS_FIXEDSYS | DS_SETFONT¡C |
DS_MODALFRAME | 80H | «Ø¥ß¨ã¦³±j¨î¦^À³¹ï¸Ü²°ªº¥~®Ø |
DS_CENTER | 800H | §â¹ï¸Ü²°¸m©ó¾Ö¦³ªÌµøµ¡ªº¤u§@°Ï¤¤¤ß¡A¦pªG¥¼«ü©w©Ò¦³ªÌµøµ¡¡A´N¸m©ó¤u§@°Ï°ìªº¤¤¤ß¡]¤u§@°Ï°ì¬O«ü¥¼³Q¤u§@¦C©Î¥ô¦óÀ³¥Îµ{¦¡¦C¾B¾×ªº°Ï°ì¡^ |
DS_CENTERMOUSE | 1000H | ¹ï¸Ü²°Åã¥Ü©ó·Æ¹«´å¼Ð¦ì¸m |
WS_THICKFRAME | 40000H | ¥i¥HÅý¨Ï¥ÎªÌ±N·Æ¹«²¾¦Ü¹ï¸Ü²°¥~®Ø¡A«ö¦í·Æ¹«¥ªÁ䤣©ñ¡AµM«á©ì¦²¦Ó§ïÅܹï¸Ü²°¤Ø¤o |
WS_SYSMENU | 80000H | ¦b¹ï¸Ü²°¼ÐÃDÄ楪Ãä²K¥[¨t²Î¥\¯àªí¡A¥kÃä²K¥[Ãö³¬«ö¶s |
③¡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
CONTROL "text", id, "class name", style, x, y, width, height
control-type "text", id, x, y, width, height [, style]
µøµ¡Ãþ§O class name | ±±¨î¶µÃþ«¬ control-type | ¦WºÙ | ¤º©w·®æ |
STATIC | LTEXT | ¦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 | |
BUTTON | PUSHBUTTON | ¤UÀ£¦¡«ö¶s | BS_PUSHBUTTON | WS_TABSTOP |
DEFPUSHBUTTON | ¹w³]¤UÀ£¦¡«ö¶s | BS_DEFPUSHBUTTON | WS_TABSTOP | |
CHECKBOX | ½Æ¿ï®Ø | BS_CHECKBOX | WS_TABSTOP | |
AUTOCHECKBOX | ¦Û°Ê½Æ¿ï®Ø | BS_AUTOCHECKBOX | WS_TABSTOP | |
RADIOBUTTON | ³æ¿ï«ö¶s | BS_RADIOBUTTON | |
AUTORADIOBUTTON | ¦Û°Ê³æ¿ï«ö¶s | BS_AUTORADIOBUTTON | |
GROUPBOX | ¸s²Õ®Ø | BS_GROUPBOX | |
EDIT | EDITTEXT | ½s¿è®Ø | ES_LEFT | WS_BORDER | WS_TABSTOP |
LISTBOX | LISTBOX | ²M³æ²°±±¨î¶µ | LBS_NOTIFY | WS_BORDER | WS_VSCROLL |
SCROLLBAR | SCROLLBAR | ±²°Ê¶b±±¨î¶µ | SBS_HORZ |
COMBOBOX | COMBOBOX | ¤U©Ô¦¡¤è¶ô±±¨î¶µ | CBS_SIMPLE |
LTEXT "¤áÄy¦a¡G",1, 6, 7,35, 12
©³¤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·Qn»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ªGn¹³¤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
¦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
·í¹ï¸Ü²°¥X²{¦b¿Ã¹õ¤§«á¡A°£«D¨Ì«ez¤è¦¡«ü©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
¦b¹ï¸Ü²°±ªO¤¤¡A´yz±±¨î¶µªº¦ì¸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¤jP¥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§Îªº¹ï¸Ü²°¡An¦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
¥Ñ¹ï¸Ü²°±ª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¡CY GetDlgItem °õ¦æ¦¨¥\¡A¦^¶ÇȬ°±±¨î¶µ¥N½X¡FY°õ¦æ¥¢±Ñ¡A¦^¶ÇȬ°¹s¡C¨Æ¹ê¤W¡AGetDlgItem ªº°Ñ¼Æ hDlg ¤£¤@©w¬O¹ï¸Ü²°¥N½X¡AnIDDlgItem ¤£¤@©w¬O±±¨î¶µÃѧO½X¡A¥un¬O¤÷µøµ¡»P¤lµøµ¡ªºÃö«Y³£¥i¥H¨Ï¥Î GetDlgItem ¨Ó¨ú±o¤lµøµ¡¥N½X¡C
²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
¦b¹ï¸Ü²°±ªO¨Ï¥Î LISTBOX «Ø¥ß²M³æ²°±±¨î¶µ¡A¦pªG¨S¦³³]¸m¯S§O·®æ¡A´N¬O«Ø¥ß³æ¿ï²M³æ²°±±¨î¶µ¡C¦pªGn«Ø¥ß½Æ¿ï²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
©³¤U¦C¥X²M³æ²°ªº·®æ¡G
²M³æ²°±±¨î¶µªº·®æ | ¼ÆÈ | »¡©ú |
LBS_NOTIFY | 1H | ²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_SORT | 2H | ¨Ì¸U°ê½X¶¶§Ç±Æ§Ç²M³æ²°¤¤ªº¦r¦ê¡C |
LBS_NOREDRAW | 4H | ²M³æ²°¥~Æ[§ïÅܮɤ£·|«·sø»s¡C¥i¥H¦b³B²z WM_SETREDRAW ®É«·sø»s¡C |
LBS_MULTIPLESEL | 8H | ¥H·Æ¹«¥ªÁäÂIÀ»¶µ¥Ø´N¯à¨Ï¸Ó¶µ¥Ø³Q¿ï¤¤¡A¦pªGÁÙn¿ï¨ä¥L¶µ¥Ø¡A¥i¥H¦A¥H·Æ¹«¥ªÁäÂIÀ»n¿ïªº¶µ¥Ø¡Aª½¨ì©Ò¦³¸Ó¿ïªº¶µ¥Ø³£¿ï¤¤¬°¤î¡F¦pªGn¨ú®ø¬YÓ¤w¿ï¤¤ªº¶µ¥Ø¡A´N¦b¸Ó¶µ¥Ø¦AÂI¿ï¤@¦¸´N¥i¨ú®ø¸Ó¶µ¥Ø¡C |
LBS_OWNERDRAWFIXED | 10H | ¾Ö¦³ªÌ²M³æ²°¤ºªº¶µ¥Ø°ª«×§¡¬Û¦P®É¡A¥i³]¸m¦¹·®æ¡C |
LBS_OWNERDRAWVARIABLE | 20H | ¾Ö¦³ªÌ²M³æ²°¤ºªº¶µ¥Ø°ª«×¤£¦P®É¡A¥i³]¸m¦¹·®æ¡C |
LBS_HASSTRINGS | 40H | «ü©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_USETABSTOPS | 80H | ¨Ï²M³æ²°¯à¿ëÃÑ TAB ¦r¤¸¨Ãø»s¡A¹w³] TAB ¦r¤¸¬Û¹j 32 Ó¹ï¸Ü²°³æ¦ì¡A¦ý¥i¥H¥Î LB_SETTABSTOPS °T®§§ïÅÜ¡C |
LBS_NOINTEGRALHEIGHT | 100H | ¦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_MULTICOLUMN | 200H | «ü©w¦h¦æ¥B¨ã¤ô¥±²°Êªº²M³æ²°¡C¨C¦æ¼e«×¥Î LB_SETCOLUMNWIDTH ¨Ó³]©w¡FY¬O LBS_OWNERDRAWFIXED ªº²M³æ²°«h¦b³B²z WM_MEASUREITEM °T®§®É³]©w¡FY³£¨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_WANTKEYBOARDINPUT | 400H | ²M³æ²°¨ã¦³¿é¤JµJÂI¥B¨Ï¥ÎªÌ«ö¤UÁä½L¤Wªº«öÁä®É¡A¤÷µøµ¡·|¦¬¨ì WM_VKEYTOITEM °T®§¡AÀ³¥Îµ{¦¡¥i¥H¶i¦æ¬Y¨Ç¾Þ§@¡C |
LBS_EXTENDEDSEL | 800H | ¿ï¾Ü³sÄòªº¦hÓ¶µ¥Ø¡C¥ý¥H·Æ¹«¥ªÁäÂIÀ»n¿ïªº³sÄò¶µ¥Ø²Ä¤@Ó¶µ¥Ø¡A«ö¦íÁä½L¤Wªº Shift Á䤣©ñ¡A¦A§â·Æ¹«´å¼Ð²¾¨ìn¿ï¤¤ªº³Ì«á¤@Ó¶µ¥ØÂIÀ»¥¦¡A´N¯à§â²Ä¤@Ó¨ì³Ì«á¤@Ó¤¤¶¡©Ò¦³¶µ¥Ø³£¿ï¤¤¡C |
LBS_DISABLENOSCROLL | 1000H | ¨ã¦³ 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_NODATA | 2000H | ¦¹·®æ¥²¶·»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_NOSEL | 4000H | ²M³æ²°¤ºªº¶µ¥Ø¥u¯à¬d¦ý¤£¯à¿ï¨ú¡C |
LBS_STANDARD | A00003H | ¬Û·í©ó LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER¡C |
»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®§ | »¡©ú | wParam | lParam | ¦^¶ÇÈ |
LB_ADDSTRING | ¦b²M³æ²°¤¤²K¥[¤@Ó¦r¦ê¶µ¥Ø¡CY²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ªº¶µ¥ØÁ`¼Æ¡CY²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¶µ¥Ø¤§¯Á¤ÞÈ¡AY¨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¿ï¤¤ªº¶µ¥Ø¼Æ¡FY¬°³æ¿ï²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¡FY¬° 0¡Aªí¥Ü¨ú®ø¿ï©w | §C¦r²Õ¬°°_©l¶µ¥Ø¯Á¤Þ¡A°ª¦r²Õ¬°µ²§ô¶µ¥Ø¯Á¤Þ | Y¥¢±Ñ¦^¶ÇȬ° LB_ERR |
ÁÙ¬O¥H¼x±B¹ï¸Ü²°¬°¨Ò¡C¥k¹Ï¤¤¡AYn¦bè«Ø¥ß¦nªº©Ê§O²M³æ²°¤¤¡An²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¸ò«ö¶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_SELCHANGE | 1H | ·í¨Ï¥ÎªÌÂI¿ï¨ã³Æ LBS_NOTIFY ·®æªº²M³æ²°¤¤¶µ¥Ø¡A¦Ó§ïÅÜ¿ï©w¶µ¥Ø®É¡A±N¦¹³qª¾½Xµo°eµ¹¤÷µøµ¡¡CY¬O¦]¬° LB_SETSEL¡BLB_SETCURSEL¡BLB_SELECTSTRING¡BLB_SELITEMRANGE ©Î LB_SELITEMRANGEEX °T®§Åܧó¿ï¨ú½d³ò¡A«h¤£·|¶Ç°e¦¹³qª¾½X¡C |
LBN_DBLCLK | 2H | ·í¨Ï¥ÎªÌÂI¿ï²M³æ²°¤¤ªº¶µ¥Ø¨â¦¸¡C |
LBN_SELCANCEL | 3H | ³qª¾À³¥Îµ{¦¡¨Ï¥ÎªÌ¤w¨ú®ø²M³æ²°¤¤ªº¿ï¨ú½d³ò¡C |
LBN_SETFOCUS | 4H | ³qª¾À³¥Îµ{¦¡²M³æ²°¤w¦¬¨ìÁä½L¿é¤JµJÂI¡C |
LBN_KILLFOCUS | 5H | ³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©Ô¦¡¤è¶ô±±¨î¶µ¤]½Ķ¦¨¤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
¥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
¸ò¨ä¥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
°£¤F CBS_SIMPLE¡BCBS_DROPDOWN¡BCBS_DROPDOWNLIST «ü©w¤£¦PÃþ«¬ªº½Æ¦X®Ø¤§¥~¡A½Æ¦X®Ø¤]¥i¥H¨Ï¥Î¤U±ªº·®æ¡A¥H¹F¨ì¯S®í¥Øªº¡C
²M³æ²°±±¨î¶µªº·®æ | ¼ÆÈ | »¡©ú |
CBS_SIMPLE | 1H | ²³æ«¬½Æ¦X®Ø |
CBS_DROPDOWN | 2H | ¤U©Ô«¬½Æ¦X®Ø |
CBS_DROPDOWNLIST | 3H | ¤U©Ô²M³æ«¬½Æ¦X®Ø |
CBS_OWNERDRAWFIXED | 10H | ¾Ö¦³ªÌø»s½Æ¦X®Ø¤ºªº¶µ¥Ø°ª«×§¡¬Û¦P®É¡A¥i³]¸m¦¹·®æ¡C |
CBS_OWNERDRAWVARIABLE | 20H | ¾Ö¦³ªÌø»s½Æ¦X®Ø¤ºªº¶µ¥Ø°ª«×¤£¦P®É¡A¥i³]¸m¦¹·®æ¡C |
CBS_AUTOHSCROLL | 40H | ·í¨Ï¥ÎªÌ¦b½s¿è®Ø¿é¤J¤Ó¦h¦r¤¸®É¡A¦Û°Ê¦V¥k±²°Ê¡C¦pªG¨S¦³¦¹·®æ¡A´N¤£¤¹³\µLªk¿é¤J¶W¥X½s¿è®Øªº¦r¤¸¡C |
CBS_OEMCONVERT | 80H | ±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_SORT | 100H | ¨Ì¸U°ê½X¶¶§Ç±Æ§Ç²M³æ²°¤¤ªº¦r¦ê¡C |
CBS_HASSTRINGS | 200H | ¨Ï¾Ö¦³ªÌø»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_NOINTEGRALHEIGHT | 400H | ¦b«Ø¥ß½Æ¦X®Ø®É¡AWindows ·|½Õ¾ã¤Ø¤o¡A¨Ï½Æ¦X®Ø³Ì¤U±ªº¶µ¥Ø¯à§¹¥þÅã¥Ü¥X¨Ó¡F¦ý¨ã¦³ CBS_NOINTEGRALHEIGHT ·®æ¤§½Æ¦X®Øªº¤Ø¤o»P«Ø¥ß®ÉÀ³¥Îµ{¦¡©Ò«ü©wªº¤Ø¤o§¹¥þ¤@¼Ë¡AWindows ¤£¶i¦æ½Õ¾ã¡C |
CBS_DISABLENOSCROLL | 800H | ½Æ¦X®Øªº²M³æ²°¤º¡A¦pªG¶µ¥Ø¤Ó¤Ö¤£¦Ü©ó¨Ï²M³æ²°®e¯Ç¤£¤U¡A¨º´N¤£·|¥X²{±²¶b¡C¦ý¦pªG¨ã¦³ LBS_DISABLENOSCROLL ·®æªº¸Ü¡A´N·|Åã²{¸T¥Îª¬ºAªº±²¶b¡C |
CBS_UPPERCASE | 2000H | ±N¤w¿ï°Ï¤Î²M³æ²°¤ºªº¦r¤¸³£Åܬ°¤j¼g¡C |
CBS_LOWERCASE | 4000H | ±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
¤Uªí¶È¦C¥X±`¥Îªº°T®§¡A¨ä¥L§ó¦h¸ê®Æ½Ð¬d¾\ MSDN¡C
°T®§ | »¡©ú | wParam | lParam | ¦^¶ÇÈ |
CB_ADDSTRING | ¦b½Æ¦X®Ø²M³æ²°¤¤·s¼W¦r¦ê¶µ¥Ø¡CY¤£¨ã CBS_SORT ·®æ¡A·s¼Wªº¶µ¥Ø¦ì©ó§ÀºÝ¡A§_«h¨Ì¸U°ê½X±Æ¦C | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | n¥[¤Jªº¦r¦ê¦ì§}¡A¦¹¦r¦ê¶·¥H¹sµ²§À | Y¦¨¥\¡A¦^¶ÇȬ°·s¼W¶µ¥Øªº¯Á¤Þ¡FY¥¢±Ñ¡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¦^¶ÇȬ°¶µ¥ØÁ`¼Æ¡FY¥¢±Ñ¡A¦^¶ÇȬ° CB_ERR |
CB_GETCURSEL | ¨ú±o¥Ø«e³Q¿ï¤¤¶µ¥Øªº¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | Y¦¨¥\¡A¦^¶ÇȬ°³Q¿ï¤¤¶µ¥Øªº¯Á¤Þ¡FY¥¢±Ñ¡A¦^¶ÇȬ° CB_ERR |
CB_GETLBTEXT | ±q²M³æ²°¤¤¨ú±o¬Y¶µ¥Øªº¦r¦ê | n¨ú±o¦r¦êªº¶µ¥Ø¯Á¤Þ | ¦s©ñ¦r¦ê¦ì§} | Y¦¨¥\¡A¦^¶ÇȬ°¨ú±oªº¦r¦êªø«×¡FY¥¢±Ñ¡A¦^¶ÇȬ° CB_ERR |
CB_SETCURSEL | ±q½Æ¦X®Øªº²M³æ²°¤¤¿ï©w¬YÓ¶µ¥Ø | n¿ï©wªº¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | Y¦¨¥\¡A¦^¶ÇȬ°¿ï©wªº¶µ¥Ø¯Á¤Þ¡FY wParam ¬°¡Ð1 ©Î¶W¹L¶µ¥ØÁ`¼Æ¡A¦^¶ÇȬ° CB_ERR¡A¥B쥻¿ï©wªº¶µ¥ØÅÜ¥¼¿ï©w |
½Æ¦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_SELCHANGE | 1 | Ãö³¬½Æ¦X®Øªº²M³æ²°®Éµo°e¦¹³qª¾½X¡C |
CBN_DBLCLK | 2 | ¨Ï¥ÎªÌÂùÀ»Â²³æ«¬½Æ¦X®Øªº²M³æ²°¤º¡A¬YÓ¶µ¥Ø®Éµo°e¦¹³qª¾½X¡CYÂùÀ»¥t¥~¨âºØ½Æ¦X®Ø¤ºªº¶µ¥Ø®É¡A·|Ãö³¬²M³æ²°¡C |
CBN_SETFOCUS | 3 | ½Æ¦X®ØÀò±oÁä½L¿é¤JµJÂI®É°e¦¹³qª¾½X¡C |
CBN_KILLFOCUS | 4 | ½Æ¦X®Ø¥¢¥hÁä½L¿é¤JµJÂI®É°e¦¹³qª¾½X¡C |
CBN_EDITCHANGE | 5 | ½Æ¦X®Øªº½s¿è®Ø¤º¡AY¤å¦r§ïÅÜ¥Bµe±¤w§ó·s§¹¦¨®É¡Aµo°e¦¹³qª¾½X¡C¤U©Ô²M³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C |
CBN_EDITUPDATE | 6 | ½Æ¦X®Øªº½s¿è®Ø¤º¡AY¤å¦r§ïÅÜ¥Bµe±§ó·s«e¡Aµo°e¦¹³qª¾½X¡C¤U©Ô²M³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C |
CBN_DROPDOWN | 7 | §Y±NÅã¥Ü½Æ¦X®Øªº²M³æ²°®Éµo°e¦¹³qª¾½X¡C²³æ«¬ªº½Æ¦X®Ø¤£µo°e¦¹³qª¾½X¡C |
CBN_CLOSEUP | 8 | Ãö³¬½Æ¦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¨Ò¡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µ{¦¡¤Î¸ê·½´yzÀɤÀ§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
MODEL1.ASM ·f°t¸ê·½´yzÀɦӧΦ¨¤W¹Ïªº¹ï¸Ü²°¡A©³¤U¬O¸ê·½´yzÀÉ¡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±¸ê·½´yzÀɪº²Ä 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¦Ó¥Bn¨Ï°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¸¹³s¦P^¤å¦r¥À¦@¤Q½X¡A½Ð°Ñ¾\ºû°ò¦Ê¬ì¡A©³¤U²§ã±Ôz¡G
ÅçÃÒ½Xªº¼ÆȬO¦h¤Ö¡A»P²Ä¤@¡ã¤E½X¦³Ãö¡Apºâ¹Lµ{¦p¤U¡G
¦r¥À | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
Âà´«¼ÆÈ | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 34 | 18 | 19 | 20 | 21 | 22 | 35 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 30 | 31 | 33 |
µ¥»ù¼ÆÈ | 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 |
N¡×A1¡ÏA2¡Ñ9¡ÏN2¡Ñ8¡ÏN3¡Ñ7¡ÏN4¡Ñ6¡ÏN5¡Ñ5¡ÏN6¡Ñ4¡ÏN7¡Ñ3¡ÏN8¡Ñ2¡ÏN9¡ÏN10
²Ä¤@½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»Ppºâ¹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«á¡Apºâ N Ȫº¤½¦¡¬°
¡@¡@N¡×µ¥»ù¼ÆÈ¡ÏN2¡Ñ8¡ÏN3¡Ñ7¡ÏN4¡Ñ6¡ÏN5¡Ñ5¡ÏN6¡Ñ4¡ÏN7¡Ñ3¡ÏN8¡Ñ2¡ÏN9¡ÏN10
¨Ò¦p A271828183 ¬O§_¬°¦³®Äªº¨¤ÀÃÒ¦r¸¹©O¡Hpºâ¹Lµ{¦p¤U¡G
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¬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
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
±µ¤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¬Opºâ 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°ê¥Á | 0 | 0¡ã5 |
¨ä¥L°êÄy©~¥Á | 1 | 6 |
µL¤áÄy°ê¥Á | 2 | 7 |
´ä¿D©~¥Á | 3 | 8 |
¤j³°¦a°Ï©~¥Á | 4 | 9 |
§â¤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
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¬On¥[¤W¥hªº¼ÆÈ next: add rax,rcx loop next
·íµM¡A¦b¡u¼Ð°O:¡v»P LOOP ¤§¶¡¡A¥i¥H¦³³\¦h¹D«ü¥O¡C
¨¥÷ÃÒ¦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ÁÙnpºâ 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²{¦bn§Q¥Î LOOP °j°é¡Apºâ¤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
¨ì¦¹¬°¤î¡A¨¤ÀÃÒ¦r¸¹ªº«e¤E½X³£¤w³]¦n¤F¡A¤]¤wpºâ¦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 ¬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 ¬On³]©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 ¥Î©óÀò¨ú¹ï¸Ü²°¨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 ±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 ·|±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
¥»¨Ópµe§ïª©·sª©²Õ¦X»y¨¥®É¡Anºë²¡Bn§ã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¹ïªì¾ÇªÌ¦Ó¨¥¡At¾á¤£¥i¿×¤£«¡C¦ý¬On»¡ªº²Ó¸`¤Ó¦h¡A¦ü¥G¤]¬O¨S¿ìªkªº¨Æ¡C¥u¯à»¡Án©êºp¤F¡A¦p¦³°ÝÃD¡A½Ð¨Ó«H°Q½×¡C