¦b Windows 1.0 ªº®É¥N¡A¨t²Î¤¤´N¤w¸g¨Ï¥Î«ö¶s¡B½s¿è®Ø¡B½Æ¦X®Øµ¥±±¨î¶µ¡]ºÙ¬°¼Ð·Ç±±¨î¶µ©Î¨Ï¥ÎªÌ±±¨î¶µ¡^¡A¨Ó¥[±j¨Ï¥ÎªÌ¬É±¡AÅý¹q¸£ªº¨Ï¥Î¤£¦A¬O§N¦B¦Bªº¾÷¾¹¡A¼W¶i¤F¤£¤Ö¿Ë©M¤O¡C¨ì¤F Windows 95 ®É¡A³o¨Ç¼Ð·Ç±±¨î¶µ¤´«O¯dÄ~Äò¨Ï¥Î¡A¦b²Ä¤G¤Q¡ã¤G¤Q¤G³¹¡A¤p¤ì°¸¤w²³æ¤¶²Ð¹L¤F¡C
°£¤F³o¨Ç¨Ï¥Î¸ûÀWÁcªº¼Ð·Ç±±¨î¶µ¤§¥~¡AÁÙ¦³¥t¥~¤@Ãþ¬O¦b Windows 95 ¤§«á¡A¤~¥[¤Jªº±±¨î¶µ¡AºÙ¬°³q¥Î±±¨î¶µ¡A¥]§t animation¡Bheader¡Blist-view¡Bmonth calendar¡Bprogress bar¡Bstatus bar¡Bsyslink¡Btab¡Btooltip¡Btrackbar¡Btree-view¡Bup-down µ¥±±¨î¶µ¡C³B²z³o¨Ç±±¨î¶µªº API ³£¥]§t¦b COMCTL32.DLL ùØ¡A¨äª©¥»¬O 4.00 ª©¡AÀHµÛ Windows 95/NT 4.0 쪩¥úºÐ³c°â¡C
ÀH®É¶¡¬y³u¡A¨Cµo§G·sª©¥»ªº IE ©Î·sª©¥»ªº Windows ¡ACOMCTL32.DLL ¤]ÀH¤§§ó·s¡A¨C¦¸§ó·s¦³®É¤]·|·s¼W¤@¨Ç³q¥Î±±¨î¶µ¡C¸g¹L¾ú¦~¨Ó³vº¥¼W¥[¡A¨ì Windows XP ®É¤w¸g¼W¬°¬ù 23 Ó³q¥Î±±¨î¶µ¤F¡]°Ñ¦Ò¿àºa¼Ï¥ý¥Íªº Windows XP µ{¦¡³]p·§½×¡^¡Aª©¥»¬° 6.00 ª©¡C
§Y¨Ï³o¨Ç³q¥Î±±¨î¶µ¤§¶¡ªº¥~Æ[»P¥\¥Î¬Û®t¤Q¸U¤K¤d¨½¡A¦ý±qµ{¦¡³]p®vªº²´¥ú¬Ý¨Ó¡A³q¥Î±±¨î¶µ©M¼Ð·Ç±±¨î¶µ¤@¼Ë¡A³£¬O¤lµøµ¡¡A¥u¬O¤£¦Pªº±±¨î¶µ¦³¯S®íªº·®æ¡]style¡^¡B°T®§¡]message¡^»P³qª¾½X¡]notification¡^¡C¤U¹Ï¤@¬O±`¨£ªº³q¥Î±±¨î¶µ¡G
¥Ñ©ó³q¥Î±±¨î¶µªº¼Æ¶q¤Ó¦h¡A°²¦p¨t²Î¤@±Ò°Ê¡A´N§â©Ò¦³ªº³q¥Î±±¨î¶µ¸ü¤J¨Ãµù¥U¡A¬O«Ü®ö¶O¸ê·½ªº¡A©Ò¥H·L³n¨Ã¨S¦³³o¼Ë°µ¡C³o·N¨ýµÛ¡An¨Ï¥Î¥¦Ì¤§«e¡A¥²¶·¥ý½T©w¬O§_¤w¸g¸ü¤J°O¾ÐÅé¡Cµ{¦¡¥i¥H©I¥s InitCommonControls ©Î InitCommonControlsEx¡A¥¦Ìªºì«¬¬O¡G
call InitCommonControls
invoke InitCommonControlsEx,\
lpInitCtrls ; pointer to INITCOMMONCONTROLSEX
InitCommonControls ¨S¦³°Ñ¼Æ¡A¦]¦¹¥un°õ¦æ¤F InitCommonControls ´N·|§â©Ò¦³ªº³q¥Î±±¨î¶µ¸ü¤J¡CInitCommonControlsEx ¦³¤@ӰѼơA¦¹°Ñ¼Æ¬O¦ì§}«ü¼Ð¡A«ü¦VºÙ¬° INITCOMMONCONTROLSEX µ²ºcÅ骺¦ì§}¡A¨äÄæ¦ì¦p¤U¡G
INITCOMMONCONTROLSEX STRUC dwSize DWORD ? dwICC DWORD ? INITCOMMONCONTROLSEX ENDS
dwSize ¬O INITCOMMONCONTROLSEX µ²ºcÅ骺¤j¤p¡A³æ¦ì¬O¦ì¤¸²Õ¡F¥²¶·¦b©I¥s InitCommonControlsEx ¤§«e´N¶ñ¤J¾A·íªº¤j¤p¡A¨t²ÎÂǦ¹¤À¿ëª©¥»¡CdwICC ¬O«ünªì©l¤Æªº³q¥Î±±¨î¶µ¡A¨äÈ¥i¥H¬O¤Uªí¤¤³Ì¥kÄæªº¨ä¤¤¤§¤@¡G
±±¨î¶µ | µøµ¡Ãþ§O | »¡©ú | dwICC |
°Êµe±±¨î¶µ animation | SysAnimate32 | °Êµe±±¨î¶µ¥iÅã¥Ü AVI¡CAVI ¬O¤@¨t¦C¦ì¤¸¹Ïµe±¡AÃþ¦ü¹q¼v¡C¦ý°Êµe±±¨î¶µ¥u¯àÅã¥Ü¤£¥]§tµ°Tªº AVI | ICC_ANIMATE_CLASS 80h |
¼ÐÃDÄæ±±¨î¶µ header | SysHeader32 | ¼ÐÃDÄæ³q±`¦ì©ó¸ê®Æ¤W¤è¡A°Ï¤À¤£¦PÃþ«¬ªº¸ê®Æ¡C¥¦¥i¥H¬O¨ä¥L±±¨î¶µªº¤lµøµ¡¡A¨Ò¦p²M³æ²°±±¨î¶µ | ICC_LISTVIEW_CLASSES 1 |
²M³æÀ˵ø±±¨î¶µ list-view | SysListView32 | ²M³æÀ˵ø¥Î©óÅã¥Ü¦PÃþ¶µ¥Øªº¤lµøµ¡¡A¦Ó¥B´£¨Ñ¦hºØÅã¥Ü¤è¦¡¡A¥¦¤ñ²M³æ²°±±¨î¶µ§ó¦³¼u©Ê | ICC_LISTVIEW_CLASSES 1 |
¤ë¾ä±±¨î¶µ month calendar | SysMonthCal32 | ¤ë¾ä±±¨î¶µ´£¨ÑÃþ¦ü¤ë¾äªº¤¶±¡A¨Ñ¨Ï¥ÎªÌ²³æ©ú¥Õ¦a¿é¤J©Î¿ï¨ú¤é´Á | ICC_DATE_CLASSES 100h |
¶i«×¦C±±¨î¶µ progress bar | msctls_progress32 | ¶i«×¦C¬OÀ³¥Îµ{¦¡¥Î¨ÓÅã¥Ü¤¾ªø§@·~ªº¶i«×¡AÅý¨Ï¥ÎªÌª¾¹D¹q¸£ÁÙ¦b³B²z¡A¨Ã«D·í¾÷ | ICC_PROGRESS_CLASS 20h |
ª¬ºA¦C±±¨î¶µ status bar | msctls_statusbar32 | ª¬ºA¦C¬O³q±`¦ì©ó¤÷µøµ¡©³³¡ªº¤ô¥¤lµøµ¡¡AÀ³¥Îµ{¦¡¥i¥H¦bª¬ºA¦C¤WÅã¥Ü¦UºØª¬ºA¸ê°T | ICC_BAR_CLASSES 4 |
¶W³sµ²±±¨î¶µ syslink | SysLink | ¶W³sµ²±±¨î¶µ¥i¦bµøµ¡¤¤¤º´O¶W¤å¦r³sµ²¡AÅý¨Ï¥ÎªÌ§Ö³tÀò¨ú¬ÛÃö¸ê®Æ | ICC_LINK_CLASS 8000h |
¼ÐÅÒ±±¨î¶µ tab | SysTabControl32 | ¼ÐÅÒ±±¨î¶µÃþ¦üµ§°O¥»ªº¤À¹j¶©ÎÀÉ®×Âd¤¤ªº¼ÐÅÒ¡AÂǥѼÐÅÒ±±¨î¶µ¡A¨Ï¥ÎªÌ¥i¥H§Ö³t¤Á´«¨ì¥t¤@Ó¹ï¸Ü²° | ICC_TAB_CLASSES 8 |
¤u¨ã´£¥Ü±±¨î¶µ tooltip | Tooltips_class32 | ·í¨Ï¥ÎªÌ±N·Æ¹««ü¼Ð°±¦b¬Y¨Ç°Ï°ì®É¡A¦³®É·|¼u¥X¤@Ó¤p¤pªº¯x§Î¤è¶ô¡A´£¥Ü¨Ï¥ÎªÌ¬Y¨Ç¸ê°T | ICC_BAR_CLASSES 4 |
·Æ°Ê¶b±±¨î¶µ trackbar | msctls_trackbar32 | ·Æ°Ê¶b¤W³q±`¦³·Æ±ì¤Î¨è«×¡A¨Ï¥ÎªÌ¥i¥H§â·Æ¹«²¾¨ì·Æ±ì¤W«ö¦í¥ªÁ䤣©ñ¡A±N·Æ±ì²¾¨ì¾A·í¨è«×¤W¡A¥H¹ï¹q¸£¤U¹F«ü¥O | ICC_BAR_CLASSES 4 |
¾ðª¬À˵ø±±¨î¶µ tree-view | SysTreeView32 | ¾ðª¬À˵ø³q±`¥Î©óÅã¥Ü¨ã¦³¶¥¼h©Ê½èªº¸ê®Æ¡A¨Ò¦pºÏºÐ¤WªºÀɮשM¥Ø¿ý | ICC_TREEVIEW_CLASSES 2 |
¤W¤U±±¨î¶µ up-down | msctls_updown32 | ¤W¤U±±¨î¶µ¬O¤@¹ï½bÀY«ö¶s¡A¤À§O«ü¦V¤W¤Î¦V¤U¡A¨Ï¥ÎªÌ¥i¥H¥Î·Æ¹«¥ªÁäÂI¿ï¥¦Ì¡A¥H»¼¼W©Î»¼´î¬YºØ¼ÆÈ | ICC_UPDOWN_CLASS 10h |
¥t¥~¡AdwICC ¤]¥i¥H¬O ICC_STANDARD_CLASSES¡BICC_WIN95_CLASSES ¨âºØ¡A«eªÌ¬O¸ü¤J©T¦³ªº¼Ð·Ç±±¨î¶µ¡A¥]§tÀRºA±±¨î¶µ¡B½s¿è®Ø¡B«ö¶s¡B²M³æ²°¡B¤U©Ô¦¡¤è¶ô±±¨î¶µ¡B±²°Ê¶b±±¨î¶µ¡C«áªÌ¥i¥H¤@¦¸´N¸ü¤J°Êµe¡B¼ÐÃDÄæ¡B§Ö±¶Áä¡B²M³æÀ˵ø¡B¶i«×¦C¡Bª¬ºA¦C¡B¼ÐÅÒ¡B¤u¨ã´£¥Ü¡B¤u¨ã¦C¡B·Æ°Ê¶b¡B¾ðª¬À˵ø©M¤W¤U±±¨î¶µ¡A¦Ó¤£»Ý¤À§O¸ü¤J¡C
InitCommonControlsEx ¨ã¦³²Ö¿n©Ê¡C·N«ä¬O¦pªG²Ä¤@¦¸©I¥s InitCommonControlsEx ®É¡AdwICC °Ñ¼Æ¬O ICC_ANIMATE_CLASS¡A²Ä¤G¦¸«o¬O ICC_PROGRESS_CLASS¡A³Ì«á¨t²Î·|¸ü¤J°Êµe±±¨î¶µ»P¶i«×¦C±±¨î¶µ¡A¤£·|®ø°£¥ý¸ü¤Jªº°Êµe±±¨î¶µ¡C¥t¥~¤Wªí¤¤¡A¦³¨Ç dwICC °Ñ¼ÆÈ·|¸ü¤J¨âөΨâÓ¥H¤Wªº³q¥Î±±¨î¶µ¡A¨Ò¦p ICC_TAB_CLASSES ·|¸ü¤J¼ÐÅÒ»P¤u¨ã´£¥Ü¨âºØ±±¨î¶µ¡C
ªí¤@¥¼¦C¥X¨Óªº¤u¨ã¦C®e¾¹±±¨î¶µ¡]Rebar Controls¡^¡B¤é´Á®É¶¡¬D¿ï±±¨î¶µ¡]Date And Time Picker¡^¡BIP ±±¨î¶µ¡]IP Address Control¡^¡B´«¶±±¨î¶µ¡]Pager Controls¡^¡BÂX®i½Æ¦X®Ø³o¤Ó³q¥Î±±¨î¶µ¡]Combo BoxEx Controls¡^¡A¥²¶·¥Ñ InitCommonControlsEx ¸ü¤J¡A¦ÓµLªk¥Ñ InitCommonControls ¸ü¤J¡C
¦]¬°³q¥Î±±¨î¶µºØÃþ«Ü¦h¡A¥»³¹¶È¤¶²Ð¤@Ó³q¥Î±±¨î¶µ¡A¼ÐÅÒ±±¨î¶µ¡A¦Ó¥B¥Î¤@Ó¨Ò¤l¨Ó»¡©ú¦p¦ó«Ø¥ß¼ÐÅÒ±±¨î¶µ¡C
¼ÐÅÒ±±¨î¶µ¨Ì»Ý¨D¡A¤À¦¨¼ÆÓ¼ÐÅÒ¶µ¥Ø¡]©Î²ºÙ¶µ¥Ø¡Aitem¡^¡A¨CÓ¼ÐÅÒ¶µ¥Ø¨Ï¤À¬°¨â³¡¤À¡G¼ÐÅÒ¡]tab¡^»PÅã¥Ü°Ï°ì¡]display area¡^¡C¤@¯ë¦Ó¨¥¡A¼ÐÅÒ¦ì©ó¤W¤è¡AÅã¥Ü¤å¦r¼ÐÃD¡A³o¨Ç¤å¦r¤]¥s¼ÐÅÒ¤å¦r¡F¦p¦³»Ý¨D¤]¯à©ó¼ÐÅÒ¤ºÅã¥Ü¹Ï¹³¡CÅã¥Ü°Ï°ì³q±`¦ì©ó¼ÐÅÒ©³¤U¡A¦Ó¥B¤£½×¦³¦h¤ÖÓ¼ÐÅÒ¡AÅã¥Ü°Ï°ì¥u¦³¤@Ó¡A¥¦¬O©Ò¦³¼ÐÅÒ¦@¥Îªº¡C¼ÐÅÒ±±¨î¶µªº¤u§@°Ï¡A¥]§t¤F¼ÐÅÒ¡BÅã¥Ü°Ï°ì¡A¥H¤Î¼ÐÅÒ¥k¤èªºªÅ¥Õ¡C
¥»³¹n¤¶²Ðªº¨Ò¤lºÙ¬° HMS2S¡]HMS ¬O®É¡B¤À¡B¬íªº·N«ä¡^¡A·N«ä¬O¦¹µ{¦¡·|§â¨Ï¥ÎªÌ¿é¤Jªº®É¡B¤À¡B¬íÂà´«¬°Á`¦@¦h¤Ö¬í¡A³o¬O²Ä¤@Ó¥\¯à¡F¤]¯à§â¨Ï¥ÎªÌ¿é¤Jªº¬í¼Æ¡AÂà´«¦¨´X®É´X¤À´X¬í¡A¦¹¬°²Ä¤GÓ¥\¯à¡F²Ä¤TÓ¥\¯à¬O»¡©ú¡C³o¤TÓ¥\¯à«ê¦n¬O¼ÐÅÒ±±¨î¶µªº¤TÓ¶µ¥Ø¡C¨£¹Ï¤G¡G¹Ï¤G¤¤ªº¡u®É¤À¬í¡÷¬í¡v¡B¡u¬í¡÷®É¤À¬í¡v¡B¡u»¡©ú¡v³£¬O¼ÐÅÒ¤å¦r¡A¦Ó¥¦Ì¤À§O»P«e±¹Ï¹³©Ò³ò¦íªº¯x§Î°Ï°ìºÙ¬°¼ÐÅÒ¡A¦b HMS2S ¤¤¦³¤TÓ¼ÐÅÒ¡A¥Hµµ¦â®Ø®Ø¦í¡C¨t²Î¥H¯Á¤ÞÈ¥Nªí³o¨Ç¼ÐÅÒ¡A¯Á¤ÞȬO¥H¹s¶}©l¡A¨C©¹¥k¤@Ó¼ÐÅÒ´N¼W¥[¤@¡C¨Ò¦p¡u®É¤À¬í¡÷¬í¡v¼ÐÅÒ¤å¦r»P¥ªÃ䪺µµ®Ø¶À¦rªº H ¹Ï¹³¦X°_¨Ó¡A¬O¯Á¤ÞȬ°¹sªº¼ÐÅÒ¡F¡u¬í¡÷®É¤À¬í¡v»P¥ªÃ䪺µµ®Ø¶À¦rªº S ¹Ï¹³¦X°_¨Ó¡A¬O¯Á¤ÞȬ°¤@ªº¼ÐÅÒ¡K¡K¡C¼ÐÅÒ©³¤U¡A¥ÎÂÅ¦â®Ø³ò¦íªº°Ï°ì¬OÅã¥Ü°Ï°ì¡C
¨Ï¥ÎªÌ¥Î·Æ¹«¥ªÁäÂIÀ»¼ÐÅÒ¡A´N¯à¦b³o¤TÓ¥\¯à¤¤¤Á´«¡A¦ÓÅã¥Ü°Ï°ì¤]·|ÀH¤§¤Á´«¦¨»P¨ä¹ïÀ³©Ò»Ýªºµe±¡A³o¨Çµe±¨ä¹ê¬O¼ÐÅÒ±±¨î¶µªº¤l¹ï¸Ü²°¡Cµy«á¦A¸Ôz¡C
¤Z±±¨î¶µ³£¬O¤lµøµ¡¡A©Ò¥H¼ÐÅÒ±±¨î¶µ¤]¤£¨Ò¥~¡A¥¦¬O¥t¤@Óµøµ¡ªº¤lµøµ¡¡A©h¥BºÙ¡u¥t¤@Óµøµ¡¡v¬°¥Dµøµ¡¡C°²¦p¥Dµøµ¡¬°¤@¯ëµøµ¡¡A³q±`¬O¦b©I¥s CreateWindowsEx «Ø¥ß¥Dµøµ¡¤§«á¡A¦A©I¥s CreateWindowsEx «Ø¥ß¼ÐÅÒ±±¨î¶µ¡A¦Ó¥B«áªÌ»Ý«ü©wµøµ¡Ãþ§O¬°¡uSysTabControl32¡v¡C
°²¦p¥Dµøµ¡¬O¹ï¸Ü²°¡A¨º»ò¥i¥H¦b¸ê·½´yzÀɤ¤©w¸q¡uDIALOG¡v°Ï¶ô¡A©ó¦¹°Ï¶ô¤¤¥Î¡uCONTROL¡v´yz¼ÐÅÒ±±¨î¶µ¡A³Ì«nªº¬O«ü©wµøµ¡Ãþ§O¬°¡uSysTabControl32¡v¡FµM«á©ó²Õ¦X»y¨¥ì©lµ{¦¡¤¤©I¥s DialogBoxParam ¦P®É«Ø¥ß¥D¹ï¸Ü²°¥H¤Î¼ÐÅÒ±±¨î¶µ¡C
¤£½×þ¤@ºØ±¡§Î¡A¦b³o¤§«e¡A³£¥²¶·©I¥s InitCommonControls ©Î InitCommonControlsEx¡A¸ü¤J»P¼ÐÅÒ±±¨î¶µ¬ÛÃöªº¸ê®Æ¡A¥Hªì©l¤Æ¼ÐÅÒ±±¨î¶µ¡C¦¹¥~¡A¦b«Ø¥ß¼ÐÅÒ±±¨î¶µ®É¡A¨Ì»Ý¨D¥i¥H«ü©w¤£¦Pªº·®æ¡A¦³Ãö¼ÐÅÒ±±¨î¶µªº·®æ¡A¥i¥H¬d¸ß³o¨à¡C
·í¼ÐÅÒ±±¨î¶µ«Ø¥ß§¹¦¨¤§«á¡A±µ¤U¨Ó¥i¥H«Ø¥ß¼ÐÅÒ¶µ¥Ø¡C«Ø¥ß¼ÐÅÒ¶µ¥Øªº¤èªk¬O©I¥s SendMessage¡A¦Ó²Ä¤GӰѼơA°T®§ÃѧO½X¡A¥²¶·¬O TCM_SETIMAGELIST °T®§¡Aµ{¦¡½X¦p¤U¡G
invoke SendMessage,hTab,TCM_INSERTITEM,iItem,pItem
¨ä¤¤ hTab ¬O¼ÐÅÒ±±¨î¶µ¥N½X¡A¦¹¼ÐÅÒ±±¨î¶µ¤º·|·s²K¥[¼ÐÅÒ¶µ¥Ø¡CiItem ¬O¼ÐÅÒ¶µ¥Ø¯Á¤Þ¡A¥Ñ¹s¶}©l¡F°²¦p·s²K¥[ªº¶µ¥Ø¯Á¤Þ¨Ã¤£¬O³Ì«á¤@Ó¡A¨ä«áÁÙ¦³¶µ¥Ø¡A¨º»ò·s²K¥[ªº¶µ¥Ø·|´¡¤J¨ä¤¤¡Aì¨Ó³Q´¡¤Jªº»P«á±ªº³£·|©¹«á°h¤@¸¹¡C¨Ò¦pì¨Ó¼ÐÅÒ±±¨î¶µ¦³¤Ó¼ÐÅÒ¶µ¥Ø¡A¨ä¯Á¤ÞȬ° 0¡B1¡B2¡B3¡B4¡C¦pªG°õ¦æ¡uinvoke SendMessage,hTab,TCM_INSERTITEM,3,ADDR tci¡v¡A¨º»òì¨Ó¯Á¤ÞȬ° 3¡B4 ªº¶µ¥Ø·|Åܬ° 4¡B5¡Fì¨Ó 0¡B1¡B2 ªº¶µ¥Ø¤´¤£ÅÜ¡F·s²K¥[ªº¶µ¥Ø¯Á¤ÞȬ° 3¡C
pItem ¬O TCITEM µ²ºcÅ骺¦ì§}¡C¦pªG¦¨¥\«Ø¥ß·sªº¶µ¥Ø¡A¦^¶ÇȬ°·s¶µ¥Øªº¯Á¤Þ¡F§_«h¦^¶ÇȬ°¡Ð1¡C¦b³o¨Ç°Ñ¼ÆùØ¡A³Ì«nªº¬O¦p¦ó³]©w TCITEM µ²ºcÅéªºÄæ¦ì¡C
°£¤F¹ï¼ÐÅÒ±±¨î¶µµo¥Xªº TCM_INSERTITEM °T®§·|¥Î¨ì TCITEM ¤§¥~¡AÁÙ¦³ TCM_GETITEM ©Î TCM_SETITEM °T®§¡A¤]·|¥Î¨ì TCITEM¡C«á¨â«h°T®§¤À§O¬O¨ú±o¼ÐÅÒ¶µ¥Øªº¸ê®Æ¡A¥H¤Î³]©w¼ÐÅÒ¶µ¥Øªº¸ê®Æ¡CTCITEM ¤]ºÙ¬° TC_ITEM¡A¨äÄæ¦ì¦p¤U¡G¡]ª`·N¡I¦b WinInc ¤¤ TCITEM ªº©w¸q¦³»~¡A¥²¶·¦b STRUCT ¤§«áªº¹ï»ô¿ï¶µ¥[¤W¡u8¡v¤~¹ï¡^
TCITEM STRUCT 8 mask_ DWORD ? ;«ü©wþÓÄæ¦ì¦³®ÄªººX¼Ð dwState DWORD ? ;ª¬ºA dwStateMask DWORD ? ;¾B¸n¤£³B²zªºª¬ºA pszText LPSTR ? ;¦r¦ê¦ì§} cchTextMax DWORD ? ;¦r¦êªø«× iImage DWORD ? ;¹Ï¹³¯Á¤Þ lParam LPARAM ? ;À³¥Îµ{¦¡¦Û¦æ©w¸qªº¸ê®Æ TCITEM ENDS
©³¤U»¡©ú TCITEM ÓÄæ¦ìªº·N¸q¡G
ºX¼Ð | ¼ÆÈ | »¡©ú |
TCIF_IMAGE | 2 | iImage Äæ¦ì¦³®Ä |
TCIF_PARAM | 8 | lParam Äæ¦ì¦³®Ä |
TCIF_RTLREADING | 4 | Åã¥Ü pszText ©Ò«üªº¦r¦ê®É¡A¨ä¤è¦V»P¤÷µøµ¡¤å¦r¤Ï¦V |
TCIF_STATE | 10h | dwState Äæ¦ì¦³®Ä |
TCIF_TEXT | 1 | pszText Äæ¦ì¦³®Ä |
¼ÐÅÒ±±¨î¶µªº¼ÐÅÒª¬ºA«Ü¤Ö¡A¦³©³¤U´XºØ¡A°£¤F¼o±ó¤£¥Îªº TCIS_HIDDEN¡A³Ñ¤U¨âºØ¡A¨CºØª¬ºA³£¥Î¤@Ӧ줸ªí¥Ü¡G
ª¬ºA | ¼ÆÈ | »¡©ú |
TCIS_BUTTONPRESSED | 1 | ¼ÐÅÒ§e²{«ö¶s³Q«ö¤Uªºª¬ºA¡A¥u¦³ TCS_BOTTOM ¤~¦³¦¹ª¬ºA |
TCIS_HIGHLIGHTED | 2 | ¼ÐÅÒ³B©ó°ª«G«×ª¬ºA |
TCIS_HIDDEN | 1 | ¼ÐÅÒ³B©óÁôÂꬺA¡A¦ý¤w¼o±ó¤£¥Î |
°²¦pn³]©w²Ä¤GÓ¼ÐÅÒ¬°°ª«G«×ª¬ºA¡A¥Î¥H¤Uµ{¦¡½X³]©w¡G
mov tci.mask_,TCIF_STATE mov tci.dwState,TCIS_HIGHLIGHTED invoke SendMessage,hTab,TCM_SETITEM,2,ADDR tci
°²³]¦¹¼ÐÅÒ±±¨î¶µ¦³ TCS_BOTTOM ·®æ¡A¦Ó²Ä¤GÓ¼ÐÅÒ«ê¦n³B©ó«ö¶s³Q«ö¤Uªºª¬ºA¡C°õ¦æ¤W±µ{¦¡®É¡Atci.dwState ¬° 2¡A´«ºâ¬°¤G¶i¦ì¬O 0000 0010¡A²Ä¤@Ӧ줸¬°¤@ªí¥Ü³]©w°ª«G«×¡A²Ä¹s¦ì¤¸¬°¹sªí¥Ü³]©w¼ÐÅÒ«ö¶sÃP¶}¡C쥻¥u¬OnÅý²Ä¤GÓ¼ÐÅÒ¥H°ª«G«×Åã¥Ü¡Aµ²ªG¤£¶È¹F¦¨¤F¡AÁÙÅý쥻¬O³B©ó«ö¤Uª¬ºAªº¼ÐÅÒÅܦ¨ÃP¶}ª¬ºA¡A³o´N¦h¦¹¤@Á|¦Ó¥B¤£²Å¦Xì¨Óªº¥Øªº¡CTCITEM ³]¸m dwStateMask Äæ¦ì¡A´N¬O¬°¤F¸Ñ¨M¦¹°ÝÃD¡CdwStateMask ªº¥Ø¬O¬°¤F¾B¸n¬Y¨Ç¦ì¤¸¡A¤£¨Ï¨ä§ïÅÜ¡An§ïÅܪº¦ì¤¸±N¨ä³]¬°¤@¡A¤£§ïÅܪº¦ì¤¸³]¬°¹s¡C©Ò¥H¥¿½Tµ{¦¡¦p¤U¡G
mov tci.mask_,TCIF_STATE mov tci.dwState,TCIS_HIGHLIGHTED mov tci.dwStateMask,TCIS_HIGHLIGHTED invoke SendMessage,hTab,TCM_SETITEM,2,ADDR tci
¹³ HMS2S ¦³¤TÓ¶µ¥Ø¡A´N±o©I¥s¤T¦¸ SendMessage¡A¨C¦¸³£¹ï¼ÐÅÒ±±¨î¶µµo¥X TCM_INSERTITEM °T®§¡A¦ý iItem ¤£¦P¡ATCITEM ¤ºªº pszText ¤]«ü¦V¤£¦Pªº¦r¦ê¦ì§}¡C©³¤Uªºµ{¦¡½X·|¦b¼ÐÅÒ±±¨î¶µ¤¤«Ø¥ß¤@Ó¯Á¤ÞȬ°¹s¡B¦WºÙ¬°¡u®É¤À¬í¡÷¬í¡vªº¼ÐÅÒ¶µ¥Ø¡G
.DATA tci TCITEM <> szHms2s DB "®É¤À¬í¡÷¬í",0 ⁝ mov tci.mask_,TCIF_TEXT lea r10,szHms2s mov tci.pszText,r10 INVOKE SendMessage,hTab,TCM_INSERTITEM,0,ADDR tci
¹Ï¹³¦Cªí¡]image list¡A¤]½Ķ¦¨¹Ï¹³²M³æ¡^¬O¤@ºØ¥Î¨Ó¦sÀx©MºÞ²z¦hÓ¤p¹Ï¹³ªºª«¥ó¡A¦Ó³o¨Ç¤p¹Ï¹³³q±`¥Î©ó¼ÐÅÒ±±¨î¶µ¡B²M³æÀ˵øµ¥±±¨î¶µ¡CÀx¦s¦b¹Ï¹³¦Cªí¤ºªº¤p¹Ï¹³¡A¤j¤p¥²¶·¤@P¡]¨Ò¦p³£¬O 16¡Ñ16 ©Î³£¬O 32¡Ñ32 ¹³¯À¡^¡AÀx¦s¦b¹Ï¹³¦Cªíªº¹Ï¹³¥i¥H¬O¦ì¤¸¹Ï¡]°ÆÀɦW¬O BMP¡^¡B¹Ï¥Ü¡]°ÆÀɦW¬O ICO¡^©Î´å¼Ð¡]°ÆÀɦW¬O CUR¡^¡C
«Ø¥ß¹Ï¹³¦Cªí»Ý©I¥s ImageList_Create¡Aè«Ø¥ß¦nªº¹Ï¹³¦Cªí¤º¨ÃµL¥ô¦ó¹Ï¹³¡A¥²¶·©I¥s ImageList_Add ©Î ImageList_ReplaceIcon ¤~¯à¦b¹Ï¹³¦Cªí¤¤²K¥[¹Ï¹³¡A«eªÌ·s¼W¦ì¤¸¹Ï¡A«áªÌ·s¼W¹Ï¥Ü©Î´å¼Ð¡C¨C·s¼W¤@±i¹Ï¹³¡A¨t²Î·|½á¤©¹Ï¹³¤@Ó¯Á¤ÞÈ¡A¥Ñ¹s¶}©lµM«á¬O 1¡B2¡B3¡K¡K¡C¯Á¤ÞÈ¥Nªí³o±i¹Ï¹³¡A¦pªG±±¨î¶µn¨Ï¥Î¹Ï¹³¦Cªí¤¤ªº¹Ï¹³®É¡A´N¥H¯Á¤ÞȪí¥Ü¡C¦pªG¤£¦A»Ýn¹Ï¹³¦Cªí¡A»Ý©I¥s ImageList_Destroy ±N¨ä¾P·´¡C
¦pªGn¦b¼ÐÅÒ¶µ¥Øªº¤å¦r¥ªÃäÅã¥Ü¹Ï¹³¡A¨ä¨BÆJ¬°¡G①©I¥s ImageList_Create «Ø¥ß¹Ï¹³¦Cªí¡B②¦b¹Ï¹³¦Cªí¤¤²K¥[¹Ï¹³¡B③¥H TCM_SETIMAGELIST ¬°°Ñ¼Æ©I¥s SendMessage¡A³]©w»P¼ÐÅÒ±±¨î¶µ¬ÛÃöÁpªº¹Ï¹³¦Cªí¡B④¥H TCM_INSERTITEM ¬°°Ñ¼Æ©I¥s SendMessage¡A¦b³o¤§«en³]©w TCITEM ªº iImage Äæ¦ì¡B⑤¤£¦A»Ýn¹Ï¹³¦Cªí®É¾P·´¥¦¡C
«e±´£¹L¡A¼ÐÅÒ±±¨î¶µ¬O¥Dµøµ¡ªº¤lµøµ¡¡C¦Ó¦b¼ÐÅÒ±±¨î¶µ¤º¡A¦ì©óÅã¥Ü°Ï°ìªº¦a¤è¡A³q±`¤]·|¦³³\¦h±±¨î¶µ¨Ñ¨Ï¥ÎªÌ¨Ï¥Î¡C³o¨Ç±±¨î¶µ¦p¦ó²£¥Í©O¡H¨Æ¹ê¤W³o¨Ç±±¨î¶µ³£¥]§t¦b¹ï¸Ü²°¤º¡A¦Ó³oÓ¹ï¸Ü²°¬O¼ÐÅÒ±±¨î¶µªº¤lµøµ¡¡C³oºØÃö«Y¥i¥H·Q¹³¦¨¯ª®]¤T¥N¡G¥Dµøµ¡¡÷¼ÐÅÒ±±¨î¶µ¡÷¤l¹ï¸Ü²°¡C¦]¬°¨CÓ¼ÐÅÒ¶µ¥Ø¥\¯à¤£¦P¡A¤l¹ï¸Ü²°ªº¤º®e¤]·|¤£¦P¡A©Ò¥H¤@Ó¼ÐÅÒ¶µ¥Ø»Ý·f°t¤@Ó¤l¹ï¸Ü²°¡C
¹³¥»³¹ªº¨Ò¤l¡A¨£¹Ï¤Gªº HMS2S¡A¥Dµøµ¡¬O¼ÐÃDÄæ¬°¡u®É¤À¬í»P¬íªºÂà´«¡vªºµøµ¡¡A¼ÐÅÒ±±¨î¶µ¬O¥¦ªº¤lµøµ¡¡C¦Ó¼ÐÅÒ±±¨î¶µ¦³¤TÓ¼ÐÅÒ¶µ¥Ø¡A¦U¦Û¦³¤@Ó¤l¹ï¸Ü²°¡A©Ò¥H¦³¤TÓ¤l¹ï¸Ü²°¡C²Ä¤@Ó¼ÐÅÒ¬O¡u®É¤À¬í¡÷¬í¡v¡A¨ä¤l¹ï¸Ü²°¹ïÀ³«ezªº²Ä¤@Ó¥\¯à¬O±N®É¤À¬íÂà´«¦¨¬í¡A¨Ò¦p 2 ®É 0 ¤À 0 ¬íÅܦ¨ 7200 ¬í¡F²Ä¤GÓ¼ÐÅÒ¬O¡u¬í¡÷®É¤À¬í¡v¡A¹ïÀ³²Ä¤GÓ¥\¯à¬O±N¬íÂà´«¦¨®É¤À¬í¡A¨Ò¦p 86400 ¬íÅܦ¨ 24 ®É 0 ¤À 0 ¬í¡F²Ä¤TÓ¼ÐÅÒ¬O»¡©ú¡A¹ïÀ³²Ä¤TÓ¥\¯à¡A»¡©ú¡C
¤l¹ï¸Ü²°¬O¼ÐÅÒ±±¨î¶µªº¤lµøµ¡¡A¦Ó¥B¬O¦b¼ÐÅÒ±±¨î¶µ©Ò¦bªº¯x§Î½d³ò¤º¡An¿í¦u¤U±´X¶µ³W«h¡G
¤Wzªº²Ä⑴¡B⑵¨Ã¤£Ãø¡A¤£¯S§O¸Ôz¡C©³¤U»¡©ú²Ä⑶ÂI¡A³o»P¼ÐÅÒ±±¨î¶µªº TCM_ADJUSTRECT °T®§¦³Ãö¡CTCM_ADJUSTRECT °T®§¬OÂǥѩI¥s SendMessage µo°eµ¹¼ÐÅÒ±±¨î¶µªº¡A¨ä¹Lµ{¦p¤U¡G
invoke SendMessage,hTab,TCM_ADJUSTRECT,fLarger,pRect
hTab ¬O¼ÐÅÒ±±¨î¶µªº¥N½X¡CfLarger ¬O¥¬ªLÈ¡A¤£¬O¹s´N¬O¤@¡A¥¦¥NªíµÛ©³¤U¨âºØ±¡§Î¡G
¥»³¹ªº¨Ò¤l¡AHMS2S ¬O±Ä¥Î⒝¤è¦¡¡C¥ý©I¥s GetClientRect ±o¨ì¼ÐÅÒ±±¨î¶µ¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ð¦s©ó RECT µ²ºcÅ餺¡A³o¨âÓ®y¼Ð³ò¦íªº¯x§Î¡A¥]§t¶µ¥Ø¦WºÙ»PÅã¥Ü°Ï°ì¡A¨ä¹ê´N¬O¼ÐÅÒ±±¨î¶µªº¤u§@°Ï¡C¦b¥H TCM_ADJUSTRECT ¬°°Ñ¼Æ©I¥s SendMessage ªº¦P®É¡A§â fLarger ³]¦¨¹s¡BpRect ³]¬°¥Ñ GetClientRect ±o¨ìªº RECT µ²ºcÅé¦ì§}¡C§¹¦¨©I¥s«á¡A«ez RECT µ²ºcÅ餺´N¬OÅã¥Ü°Ï°ì¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ð¡A¤]´N¬O¤l¹ï¸Ü²°©Ò¦bªº¯x§Î°Ï°ì¡C
HMS2S ¦³¤TÓ¼ÐÅÒ¶µ¥Ø¡A©Ò¥H¤]¦³¤TÓ¤l¹ï¸Ü²°»P¤§¹ïÀ³¡C¦Ó³o¤TÓ¤l¹ï¸Ü²°ªº¦ì¸m»P¤Ø¤o³£¬Û¦P¡A¨ä©Ò¦bªº¯x§Î»P¤j¤p¡A´N¬O¦b¥H TCM_ADJUSTRECT ¬°°Ñ¼Æ©I¥s SendMessage ®É¡A±o¨ìªº¯x§Î¡A¤]«ê¦n¬OÅã¥Ü°Ï°ì©Ò¦b½d³ò¡C
¦b¤¶²Ð³W«h⑷¤§«e¡A±o¥ý¤F¸Ñ WM_NOTIFY »P³qª¾½XªºÃö«Y¡C
·í¨Ï¥ÎªÌ¥H·Æ¹«¥ªÁäÂIÀ»¼ÐÅҩΨä¥L³q¥Î±±¨î¶µ®É¡A¨t²Î·|¹ï¥Dµøµ¡ªºµøµ¡¨ç¦¡µo¥X WM_NOTIFY °T®§¡C¦¹°T®§ªº wParam ¬Oµo¥X WM_NOTIFY °T®§ªº±±¨î¶µÃѧO½X¡]identifier¡^¡CÃѧO½X¨Ã¤£¤@©w¬O°ß¤@ªº¡A©Ò¥HÀ³¥Îµ{¦¡À³¸Ó¨Ï¥Î lParam ©Ò«ü¦ì§}¤Wªº NMHDR µ²ºcÅ餺ªº hwndFrom Äæ¦ì¨ÓÃѧO±±¨î¶µ¡A¸ÓÄæ¦ì¬Oµo¥X WM_NOTIFY ªº±±¨î¶µ¤§¥N½X¡C
¨Æ¹ê¤W¡AlParam ©Ò«ü¦ì§}¤Wªºµ²ºcÅé¦WºÙ¡A·|ÀH³q¥Î±±¨î¶µ¦Ó¤£¦P¡A¦ý³o¨Çµ²ºcÅ骺²Ä¤@ÓÄæ¦ì¥²©w¬OºÙ¬° NMHDR ªºµ²ºcÅé¡C©³¤U¬O NMHDR µ²ºcÅ骺¦UÄæ¦ì¡G
NMHDR STRUCT hwndFrom HWND ? ;µo¥X WM_NOTIFY °T®§ªº±±¨î¶µ¥N½X idFrom DWORD ? ;µo¥X WM_NOTIFY °T®§ªº±±¨î¶µÃѧO½X code DWORD ? ;³qª¾½X NMHDR ENDS
NMHDR «e¨âÓÄæ¦ì¤w¦b¤Wzµ²ºcÅéÄæ¦ìªºµù¸Ñ¡]¦Ç¦â¦r¡^»¡©ú¤F¡A¤£¦AÂØz¡Ccode ºÙ¬°³qª¾½X¡]notification code¡^¡A¤£¦Pªº±±¨î¶µ·|µo¥X¤£¦Pªº³qª¾½X¡A¦ý¬O©³¤Uªº¤KºØ³qª¾½X¬O¨C¤@ºØ³q¥Î±±¨î¶µ³£·|µo¥Xªº¡G
³qª¾½X | ¼ÆÈ | »¡©ú |
NM_CLICK | ¡Ð2 | ¨Ï¥ÎªÌ¦b³q¥Î±±¨î¶µ«ö¤U·Æ¹«¥ªÁä«á«Ü§ÖÃP¶} |
NM_DBLCLK | ¡Ð3 | ¨Ï¥ÎªÌ¦b³q¥Î±±¨î¶µ³sÄò¨â¦¸§Ö³t«ö¤U·Æ¹«¥ªÁä«á¤S«Ü§ÖÃP¶} |
NM_RCLICK | ¡Ð5 | ¨Ï¥ÎªÌ¦b³q¥Î±±¨î¶µ«ö¤U·Æ¹«¥kÁä«á«Ü§ÖÃP¶} |
NM_RDBLCLK | ¡Ð6 | ¨Ï¥ÎªÌ¦b³q¥Î±±¨î¶µ³sÄò¨â¦¸§Ö³t«ö¤U·Æ¹«¥kÁä«á¤S«Ü§ÖÃP¶} |
NM_RETURN | ¡Ð4 | ¨Ï¥ÎªÌ¦b³q¥Î±±¨î¶µ¦³¿é¤JµJÂI®É¡A«ö¤UÁä½L¤Wªº¡uEnter¡vÁä |
NM_SETFOCUS | ¡Ð7 | ³q¥Î±±¨î¶µÀò±o¿é¤JµJÂI |
NM_KILLFOCUS | ¡Ð8 | ³q¥Î±±¨î¶µ¥¢¥h¿é¤JµJÂI |
NM_OUTOFMEMORY | ¡Ð1 | ¨S¦³¨¬°÷ªº°O¾ÐÅé¾Þ§@³q¥Î±±¨î¶µ |
¦]¬° NMHDR µ²ºcÅé¬O¥Ñ¨t²Î¸g¥Ñ WM_NOTIFY °T®§ªº lParam °Ñ¼Æ«ü©wªº¡A¨Ã«D¥ÑÀ³¥Îµ{¦¡¦Û¦æ©w¸qªº¡An¦s¨ú NMHDR µ²ºcÅéªºÄæ¦ì´N·|¤ñ¸û³Â·Ð¡C³q±`·|¥Î ASSUME °²«ü¥O«Å§i¬YÓ 64 ¦ì¤¸ªº¼È¦s¾¹¹ïÀ³¦¹µ²ºcÅé°_©l¦ì§}¡A¦A±N¦¹¼È¦s¾¹¤§È³]¬° lParam¡A³o¼Ë¸Ó¼È¦s¾¹´N¬Oµ²ºcÅ骺°_©l¦ì§}¡AµM«á´N¯à¥Ñ¤@¯ë¦s¨úµ²ºcÅ骺¤è¦¡¦s¨ú¦UÄæ¦ì¡C
¦pªG¤£¶·¦A¦s¨ú¸Óµ²ºcÅé¡A¶·¨ú®ø¦¹¼È¦s¾¹¹ïÀ³ªºµ²ºcÅ骺«Å§i¡C¨Ò¦p©³¤Uªº¨Ò¤l¬O¥H R11 «ü¦V NMHDR µ²ºcÅ骺°_©l¦ì§}¡A°²¦pn¦s¨ú NMHDR ¤¤ªº code ©Î¨ä¥LÄæ¦ì¤]¤£§xÃø¡A¨£¤U±²Ä¤T¦C¡A¹Lµ{¦p¤U¡G
ASSUME r11:PTR NMHDR mov r11,lParam mov eax,[r11].code ⁝ ASSUME r11:NOTHING
¤@¯ë¦Ó¨¥¡A³q¥Î±±¨î¶µªº³qª¾½X±`¬°tÈ¡A¨Ò¦p NM_CLICK ¤§È¬°¡Ð2¡A´«ºâ¬°Âù¦r²Õªº¤Q¤»¶i¦ì¬O 0FFFFFFFEh¡C¦³Ãö©ót¼Æªºªí¥Ü¤èªk¡A¥i°Ñ¾\²Ä¤E³¹¡C
·í¨Ï¥ÎªÌ¥H·Æ¹«¥ªÁäÂIÀ»¼ÐÅÒ¶µ¥Ø®É¡A¨t²Î·|¹ïµøµ¡¨ç¦¡µo¥X WM_NOTIFY °T®§¡A¦Ó¨ä³qª¾½X¬O TCN_SELCHANGE¡C¦b lParam ©Ò«ü¦ì§}¤W¬O NMHDR µ²ºcÅé¡A¦b¦¹µ²ºcÅ餺ªº code Äæ¦ì´N¬O³qª¾½X¡ATCN_SELCHANGE¡C
µøµ¡¨ç¦¡ÀË´ú¨ì¦¹³qª¾½X¤§«á¡AÀ³¹ï¨Ïì¨ÓÅã¥Üªº¤l¹ï¸Ü²°Åܬ°¤£Åã¥Ü¡A¦Ó¬OÅã¥Ü¨Ï¥ÎªÌ©Ò¬D¿ï¼ÐÅÒ¶µ¥Ø¹ïÀ³ªº¤l¹ï¸Ü²°¡C¸Ô²Ó¹Lµ{¨£«á±¡C
©³¤U¬O HMS2S.EXE.MANIFEST ªº¤º®e¡G
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="AtHome.Wanker.HMS2S"
version="1.0.0.0"
processorArchitecture="amd64"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="amd64"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly> |
©³¤U¬O HMS2S.RC ªº¤º®e¡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 30
31 32 33 34 35 36
37 38 39 40 41 42
43 44 45 46 47 48
49 50 51 52 53 54
55 56 57 58 59 60
61 62 63 |
#include "RESOURCE.H" #define RT_MANIFEST 24 #define IDD_MAIN 1000
#define IDD_HMS2S 1001 #define IDD_S2HMS 1002 #define IDD_HELP 1003
#define IDT_TC 1004 #define IDB_EXIT 1005 #define IDE_HR1 1006
#define IDE_MN1 1007 #define IDE_SC1 1008 #define IDS_S1 1009
#define IDE_S2 1010 #define IDS_HMS 1011 #define ICON_MAIN 1012
#define ICON_HMS 1013 #define ICON_S 1014 #define ICON_HELP 1015
IDD_MAIN DIALOG 300,200,220,100 FONT 8,"MS Sans Serif"
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW CAPTION "®É¤À¬í»P¬íªºÂà´«" BEGIN
CONTROL "",IDT_TC,"SysTabControl32",WS_CHILD|WS_VISIBLE,2,2,216,80 PUSHBUTTON "Â÷¶}",IDB_EXIT,162,84,56,14
END IDD_HMS2S DIALOG 10,10,156,42 FONT 8,"MS Sans Serif"
STYLE WS_CHILD BEGIN EDITTEXT IDE_HR1, 21, 9,27,12,ES_NUMBER
LTEXT "®É",2100, 51,11,12,10 EDITTEXT IDE_MN1, 63, 9,27,12,ES_NUMBER
LTEXT "¤À",2101, 93,11,12,10 EDITTEXT IDE_SC1,105, 9,27,12,ES_NUMBER
LTEXT "¬í",2102, 135,11,12,10 LTEXT "¡×¡H¬í",IDS_S1,12,27,60,12
END IDD_S2HMS DIALOG 10,10,156,42 FONT 8,"MS Sans Serif"
STYLE WS_CHILD BEGIN EDITTEXT IDE_S2, 21, 9, 54,12,ES_NUMBER
LTEXT "¬í",2103, 77,11, 12,10 LTEXT "¡×¡H®É¡H¤À¡H¬í",IDS_HMS,12,27,150,12
END IDD_HELP DIALOG 0,0,192,76 FONT 8,"MS Sans Serif"
STYLE WS_CHILD BEGIN LTEXT "HMS2S¯à§â®É¤À¬í´«ºâ¬°¬í¡A¤]¯à¤Ï¹L¨Ó¹Bºâ¡C",2104,10,20,180,24,
END 1 RT_MANIFEST MOVEABLE PURE "HMS2S.EXE.MANIFEST"
ICON_MAIN ICON clock.ico ICON_HMS ICON hms2s.ico
ICON_S ICON s2hms.ico ICON_HELP ICON help.ico |
©³¤U¬O HMS2S.ASM ªº¤º®e¡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 30
31 32 33 34 35 36
37 38 39 40 41 42
43 44 45 46 47 48
49 50 51 52 53 54
55 56 57 58 59 60
61 62 63 64 65 66
67 68 69 70 71 72
73 74 75 76 77 78
79 80 81 82 83 84
85 86 87 88 89 90
91 92 93 94 95 96
97 98 99 100 101 102
103 104 105 106 107 108
109 110 111 112 113 114
115 116 117 118 119 120
121 122 123 124 125 126
127 128 129 130 131 132
133 134 135 136 137 138
139 140 141 142 143 144
145 146 147 148 149 150
151 152 153 154 155 156
157 158 159 160 161 162
163 164 165 166 167 168
169 170 171 172 173 174
175 176 177 178 179 180
181 182 183 184 185 186
187 188 189 190 191 192
193 194 195 196 197 198
199 200 201 202 203 204 |
OPTION CASEMAP:NONE
OPTION WIN64:7
IDD_MAIN EQU 1000 ;¥Dn¹ï¸Ü²°ÃѧO½X
IDD_HMS2S EQU 1001 ;®É¤À¬í¡÷¬í¹ï¸Ü²°ÃѧO½X
IDD_S2HMS EQU 1002 ;¬í¡÷®É¤À¬í¹ï¸Ü²°ÃѧO½X
IDD_HELP EQU 1003 ;»¡©ú¹ï¸Ü²°ÃѧO½X
IDT_TC EQU 1004 ;¼ÐÅÒ±±¨î¶µÃѧO½X
IDB_EXIT EQU 1005 ;Â÷¶}«ö¶sÃѧO½X
IDE_HR1 EQU 1006 ;¿é¤J¤p®Éªº½s¿è®ØÃѧO½X
IDE_MN1 EQU 1007 ;¿é¤J¤Àªº½s¿è®ØÃѧO½X
IDE_SC1 EQU 1008 ;¿é¤J¬íªº½s¿è®ØÃѧO½X
IDS_S1 EQU 1009 ;¿é¥X¬íªºÀRºA±±¨î¶µÃѧO½X
IDE_S2 EQU 1010 ;¿é¤J¬íªº½s¿è®ØÃѧO½X
IDS_HMS EQU 1011 ;¿é¥X¦h¤Ö®É¦h¤Ö¤À¦h¤Ö¬íªºÀRºA±±¨î¶µÃѧO½X
ICON_MAIN EQU 1012 ;¥Dn¹ï¸Ü²°¹Ï¥Ü
ICON_HMS EQU 1013 ;®É¤À¬í¡÷¬í¼ÐÅÒªº¹Ï¥Ü
ICON_S EQU 1014 ;¬í¡÷®É¤À¬í¼ÐÅÒªº¹Ï¥Ü
ICON_HELP EQU 1015 ;»¡©ú¼ÐÅÒªº¹Ï¥Ü
UNICODE EQU 1
INCLUDE WINDOWS.INC
INCLUDE COMMCTRL.INC
INCLUDE MYFIX.INC
INCLUDELIB KERNEL32.LIB
INCLUDELIB USER32.LIB
INCLUDELIB COMCTL32.LIB
;*******************************************************************************
.CONST
iccex INITCOMMONCONTROLSEX <SIZEOF INITCOMMONCONTROLSEX,ICC_TAB_CLASSES>
sz1st DW 6642h,5206h,79d2h,2192h,79d2h,0 ;®É¤À¬í¡÷¬í
sz2nd DW 79d2h,2192h,6642h,5206h,79d2h,0 ;¬í¡÷®É¤À¬í
sz3rd DW 8aaah,660eh,0 ;»¡©ú
szFmtSec DW 0ff1dh,37,64h,79d2h,0 ;¡×%d¬í
szFmtHms DW 79d2h,0ff1dh,37,64h,6642h,37,64h,5206h,37,64h,79d2h,0 ;¬í¡×%d®É%d¤À%d¬í
n3600 DD 3600
sixty DD 60
;*******************************************************************************
.DATA
hInst DQ ? ;¼Ò²Õ¥N½X
hImgLst DQ ? ;¹Ï¹³¦Cªí¥N½X
hTab DQ ? ;¼ÐÅÒ±±¨î¶µ¥N½X
SelItem DQ 2 ;Åã¥ÜhSubDlg°}¦C¤¤þÓ¤l¹ï¸Ü²°¡A¹w³]ȬO2¡A¥ç§YÅã¥ÜIDD_HELP¤l¹ï¸Ü²°
hSubDlg DQ 3 DUP (?) ;¨Ì§Ç¬OIDD_HMS2S¡BIDD_S2HMS¡BIDD_HELP¤l¹ï¸Ü²°¥N½X
;*******************************************************************************
.CODE
;-------------------------------------------------------------------------------
HlpProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
xor rax,rax
ret
HlpProc ENDP
;-------------------------------------------------------------------------------
S2HProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL buffer[20h]:WORD
.if uMsg==WM_COMMAND
mov rax,r8 ;R8W¡×ÃѧO½X
shr rax,16 ;AX¡×³qª¾½X
.if ax==EN_CHANGE
.if r8w==IDE_S2
;§â½s¿è®Øªº¬í¼Æ¡AÂà´«¦¨¦h¤Ö®É¦h¤Ö¤À¦h¤Ö¬í
invoke GetDlgItemInt,hDlg,IDE_S2,0,0
xor edx,edx
div n3600
mov r8d,eax
mov eax,edx
xor rdx,rdx
div sixty
mov r10d,edx
invoke wsprintf,ADDR buffer,OFFSET szFmtHms,r8d,eax,r10d
invoke SetDlgItemText,hDlg,IDS_HMS,ADDR buffer
.endif
.endif
.else
xor rax,rax
ret
.endif
mov rax,1
ret
S2HProc ENDP
;-------------------------------------------------------------------------------
H2SProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL minute:QWORD,second:QWORD,buffer[20h]:WORD
.if uMsg==WM_COMMAND
mov rax,r8 ;R8W¡×ÃѧO½X
shr rax,16 ;AX¡×³qª¾½X
.if ax==EN_CHANGE
.if (r8w==IDE_HR1)||(r8w==IDE_MN1)||(r8w==IDE_SC1)
;§âIDE_HR1¡BIDE_MN1¡BIDE_SC1¤TÓ½s¿è®Ø¤º¥Nªí®É¡B¤À¡B¬íªº¼ÆÈ¡AÅܦ¨¬í¼Æ
mov second,RV(GetDlgItemInt,hDlg,IDE_SC1,0,0)
mov minute,RV(GetDlgItemInt,hDlg,IDE_MN1,0,0)
invoke GetDlgItemInt,hDlg,IDE_HR1,0,0
mul n3600
mov r8,rax
mov rax,minute
add r8,second
mul sixty
add r8d,eax
invoke wsprintf,ADDR buffer,OFFSET szFmtSec,r8d
invoke SetDlgItemText,hDlg,IDS_S1,ADDR buffer
.endif
.endif
.else
xor rax,rax
ret
.endif
mov rax,1
ret
H2SProc ENDP
;-------------------------------------------------------------------------------
DlgProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL tci:TCITEM,cxDlgInTab:DWORD,cyDlgInTab:DWORD,rcTab:RECT
.if uMsg==WM_COMMAND
mov rax,r8 ;R8W¡×ÃѧO½X
shr rax,16 ;AX¡×³qª¾½X
.if (ax==BN_CLICKED)&&(r8w==IDB_EXIT)
jmp exit
.endif
.elseif uMsg==WM_NOTIFY
ASSUME r11:PTR NMHDR
mov r11,lParam
mov rax,[r11].hwndFrom ;RAX¡×µo¥XWM_NOTIFYªº±±¨î¶µ¥N½X
.if rax==hTab
.if [r11].code==TCN_SELCHANGE
mov rax,SelItem
mova rcx,hSubDlg[rax*8]
invoke ShowWindow,rcx,SW_HIDE
invoke SendMessage,hTab,TCM_GETCURSEL,0,0
mov SelItem,rax
mova rcx,hSubDlg[rax*8]
invoke ShowWindow,rcx,SW_SHOW
.endif
.endif
ASSUME r11:NOTHING
.elseif uMsg==WM_INITDIALOG
invoke SendMessage,hDlg,WM_SETICON,ICON_SMALL,RV(LoadIcon,hInst,ICON_MAIN)
;«Ø¥ß¹Ï¹³¦Cªí¡A¨Ã©ó¨ä¤º·s¼WICON_HMS¡BICON_S¡BICON_HELP¤TӹϥÜ
mov hImgLst,RV(ImageList_Create,32,32,ILC_COLOR32 or ILC_MASK,3,0)
invoke ImageList_ReplaceIcon,hImgLst,-1,RV(LoadIcon,hInst,ICON_HMS)
invoke ImageList_ReplaceIcon,hImgLst,-1,RV(LoadIcon,hInst,ICON_S)
invoke ImageList_ReplaceIcon,hImgLst,-1,RV(LoadIcon,hInst,ICON_HELP)
;¨ú±o¼ÐÅÒ±±¨î¶µ¥N½X¡A¨Ã³]©w»P¤§¬ÛÃöÁpªº¹Ï¹³¦Cªí
mov hTab,RV(GetDlgItem,hDlg,IDT_TC)
invoke SendMessage,rax,TCM_SETIMAGELIST,0,hImgLst
;¦b¼ÐÅÒ±±¨î¶µ¤¤´¡¤J¤TÓ¶µ¥Ø¡A¡u®É¤À¬í¡÷¬í¡v¡B¡u¬í¡÷®É¤À¬í¡v¡B¡u»¡©ú¡v
mov tci.mask_,TCIF_TEXT or TCIF_IMAGE
lea r10,sz1st
mov tci.pszText,r10
mov tci.iImage,0
INVOKE SendMessage,hTab,TCM_INSERTITEM,0,ADDR tci
lea r10,sz2nd
mov tci.pszText,r10
mov tci.iImage,1
INVOKE SendMessage,hTab,TCM_INSERTITEM,1,ADDR tci
lea r10,sz3rd
mov tci.pszText,r10
mov tci.iImage,2
INVOKE SendMessage,hTab,TCM_INSERTITEM,2,ADDR tci
;pºâ¼ÐÅÒ±±¨î¶µÅã¥Ü°Ï°ì¥ª¤W¨¤ªº¦ì¸m¡A°O¿ý©órcTab¡AÅã¥Ü°Ï°ìªº¥ª¤W¨¤¦b¶µ¥Ø¤U¤è
invoke GetClientRect,hTab,ADDR rcTab
INVOKE SendMessage,hTab,TCM_ADJUSTRECT,FALSE,ADDR rcTab
;pºâ¹ï¸Ü²°µøµ¡ªº¼e«×»P°ª«×¡A¦s©ócxDlgInTab¡BcyDlgInTab
mov ecx,rcTab.right
mov edx,rcTab.bottom
sub ecx,rcTab.left
sub edx,rcTab.top
mov cxDlgInTab,ecx ;ECX¡×¼ÐÅÒ¤º¹ï¸Ü²°ªº¼e«×
mov cyDlgInTab,edx ;EDX¡×¼ÐÅÒ¤º¹ï¸Ü²°ªº°ª«×
;«Ø¥ß¡u®É¤À¬í¡÷¬í¡v¡B¡u¬í¡÷®É¤À¬í¡v¡B¡u»¡©ú¡v¤l¹ï¸Ü²°¡A¨Ã¨Ï¨ä²¾¨ì¾A·í¦ì¸m
mov hSubDlg,RV(CreateDialogParam,hInst,IDD_HMS2S,hTab,OFFSET H2SProc,0)
invoke MoveWindow,rax,rcTab.left,rcTab.top,cxDlgInTab,cyDlgInTab,0
mov hSubDlg[8],RV(CreateDialogParam,hInst,IDD_S2HMS,hTab,OFFSET S2HProc,0)
invoke MoveWindow,rax,rcTab.left,rcTab.top,cxDlgInTab,cyDlgInTab,0
mov hSubDlg[16],RV(CreateDialogParam,hInst,IDD_HELP,hTab,OFFSET HlpProc,0)
invoke MoveWindow,rax,rcTab.left,rcTab.top,cxDlgInTab,cyDlgInTab,0
;§â¡u»¡©ú¡v¼ÐÅÒ³]¬°³Q¿ï©wªº¡A¥BÅã¥Ü¡u»¡©ú¡v¤l¹ï¸Ü²°
invoke SendMessage,hTab,TCM_SETCURSEL,2,0
invoke ShowWindow,hSubDlg[16],SW_SHOW
.elseif uMsg==WM_CLOSE
exit: invoke EndDialog,hDlg,0
invoke ImageList_Destroy,hImgLst
.else
xor rax,rax ;¨ä¥L¥¼³B²zªº°T®§ªð¦^ FALSE
ret
.endif
mov rax,1 ;¤w³B²zªº°T®§¡Aªð¦^ TRUE
ret
DlgProc ENDP
;-------------------------------------------------------------------------------
main PROC
invoke InitCommonControlsEx,OFFSET iccex
mov hInst,RV(GetModuleHandle,0)
invoke DialogBoxParam,hInst,IDD_MAIN,0,OFFSET DlgProc,0
invoke ExitProcess,0
main ENDP
;*******************************************************************************
END main |
§â HMS2S.EXE.MANIFEST¡BHMS2S.RC¡BHMS2S.ASM¡Bclock.ico¡Bhms2s.ico¡Bs2hms.ico¡Bhelp.ico¡BMYFIX.INC ¤KÓÀɮשñ¦b¦P¤@¥Ø¿ý¡A¸g RC.EXE ½sĶ¸ê·½´yzÀÉ¡BUASM64.EXE ²ÕͲզX»y¨¥ì©l½X¡BLINK.EXE ³sµ²¶×¤Jµ{¦¡®w¡B¸ê·½ÀÉ¡B¥ØªºÀɤ§«á¡A´N¯à²£¥Í HMS2S.EXE¡C³o¤KÓÀɮפ¤¡A«e¤TÓ¬Oì©lµ{¦¡¡A¤w©ó«e±¦C¥X©Ò¦³¤º®e¡F²Ä¥|¡ã¤CÓÀɮ׬O¹Ï¥ÜÀÉ¡A¥i©ó¦¹³B¤U¸ü¡A¤]¥i¥H¦Û¤v»s§@¡FMYFIX.INC ¥i©ó¦¹³B¤U¸ü¡A¥¦¥Î¨Ó×¥¿ UASM64.EXE ²ÕĶ¥H MOV «ü¥O¦s¨ú°}¦Cªº¿ù»~¡A¨£ªþ¿ý¤G¡C
HMS2S ¦³¤TÓ¼ÐÅÒ¶µ¥Ø¡A¤À§O¹ïÀ³¤TÓ¤l¹ï¸Ü²°¡C¦b HMS2S.ASM ¤¤²Ä 45 ¦æ¡A©w¸q¤F hSubDlg °}¦C¡A¨ÓÀx¦s³o¤TÓ¤l¹ï¸Ü²°ªº¥N½X¡C³o¤TÓ¤l¹ï¸Ü²°¦b HMS2S.ASM ªº²Ä 174¡B176¡B178 ¤T¦æ«Ø¥ß¡A¥²¶·±Ä¥Î©I¥s CreateDialogParam ¤~¯à«Ø¥ß¤£±j¨î¦^À³¹ï¸Ü²°¡F·íµM¡A©I¥s CreateDialogParam ªº¦P®É¡A¤]n«ü©w¹ï¸Ü²°±ªO¥H¤Î¹ï¸Ü²°¨ç¦¡¡C¦b³o¤§«e¡A²Ä 163¡ã172 ¦æ¤wpºâ¥X¤l¹ï¸Ü²°¥ª¤W¨¤©Ò¦b®y¼Ð¡A¥H¤Î¼e«×»P°ª«×¡]©Ò¨Ï¥Î¤èªk«e±¤w±Ôz¹L¤F¡^¡A©Ò¥H¥i¥H¦b«Ø¥ß¦n¤l¹ï¸Ü²°«á¡Aª½±µ©I¥s MoveWindow §ïÅ܍䤨¤o¨Ã²¾¦Ü¥¿½T¦ì¸m¡C
hSubDlg °}¦C¥Î©óÀx¦s¤TÓ¤l¹ï¸Ü²°ªº¥N½X¡A©³¤U¨Ó¬Ý¬Ý³oÓ°}¦C¦p¦óÀx¦s¤l¹ï¸Ü²°¥N½X¡C
¹Ï¤T¬O¥Î x64dbg ¹ï HMS2S.EXE °£¿ù®Éªºµe±¡A¼Ð¥Ü㈮ªº¬O©I¥s CreateDialogParam «Ø¥ß²Ä¤@Ó¤l¹ï¸Ü²°ªºµ{¦¡½X¡C§â·Æ¹«´å¼Ð²¾¨ì㈮ªº¤U¨â¦æ¡]¤]´N¬O¦ì§} 0F51497h ³B¡A¼Ð¥Ü㈭©Ò¦bªºÂÅ¦â®Ø¤º¡^¡A«ö·Æ¹«¥ªÁäÂIÀ»¤@¦¸¡A¦A«öÁä½L¤Wªº¡uF2¡vÁä¡A±N¤¤Â_ÂI³]©ó¦¹³B¡C³o¼Ë°õ¦æ¨ì¦¹³B·|¤¤Â_°õ¦æ¡A´N¯à¬Ý¨ì CreateDialogParam ªº¦^¶ÇȦs©ó RAX ¼È¦s¾¹¤º¡A¥¦¥Nªí©Ò«Ø¥ßªº¤l¹ï¸Ü²°¥N½X¡C¦P¼Ë¦b¼Ð¥Ü㈬ªºÂÅ¦â®Ø¤º¶i¦æ¤@¼Ëªº¾Þ§@¡A³]¥ß¥t¤@Ó¤¤Â_ÂI¡C«ö¤U F9 Áä°õ¦æ¡A´N·|©ó¼Ð¥Ü㈭¤¤Â_ÂI³B°±¤î¡A³Ì¥ªÃä¼Ð¥Ü RIP¡A¥Nªíµ{¦¡§Y±N°õ¦æ¦¹¦æ¦ý©|¥¼°õ¦æ¡A¤]´N¬O¹Ï¤Tªºµe±¡C¹Ï¤T¬õ¦â®Øªº¦ì§} 0F55020h ¬O RAX n¦s¤Jªº¦ì§}¡A¸Ó¦ì§}¤]¬O hSubDlg °}¦Cªº¦ì§}¡A·Ç½T¦a»¡¬O hSubDlg °}¦C²Ä¹sÓ¤¸¯Àªº¦ì§}¡C¦pªG§A x64dbg ªº¸ê®ÆÅã¥Ü°Ï¤£¬O¦p¦¹¡A¥i¥H§â·Æ¹«´å¼Ð²¾¦Ü¼Ð¥Ü㈫ªºÂŦâ¤j®Ø¤º¡A¥H·Æ¹«¥ªÁäÂIÀ»¤@¦¸¡A«ö¤U Ctrl¡ÐG¡]¥ý«ö¦í Ctrl Á䤣©ñ¡A¦A«ö¤@¤U G Áä¡^¡A©ó¼u¥Xªº¹ï¸Ü²°¤º¿é¤J¡uF55020¡v¡A«ö½T»{«ö¶s¡A´N¥i¥H§â¸ê®Æ°ÏÅܦ¨¯à¬Ý¨ì hSubDlg ©Ò¦bªº½d³ò¡C³o®É´N¯à¬Ý¨ì¤W±µµ¦â®Ø¤ºªº RAX ¼ÆÈ 302C8h ¤w¦s¤J¦ì§} 0F55020h ³B¡AÅܦ¨¡uC8 02 03¡v¡C³o¬O¦]¬°¨Ì·Ó¤pºÝ§Ç±Æ¦C¡A©Ò¥H¤~§Î¦¨³oºØ¼Ë¤l¡C
¦A«ö¤@¦¸Áä½L¤Wªº F9 Áä¡A·|¨ì¼Ð¥Ü㈬ªº¤¤Â_ÂI°±¤U¨Ó¡C³o®É¡A²Ä¤GÓ¤l¹ï¸Ü²°¤w¸g«Ø¥ß¡A¨ä¥N½X¬° 702B6h¡]¨£¹Ï¥|¤W±ªº²`¬õ¦â®Ø¡^¡A¤]¤w¦s©ó hSubDlg °}¦Cªº²Ä¤@Ó¤¸¯À¦ì§}¡]0F55028h¡^³B¡C¦]¬°µøµ¡¥N½X»Ýn¤KӦ줸²ÕÀx¦s¡]¥ç§Y¥|¦r²Õ¡AQWORD¡^¡A©Ò¥H hSubDlg °}¦Cªø 24 Ӧ줸²Õ¡C¨ä¤¤²Ä¹sÓ¤¸¯À¥H hSubDlg[0] ©Î²¤Æ¬° hSubDlg ªí¥Ü¡A²Ä¤@Ó¤¸¯À¥H hSubDlg[8] ªí¥Ü¡A²Ä¤GÓ¤¸¯À¥H hSubDlg[16] ªí¥Ü¡C¦b HMS2S.ASM ²Ä 174¡B176¡B178 ¦æ¥i¥H¬Ý¨ì³o¼Ëªº¥Îªk¡C
¥t¥~¦b HMS2S.ASM ²Ä 128¡ã134 ¤]¦³Ãþ¦üªº¥Îªk¡A³o¬qµ{¦¡¬O³B²z¨Ï¥ÎªÌ¥Î·Æ¹«¥ªÁäÂIÀ»¼ÐÅҮɡA¤Á´«¤£¦P¤l¹ï¸Ü²°ªº¹Lµ{¡CHMS2S.ASM ¦b²Ä 44 ¦æ©w¸q¤F¹w³]Ȭ° 2 ªº SelItem ÅܼơAÅU¦W«ä¸q¡A¥¦¥Nªí¨Ï¥ÎªÌ¿ï¾Ü¤Fþ¤@Ó¼ÐÅÒ¶µ¥Ø¡C¨ä½d³ò¥u¯à¬O¦b 0¡ã2 ¤§¶¡ªº¾ã¼Æ¡G0 ¥Nªí¿ï¾Ü¡u®É¤À¬í¡÷¬í¡v¡B1 ¥Nªí¿ï¾Ü¡u¬í¡÷®É¤À¬í¡v¡B2 ¥Nªí¿ï¾Ü¡u»¡©ú¡v¡C
·í¨Ï¥ÎªÌ¿ï¾Ü¤F¬YÓ¼ÐÅÒ¶µ¥Ø®É¡A¦³¨â¨BÆJ»Ýn§¹¦¨¡G①À³¨Ï즳¼ÐÅÒ¶µ¥Ø¹ïÀ³ªº¤l¹ï¸Ü²°¤£Åã¥Ü¡B②Åã¥Ü·s¿ï¾Ü¼ÐÅÒ¶µ¥Ø¹ïÀ³ªº¤l¹ï¸Ü²°¡Cn§¹¦¨²Ä①¨BÆJ¡Aµ{¦¡½X¦p¤U¡G
mov rax,SelItem mova rcx,hSubDlg[rax*8] invoke ShowWindow,rcx,SW_HIDE
Á|Ó¨Ò¤l¨Ó»¡¡A¦pªGì¥ý¿ï¾Üªº¬O¡u»¡©ú¡v¡A¨º»ò SelItem µ¥©ó 2¡A°õ¦æ§¹¤Wz²Ä¤@¦æ«ü¥O«á¡ARAX µ¥©ó 2¡C²Ä¤G¦æ«ü¥Oªº RAX*8 ´Nµ¥©ó 16¡A©Ò¥H´N¥i¥H·Q¦¨¬O¡umova rcx,hSubDlg[16]¡v¡C¦]¬° UASM64.EXE ²ÕĶÃþ¦ü¡umov rcx,hSubDlg[rax*8]¡vªº«ü¥O¡A¤]´N¬O¥H MOV «ü¥O¦s¨ú°}¦C¤¤¬YÓ¤¸¯Àªº¼ÆÈ®É¡A·|µo¥Í¿ù»~¡C¦]¦¹¤p¤ì°¸¼¶¼g¤F mova ¥¨¶°¡Aª½±µ¥H¾÷±ñ½X¥N´À MOV «ü¥O¡A´N¤£·|µo¥Í¿ù»~¡A¸Ô±¡¨£ªþ¿ý¤G¡Cµ²½×´N¬O¡umova rcx,hSubDlg[16]¡v¨ä¹ê´N¬O¡umov rcx,hSubDlg[rax*8]¡v¡A¦ý¯àÁ×§K UASM64.EXE ²ÕĶ¿ù»~¡A«e´£¬On¸ü¤J MYFIX.INC¡C
¤Wzµ{¦¡³Ì«á¤@¦æ¨Ã¤£Ãø¡A©I¥s ShowWindow Åýì¥ýªº¤l¹ï¸Ü²°¤£Åã¥Ü¡C±µ¤U¨Ó¬O²Ä②¨B¡Cµ{¦¡¦b²Ä 131¡ã134 ¦æ¡A¦p¤U¡G
invoke SendMessage,hTab,TCM_GETCURSEL,0,0 mov SelItem,rax mova rcx,hSubDlg[rax*8] invoke ShowWindow,rcx,SW_SHOW
¤Wzµ{¦¡²Ä¤@¦æ¬O¥Î¨Ó¨ú±o¨Ï¥ÎªÌ¿ï¾Üþ¤@Ó¼ÐÅÒ¶µ¥Ø¡A¦s¤J SelItem «á¡A¥H¥¨¶° mova ¨ú¥X¦ì©ó hSubDlg °}¦C¤º·s¿ï¾Üªº¤l¹ï¸Ü²°¥N½X¡A¦A©I¥s ShowWindow Åã¥Ü¸Ó¤l¹ï¸Ü²°¡C
©³¤U¬O³o¤@³¹¥Î¨ìªº Win64 API¡C
ImageList_Create ¥Î©ó«Ø¥ß¹Ï¹³¦Cªí¡A¥¦ªºì«¬¬O¡G
invoke ImageList_Create,\ cx,\ ; width of image cy,\ ; height of image flags,\ ; the type of image list cInitial,\ ; number of images that the image list initially cGrow ; number of images by which the image list can grow
©³¤U»¡©ú³o¨Ç°Ñ¼Æ¡G
flags | ¼ÆÈ | »¡©ú |
ILC_COLOR | 0 | ¨Ï¥Î¹w³]ȫإ߹Ϲ³¦Cªí¡A³q±`¬O ILC_COLOR4¡A¦ý¦pªG¨Ï¥ÎªºÅã¥Ü¸Ë¸m¥i¯à¬O ILC_COLORDDB |
ILC_COLOR4 | 4 | ¨Ï¥Î¥|¦ì¤¸ÃC¦â¡A§Y 16 ¦â |
ILC_COLOR8 | 8 | ¨Ï¥Î¤K¦ì¤¸ÃC¦â¡A§Y 256 ¦â |
ILC_COLOR16 | 10h | ¨Ï¥Î¤Q¤»¦ì¤¸ÃC¦â¡A§Y 65536 ¦â |
ILC_COLOR24 | 18h | ¨Ï¥Î¤G¤Q¥|¦ì¤¸ÃC¦â¡A§Y¯u±m |
ILC_COLOR32 | 20h | ¨Ï¥Î¤G¤Q¥|¦ì¤¸ÃC¦â¡A§Y¯u±m¥[¤W£\³q¹D |
ILC_COLORDDB | 0FEh | »P¸Ë¸m¬ÛÃöªº¦ì¤¸¹Ï |
ILC_MASK | 1 | ¨ã¦³¦¹ºX¼Ðªº¹Ï¹³¦Cªí¤º¡A¨C±i¹Ï¹³³£¦³¨â±i¦ì¤¸¹Ï¡A¤@±i¬Oì¹Ï¡A¤@±i¬O§@¬°¾B¸nªº³æ¦â¶Â¥Õ¹Ï¡A¥i¨Ï¬Y¤@ºØÃC¦âÅܱo³z©ú |
ILC_MIRROR | 2000h | ¦b¥Ñ¥k¦Ü¥ªªº¨t²Î¤¤¡A¹Ï¹³¦Cªí¤ºªº©Ò¦³¹Ï¹³³£·|³QÃ蹳½Âà |
ILC_ORIGINALSIZE | 10000h | ¤¹³\¹Ï¹³¦Cªí±µ¨ü¤ñ³]©w¤Ø¤o§ó¤pªº¹Ï¹³¡A¦Óºû«ù¨äì©l¤Ø¤o |
ILC_PERITEMMIRROR | 8000h | ·í¤@¦¸´¡¤J¦hӹϹ³®É¡A¤¹³\³æ¿W¹ï¨CӹϹ³¶i¦æÃ蹳½Âà¡A¦Ó¤£¬OÃè¹³¾ãӹϹ³¦ê |
¦pªG ImageList_Create ¦¨¥\«Ø¥ß¹Ï¹³¦Cªí¡A¨º»ò¦^¶ÇȬO¹Ï¹³¦Cªí¥N½X¡F§_«h¦^¶ÇȬ°¹s¡C¦pªG¤£¦A»Ýn¹Ï¹³¦Cªíªº¸Ü¡AÀ³©I¥s ImageList_Destroy¡A±N¨ä¾P·´¡C¨Ò¦p©³¤Uªº¨Ò¤l¬O«Ø¥ß¤@¶}©l¯àÀx¦s 10 ±i 16¡Ñ16 ªº¹Ï¹³¦Cªí¡F¦pªG¤£¼Å¨Ï¥Îªº¸Ü¡A¨t²Î·|¦b¨C¦¸»ÝnÂX¥R®É¦Û°Ê¨C¦¸ÂX¥R¨â±i¡G
invoke ImageList_Create,16,16,ILC_COLOR16,10,2
ImageList_Destroy ¥Î©ó¾P·´¹Ï¹³¦Cªí¡A¨ä쫬¬°¡G
invoke ImageList_Destroy,\
himl ; handle to the image list to destroy
ImageList_Destroy ¥u¦³¤@ӰѼơAn¾P·´ªº¹Ï¹³¦Cªí¥N½X¡C¦pªG¦¨¥\¾P·´¡A¦^¶ÇȬ°¤@¡F§_«h¬°¹s¡C
n¦b¹Ï¹³¦Cªí¤¤²K¥[¦ì¤¸¹Ï¡]Bitmap¡^¡A¬O©I¥s ImageList_Add API¡A¦ý¬O ImageList_Add ¨ÃµLªk·s¼W¹Ï¥Ü©Î´å¼Ð¡A¦]¦¹¥u¯à¥ÎÅܳqªº¤è¦¡¡C¦Ó ImageList_ReplaceIcon ì¨Óªº¥\¯à¬O¡A¥Î¹Ï¥Ü©Î´å¼Ð¨Ó¨ú¥N¹Ï¹³¦Cªí¤¤ªº¹Ï¤ù¡C©Ò¥Hn·s¼W¹Ï¥Ü©Î´å¼Ð¡A©Î¬O¥H¹Ï¥Ü©Î´å¼Ð¨ú¥Nì¨Ó¦b¹Ï¹³¦Cªí¤ºªº¹Ï¤ù¡A³£¥i¥H©I¥s ImageList_ReplaceIcon¡A¨ä쫬¬°¡G
invoke ImageList_ReplaceIcon,\ himl,\ ; handle to the image list i,\ ; index of the image to replace hicon ; handle to the icon or cursor
³o¨Ç°Ñ¼Æªº·N¸q¦p¤U¡G
¦pªG°õ¦æ¦¨¥\¡A¦^¶ÇȬ°¹Ï¹³¯Á¤Þ¡A§_«h¬°¹s¡C
CreateDialogParam ±q¸ê·½¤¤ªº¹ï¸Ü²°±ªO«Ø¥ß¤£±j¨î¦^À³¹ï¸Ü²°¡]modeless dialog boxes¡^¡A¨ä쫬¦p¤U¡G
invoke CreateDialogParam,\ 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°Ñ¼Æ·N¸q¦p¤U¡G
¦pªG¦¨¥\«Ø¥ß¹ï¸Ü²°¡A¦^¶ÇȬO¹ï¸Ü²°ªºµøµ¡¥N½X¡F§_«h¦^¶ÇȬO¹s¡CCreateDialogParam ¶È¶È¦b°O¾ÐÅ餺«Ø¥ß¹ï¸Ü²°¡A¦ý¨Ã¤£·|§â¹ï¸Ü²°Åã¥Ü©ó¿Ã¹õ¤W¡FÀ³¥Îµ{¦¡n©I¥s ShowWindow ¨ÓÅã¥Ü¹ï¸Ü²°¡C¤£¦A¨Ï¥Î¹ï¸Ü²°«á¡AÀ³¥Îµ{¦¡n©I¥s DestroyWindow ²×µ²¹ï¸Ü²°¡C
¼ÐÅÒ±±¨î¶µªº·®æ¦p¤U¡G
·®æ | ¼ÆÈ | »¡©ú |
TCS_BOTTOM | 2 | ¦¹·®æ¨Ï¼ÐÅÒ¦ì©óÅã¥Ü°Ï°ìªº¤U±¡C |
TCS_BUTTONS | 100h | ¦¹·®æ±N¼ÐÅÒÅã¥Ü¬°«ö¶sªº¼Ë¤l¡A¥BÅã¥Ü°Ï°ì©P³ò¨S¦³®Ø½u¡C¨ã¦³¦¹·®æªº¼ÐÅÒ±±¨î¶µ¡A¬YÓ¼ÐÅÒ¦³¿é¤JµJÂI®É¨Ã¤£¤@©w³B©ó³Q¿ï¨úª¬ºA¡A¦]¬°¨Ï¥ÎªÌ¥i¥H¥Î¤è¦VÁäÅܧó¿é¤JµJÂI¡A¦ý¤£§ïÅܳQ¿ï¨úªº¼ÐÅÒ¡C¤£¨ã¦¹·®æ®É¡A¿é¤JµJÂI»P³Q¿ï¨úªº¼ÐÅÒ¬O¤@Pªº¡C |
TCS_FIXEDWIDTH | 400h | ©Ò¦³¼ÐÅÒªº¼e«×³£¬Û¦P¡A¤£¯à»P TCS_RIGHTJUSTIFY ·f°t¡C |
TCS_FLATBUTTONS | 8 | ¿ï¨úªº¼ÐÅÒ·|Åã²{¥W³´®ÄªG¡A¦Ó¨ä¥L«hµL¦¹®ÄªG¡C¦¹·®æ¥u·|¼vÅT¨ã¦³ TCS_BUTTONS ·®æªº¼ÐÅÒ±±¨î¶µ¡C |
TCS_FOCUSNEVER | 8000h | §Y¨Ï³B©ó¿ï¨úªº¼ÐÅÒ¡A¤]¤£·|¨Ï¼ÐÅÒ±±¨î¶µÀò±o¿é¤JµJÂI¡C |
TCS_FOCUSONBUTTONDOWN | 1000h | ¿ï¨ú¼ÐÅÒ¶µ¥Ø¡A·|¨Ï¼ÐÅÒ±±¨î¶µÀò±o¿é¤JµJÂI¡C |
TCS_FORCEICONLEFT | 10h | ¹Ï¥Ü·|¹ï»ô©T©w¼e«×¼ÐÅÒªº¥ª½t¡C¦¹·®æ¥u¯à»P TCS_FIXEDWIDTH ·f°t¨Ï¥Î¡C |
TCS_FORCELABELLEFT | 20h | ¼ÐÅÒ¤å¦r·|¦V¥ªÃä¹ï»ô¡C¦¹·®æ¥u¯à»P TCS_FIXEDWIDTH ·f°t¨Ï¥Î¡C |
TCS_HOTTRACK | 40h | ±Ò¥Î¼ÐÅÒ±±¨î¶µªº¼ö°lÂܮĪG¡A¥ç§Y·í·Æ¹«Äa°±¦b¼ÐÅÒ¦WºÙ¤W®É·|¦Û°Ê°ª«GÅã¥Ü¡Cªñ´Áªº Windows ·|¦Û°Ê±Ò¥Î¦¹¶µ¥\¯à¡C |
TCS_MULTILINE | 200h | ¦pªG¼ÐÅÒ¤Ó¦h¤@¦CÅã¥Ü¤£§¹¡A¥B¼ÐÅÒ±±¨î¶µ¨ã¦³¦¹·®æ®É¡A¼ÐÅÒ·|¥H¦h¦CÅã¥Ü¡F¦ý¦pªG¼ÐÅÒ¤Ó¦h¤@¦CÅã¥Ü¤£§¹¡A«o¨S«ü©w TCS_MULTILINE¡A¨º»ò¶ÈÅã¥Ü¤@¦C¼ÐÅÒ¡A¨Ã©ó³Ì¥kÃä¥H½bÀYªí¥ÜÁÙ¦³¨ä¥L¼ÐÅÒ¡A¨Ï¥ÎªÌ¥i¥H«ö½bÀY¡AÅã¥Ü¨ä¾l¼ÐÅÒ¡C¦pªG¼ÐÅҫܤ֯à¤@¦CÅã¥Ü§¹¡A§Y¨Ï¦³¦¹·®æ¡A¤]¶È¶ÈÅã¥Ü¤@¦C¡C |
TCS_MULTISELECT | 4 | «ö¦í Ctrl Áä®É¥i¿ï¨ú¦hÓ¼ÐÅÒ¡A¥²¶·»P TCS_BUTTONS ·f°t¡C |
TCS_OWNERDRAWFIXED | 2000h | ¾Ö¦³ªÌø»s¼ÐÅÒ±±¨î¶µ¡A¤]´N¬O¥ÑÀ³¥Îµ{¦¡¡A¦Ó¤£¬O¨t²Î¡Aø»s¼ÐÅÒ±±¨î¶µ¡C |
TCS_RAGGEDRIGHT | 800h | Åã¥Ü¦h¦C¼ÐÅҮɡA¨ã¦³¦¹·®æªº¼ÐÅÒ±±¨î¶µ©ÒÅã¥Üªº¼ÐÅÒ¦WºÙ¼e«×ºû«ù컪¡A¤£·|©µ¦ù¦Ü¹ï»ô±±¨î¶µ¥k½t©Î¤U½t¡]¨ã¦³ TCS_VERTICAL ·®æ¡^¡C |
TCS_RIGHT | 2 | ¼ÐÅÒ·|¥H««ª½¤è¦¡Åã¥Ü¦b¼ÐÅÒ±±¨î¶µ¥k°¼¡A¥²¶··f°t TCS_VERTICAL¡C |
TCS_RIGHTJUSTIFY | 0 | Åã¥Ü¦h¦C¼ÐÅҮɡA¨ã¦³¦¹·®æªº¼ÐÅÒ±±¨î¶µ©ÒÅã¥Üªº¼ÐÅÒ¼e«×·|¥Ñ¨t²Î½Õ¾ã¡A¨Ï¨C¦C©µ¦ù¦Ü¹ï»ô±±¨î¶µ¥k½t¡F¦pªG¨ã¦³ TCS_VERTICAL¡A´N¹ï»ô±±¨î¶µ¤U½t¡C¦¹·®æ¬°¹w³]¡A¦]¦¹¦h¦C¼ÐÅÒ¡A§Y¨Ï¥¼«ü©w¦¹·®æ¡A¤]·|¹ï»ô¥k½t©Î¤U½t¡A°£«D«ü©w TCS_RAGGEDRIGHT¡C |
TCS_SCROLLOPPOSITE | 1 | ·í¨Ï¥ÎªÌ¿ï¨ú¦h¦C¼ÐÅÒªº¨ä¤¤¤@ӮɡA¹w³]±¡§Î¡A¨t²Î·|±N¥¼ºò¾FÅã¥Ü°Ï°ìªº¼ÐÅÒ²¾¦Ü¶È¾aÅã¥Ü°Ï°ì¡F°²¦p«ü©w¦¹·®æ¡A¨t²Î¤£·|²¾°Ê¿ï¨úªº¼ÐÅÒ¡A¤Ï¦Ó±N¦bÅã¥Ü°Ï°ì»P³Q¿ï¨ú¼ÐÅÒ¤§¶¡ªº©Ò¦³¼ÐÅÒ²¾¦ÜÅã¥Ü°Ï°ì¹ï±³B¡C |
TCS_SINGLELINE | 0 | ¶ÈÅã¥Ü¤@¦C¼ÐÅÒ¡C¦¹¬°¹w³]·®æ¡A¦pªG¼ÐÅÒ¤Ó¦hµLªk²¾¦CÅã¥Ü§¹¡A·|©ó³Ì¥kÃä¥H½bÀYªí¥Ü¡F°£«D«ü©w TCS_MULTILINE¡A¤~·|Åã¥Ü¦h¦C¡C |
TCS_TABS | 0 | ¹w³]ªº·®æ¡AÅã¥Ü¼Ð·Çªº¼ÐÅÒ±±¨î¶µ¡A¨Ò¦p¦³®Ø½u¡AÅã¥Ü°Ï°ìI´º»P³Q¿ï¨úªº¼ÐÅÒ¦WºÙI´º¦P¦â¡C¦pªG«ü©w¤F TCS_BUTTONS¡A¨º»òÅã¥Ü°Ï°ì´N¨S¦³®Ø½u¡C |
TCS_TOOLTIPS | 4000h | ¼ÐÅÒ±±¨î¶µ¨ã¦³¬ÛÃöªº¤u¨ã´£¥Ü±±¨î¶µ¡C |
TCS_VERTICAL | 80h | ¹]ÁèÅã¥Ü¼ÐÅÒ¡C¹w³]ªº±¡§Î¬O¡A¼ÐÅÒ¦bÅã¥Ü°Ï°ì¥ª°¼¡A°£«D¦P®É¨ã¦³ TCS_RIGHT¡A¨º»ò¤~·|Åã¥Ü¦b¥k°¼¡C |
TCS_BOTTOM »P TCS_RIGHT ¼ÆÈ¬Û¦P¡A¨M©w¼ÐÅÒ¦bÅã¥Ü°Ï°ìªº¤U¤èÁÙ¬O¥k¤è¡A±o¥Ñ¬O§_¦³ TCS_VERTICAL ¨M©w¡FY¤£¨ã TCS_VERTICAL¡A¨º»ò´N¦b¤U¤è¡A§_«h¦b¥k¤è¡C¦P²z¡ATCS_TABS¡BTCS_SINGLELINE¡BTCS_RIGHTJUSTIFY ªº¼ÆÈ³£¬O¹s¡A¥¦Ì³£¬O¹w³]È¡F»P¥¦Ì¬Û¹ïªº¬O TCS_BUTTON¡BTCS_MULTILINE¡BTCS_RAGGEDRIGHT¡A©Ò¥H°£«D«ü©w«á±ªº¤TºØ·®æ¡A§_«h³£±Ä¥Î¹w³]È¡C
¼ÐÅÒ±±¨î¶µªº³qª¾½X¬O¸g¥Ñ WM_NOTIFY °T®§¶Ç¨ìµøµ¡¨ç¦¡¡AÂÇ¥H§iª¾µøµ¡¨ç¦¡©Î¹ï¸Ü²°¨ç¦¡¨Ï¥ÎªÌ¶i¦æ¤F¤°»ò¾Þ§@¡Aµøµ¡¨ç¦¡©Î¹ï¸Ü²°¨ç¦¡¥i¥H°w¹ï³o¨Æ¥ó¥[¥H³B²z¡CWM_NOTIFY °T®§¤¤ªº lParam ¬O NMHDR µ²ºcÅé¦ì§}¡A¸Óµ²ºcÅ骺 code Äæ¦ì´N¬O³qª¾½X¡C¼ÐÅÒ±±¨î¶µªº³qª¾½X¦³¤U±´XºØ¡G
³qª¾½X | ¼ÆÈ | »¡©ú |
NM_RELEASEDCAPTURE | ¡Ð16 | ·Æ¹«®·®»¡]mouse capture¡^¬O«ü¤@Ó±±¨î¶µ¡u®·®»¡v¤F·Æ¹«¿é¤J¡A´Nºâ·Æ¹«´å¼Ð²¾°Ê¨ì¸Ó±±¨î¶µªº°Ï°ì¤§¥~¡A¸Ó±±¨î¶µ¤´µM·|«ùÄò±µ¦¬·Æ¹«°T®§¡A¨Ò¦p·Æ¹«²¾°Ê¡B«öÁäÄÀ©ñµ¥°T®§¡C·í¼ÐÅÒ±±¨î¶µ¥¿¦bÄÀ©ñ·Æ¹«®·®»¡A·|±N NM_RELEASEDCAPTURE ¶Çµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡C |
TCN_FOCUSCHANGE | ¡Ð554 | ¨ã¦³ TCS_BUTTONS ·®æªº¼ÐÅÒ±±¨î¶µ¡A¦]¬°«ö¤U Tab Áä©Î¤è¦VÁä¨Ï¨ä±o¨ì©Î¥¢¥h¿é¤JµJÂI®É¡A·|±N¦¹³qª¾½X¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡C |
TCN_GETOBJECT | ¡Ð553 | ·í¨Ï¥ÎªÌ¥Î·Æ¹«©ì©ñª«¥ó¡A§âª«¥ó²¾¨ì¨ã¦³ TCS_EX_REGISTERDROP ©µ¦ù·®æªº¼ÐÅÒ±±¨î¶µªº¼ÐÅÒ¤W±¡A·|±N¦¹³qª¾½X¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡Cµøµ¡¨ç¦¡³B²z§¹«á¡A¥²¶·¶Ç¦^¹s¡C |
TCN_KEYDOWN | ¡Ð550 | ·í¨Ï¥ÎªÌ«ö¤UÁä½L¤Wªº¬YÓ«öÁä¡A·|±N¦¹³qª¾½X¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡C |
TCN_SELCHANGE | ¡Ð551 | ·í¨Ï¥ÎªÌÅܧó¿ï¨úªº¼ÐÅÒ¡A¦ý¨t²Î¤w³B²z§¹¦¹¨Æ¥ó¡A·|±N¦¹³qª¾½X¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡C |
TCN_SELCHANGING | ¡Ð552 | ·í¨Ï¥ÎªÌÅܧó¿ï¨úªº¼ÐÅÒ¡A¦ý¨t²Î©|¥¼³B²z¦¹¨Æ¥ó¡A·|±N¦¹³qª¾½X¶Ç°eµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡C |
¼ÐÅÒ±±¨î¶µªº³qª¾½X¬Ò¬°tÈ¡C¹³ TCN_KEYDOWN ¤§È¬°¡Ð550¡A´«ºâ¬°Âù¦r²Õ¤Q¤»¶i¦ì¬° 0FFFFFDDAh¡FTCN_SELCHANGE ¤§È¬°¡Ð551¡A´«ºâ¬°Âù¦r²Õ¤Q¤»¶i¦ì¬° 0FFFFFDD9h¡C¤Wªí¤¤¥u¦³ TCN_GETOBJECT¡BTCN_SELCHANGING n±N¦^¶Çȶǵ¹¨t²Î¡A¨ä¾l³qª¾½X§¡¤£¶·±N¦^¶Çȶǵ¹¨t²Î¡C
·í¼ÐÅÒ±±¨î¶µµo¥X TCN_GETOBJECT¡BTCN_KEYDOWN ³qª¾½X®É¡AWM_NOTIFY °T®§ªº lParam ©Ò«ü¦ì§}¤W¨Ã«D NMHDR µ²ºcÅé¡A¦Ó¬O¥]§t¤ñ NMHDR µ²ºcÅé§ó¤jªºµ²ºcÅé¡C¥¦Ì¤À§O¬O NMOBJECTNOTIFY ©M NMTCKEYDOWN¡A¨äÄæ¦ì¦p¤U¡C¦ý¶W¹L¥»³¹©Òn½Í½×ªº½d³ò½g´T¤Ó¤j¤F¡A¤£¦A²Ó»¡¡C
NMOBJECTNOTIFY STRUCT hdr NMHDR <> iItem DWORD ? ifdef __IID_DEFINED__ piid DWORD ? else piid DWORD ? endif pObject DWORD ? hResult HRESULT ? dwFlags DWORD ? NMOBJECTNOTIFY ENDS |
NMTCKEYDOWN STRUCT hdr NMHDR <> wVKey WORD ? ;µêÀÀÁä½X flags DWORD ? ;»PWM_KEYDOWNªºlParam·N¸q¬Û¦P NMTCKEYDOWN ENDS |
·í¨Ï¥ÎªÌ§â·Æ¹«´å¼Ð²¾¨ì¥¼¿ï¨úªº¼ÐÅÒ¤W±¡A¦A¥H·Æ¹«¥ªÁäÂIÀ»¸Ó¼ÐÅÒ¡A¦¹¨è¨t²Î©|¥¼³B²z¿ï¨ú·s¼ÐÅÒªº¤Á´«¤u§@®É¡A´N·|µo¥X TCN_SELCHANGING¡C¤÷µøµ¡ªºµøµ¡¨ç¦¡¦¬¨ì TCN_SELCHANGING ³qª¾½X«á¡AÀ³¥Îµ{¦¡¥i¥H¨M©w¬O§_Åý¨t²ÎÄ~Äò§¹¦¨¤Á´«¤u§@¡AÁÙ¬Onº¡¨¬¬Y¨Ç±ø¥ó¤~¯à¤Á´«¡G①¦pªGµøµ¡¨ç¦¡¶Ç¦^ TRUE¡A«h¨ú®ø¤Á´«¡A´N¤£·|µo°e TCN_SELCHANGE¡F②¦pªG¶Ç¦^ FALSE¡A«h¤¹³\¤Á´«¡A«Ý¨t²Î§¹¦¨¤Á´«¤u§@«á¡A·s¿ï¨úªº¼ÐÅÒ¤w¦¨¬°³Q¿ï¨úª¬ºA¡A¤~µo¥X TCN_SELCHANGE¡C¦pªGµøµ¡¨ç¦¡¤£³B²z TCN_SELCHANGING¡A¹w³]ªºµ²ªG¬O¶Ç¦^ FALSE¡A¤]´N¬O¤¹³\¨t²Î¤Á´«¬°·s¿ï¨úªº¼ÐÅÒ¡C°²¦p¨Ï¥ÎªÌÂIÀ»·í«e¤w¿ï¨úªº¼ÐÅÒ¡A¤]´N¬O¨S¦³Åܧó¿ï¨ú¼ÐÅÒ¡A¨º´N¤£·|µo¥X TCN_SELCHANGING¡A¤]¤£·|µo¥X TCN_SELCHANGE¡C
¼ÐÅÒ±±¨î¶µªº°T®§¦p¤U¡G
°T®§ | »¡©ú | wParam | lParam | ¦^¶ÇÈ |
TCM_ADJUSTRECT 1328h | ¤wª¾Åã¥Ü°Ï°ì¤j¤p¡Apºâ¼ÐÅÒ±±¨î¶µ¤Ø¤o¡F©Î¤Ï¹L¨Ó¡C¸Ô±¡¨£«e± | Y¬°¤@¡Aªí¥Ü¤wª¾Åã¥Ü°Ï°ì¡Apºâ±±¨î¶µ¤Ø¤o¡F§_«h¬°¹s | RECT µ²ºcÅé¦ì§} | µL |
TCM_DELETEALLITEMS 1309h | §R°£©Ò¦³¼ÐÅÒ¶µ¥Ø | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_DELETEITEM 1308h | §R°£¬YÓ¼ÐÅÒ¶µ¥Ø | n§R°£ªº¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_DESELECTALL 1332h | ±Nª¬ºA¬° TCIS_BUTTONPRESSED ªº¼ÐÅÒ³]¬°¥¼³Q¿ï¨ú | Y¬°¹s¡A©Ò¦³¼ÐÅÒ³£³]¬°¥¼¿ï¨ú¡FY¬°¤@¡A°£¤F¥Ø«e¿ï¨úªº¼ÐÅÒ¤§¥~¡A¨ä¾l³£³]¬°¥¼¿ï¨ú | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | µL |
TCM_GETCURFOCUS 132Fh | ¨ú±o¨ã¦³¿é¤JµJÂIªº¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¨ã¦³¿é¤JµJÂIªº¶µ¥Ø¯Á¤Þ |
TCM_GETCURSEL 130Bh | ¨ú±o³Q¿ï¨úªº¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ³Q¿ï¨úªº¶µ¥Ø¯Á¤Þ |
TCM_GETEXTENDEDSTYLE 1335h | ¨ú±o©µ¦ù·®æ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ©µ¦ù·®æ |
TCM_GETIMAGELIST 1302h | ¨ú±o»P¼ÐÅÒ±±¨î¶µ¬ÛÃöªº¹Ï¹³¦Cªí | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¹Ï¹³¦Cªí¥N½X |
TCM_GETITEM 1305h ©Î 133Ch | ¨ú±o¼ÐÅÒ¶µ¥Øªº¸ê®Æ¡C1305h ¬° ANSI ª©¡A133Ch ¬°¼e¦r¤¸ª© | ¶µ¥Ø¯Á¤Þ | TCITEM µ²ºcÅé¦ì§} | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_GETITEMCOUNT 1304h | ¨ú±o¼ÐÅÒ¶µ¥ØÓ¼Æ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¼ÐÅÒ¶µ¥ØÓ¼Æ |
TCM_GETITEMRECT 130Ah | ¨ú±o¼ÐÅÒªº¯x§Î½d³ò | ¼ÐÅÒ¶µ¥Ø¯Á¤Þ | RECT µ²ºcÅé¦ì§} | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_GETROWCOUNT 132Ch | ¨ú±o¼ÐÅÒ¦@¦³´X¦C | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¼ÐÅÒ¦C¼Æ |
TCM_GETTOOLTIPS 132Dh | ¨ú±o»P¼ÐÅÒ±±¨î¶µ¬ÛÃöªº¤u¨ã´£¥Ü±±¨î¶µ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤u¨ã´£¥Ü¥N½X |
TCM_GETUNICODEFORMAT 2006h | ¨ú±o±±¨î¶µ¬O§_¨Ï¥Î¸U°ê½X | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | Y¬°¤@ªí¥Ü¨Ï¥Î¸U°ê½X¡F§_«h¨Ï¥Î ANSI ¦r¤¸ |
TCM_HIGHLIGHTITEM 1333h | ³]©w¬YÓ¼ÐÅÒ¬°°ª«G«×Åã¥Ü¡C¦ý¦b Comctl32.dll 6.0 ª©¤Î¨ä«áª©¥»¨S¦³®ÄªG | ¼ÐÅÒ¶µ¥Ø¯Á¤Þ | ³]¬°¤@¡A¨Ï¥Î°ª«G«×¡F³]¬°¹s¡A¬°¥¿±`ª¬ºA | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_HITTEST 130Dh | §PÂ_¬YÓ¤u§@°Ï®y¼Ð¦ì©óþÓ¼ÐÅÒ½d³ò¤º | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | TCHITTESTINFO µ²ºcÅ骺¦ì§} | ®y¼Ð©Ò¦bªº¼ÐÅÒ¡FY®y¼Ð¤£¦b¥ô¦ó¼ÐÅÒ¤º¶Ç¦^¡Ð1 |
TCM_INSERTITEM 1307h ©Î 133Eh | ¦b¼ÐÅÒ±±¨î¶µ¤¤´¡¤J·sªº¼ÐÅÒ¶µ¥Ø¡C1307h ¬° ANSI ª©¡A133Eh ¬°¼e¦r¤¸ª© | ·sªº¼ÐÅÒ¶µ¥Ø¯Á¤Þ | TCITEM µ²ºcÅé¦ì§} | Y¦¨¥\¡A¦^¶ÇȬ°¤@¡F§_«h¬°¡Ð1 |
TCM_REMOVEIMAGE 132Ah | ²¾°£»P¼ÐÅÒ±±¨î¶µ¬ÛÃöÁpªº¹Ï¹³¦Cªí¤¤ªº¬YӹϹ³ | ¼ÐÅÒ¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | µL |
TCM_SETCURFOCUS 1330h | ³]©w¬YÓ¼ÐÅÒ¶µ¥Ø¨ã¦³¿é¤JµJÂI | n³]¬°¨ã¦³¿é¤JµJÂIªº¼ÐÅÒ¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | µL |
TCM_SETCURSEL 130Ch | ³]©w¬YÓ¼ÐÅÒ¬°³Q¿ï¨úªº¡AY³]©w¦¨¥\¤£·|µo°e TCN_SELCHANGING ©Î TCN_SELCHANGE ³qª¾½X | n³]¬°³Q¿ï¨úªº¼ÐÅÒ¶µ¥Ø¯Á¤Þ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¦pªG¦¨¥\³]©w¡A¦^¶ÇȬ°ì¥ý³Q¿ï¨úªº¶µ¥Ø¯Á¤Þ¡F¦pªG¥¢±Ñ¡A¦^¶ÇȬ°¡Ð1 |
TCM_SETEXTENDEDSTYLE 1334h | ³]©w¼ÐÅÒ±±¨î¶µ©µ¦ù·®æ | ¬Y¨Ç¦ì¤¸ªº©µ¦ù·®æ¤£¨ü¼vÅT | ©µ¦ù·®æ | Y³]©w¦¨¥\¡A¦^¶ÇȬ°ì¥ýªº©µ¦ù·®æ¡F§_«h¬°¡Ð1 |
TCM_SETIMAGELIST 1303h | ³]©w»P¼ÐÅÒ±±¨î¶µ¬ÛÃöÁpªº¹Ï¹³¦Cªí | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ¹Ï¹³¦Cªí¥N½X | ¶Ç¦^ì¥ý¹Ï¹³¦Cªí¥N½X¡FY¨S¦³«h¶Ç¦^¹s |
TCM_SETITEM 1306h ©Î 133Dh | ³]©w¼ÐÅÒ¶µ¥Øªº¸ê®Æ¡C1305h ¬° ANSI ª©¡A133Ch ¬°¼e¦r¤¸ª© | ¶µ¥Ø¯Á¤Þ | TCITEM µ²ºcÅé¦ì§} | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_SETITEMEXTRA 130Eh | ³]©wÀ³¥Îµ{¦¡¦Û¦æ©w¸qªº¸ê®Æ¦ì¤¸²ÕÓ¼Æ | ¦ì¤¸²ÕÓ¼Æ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | Y¦¨¥\¦^¶ÇȬ°¤@¡F§_«h¬°¹s |
TCM_SETITEMSIZE 1329h | ³]©w¼ÐÅÒªº¼e«×©M°ª«×¡]Y©Ò³]©wªº¼e«×¤p©ó¹Ï¹³¦Cªí¤¤¹Ï¹³ªº¼e«×¡A¨º»ò·|Åܬ°¤j©ó¹Ï¹³¼e«×ªº³Ì¤pÈ¡^ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | 0¡ã15 ¦ì¤¸¥Nªí¼e«×¡A16¡ã31 ¦ì¤¸¥Nªí°ª«×¡A³æ¦ì¬O¹³¯À | 즳ªº¼e«×¡]0¡ã15 ¦ì¤¸¡^»P°ª«×¡]16¡ã31 ¦ì¤¸¡^ |
TCM_SETMINTABWIDTH 1331h | ³]©w¨CÓ¼ÐÅÒªº³Ì¤p¼e«× | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ³Ì¤p¼e«×¡A³æ¦ì¬O¹³¯À¡F¦pªG³]¦¨¡Ð1ªí¥Ü¨Ï¥Î¹w³]È | ì¥ýªº³Ì¤p¼e«× |
TCM_SETPADDING 132Bh | ³]©w¼ÐÅÒ¤¤¨CӹϥܩM¼ÐÅÒ¤å¦r©P³òªºªÅ¥Õ¤j¤p | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | 0¡ã15 ¦ì¤¸¥Nªí¤ô¥¤è¦VªºªÅ¥Õ¤j¤p¡A16¡ã31 ¦ì¤¸¥Nªí¹]Áè¤è¦VªÅ¥Õ¤j¤p¡A³æ¦ì¬O¹³¯À | µL |
TCM_SETTOOLTIPS 132Eh | ³]©w»P¼ÐÅÒ±±¨î¶µ¬ÛÃöÁpªº¤u¨ã´£¥Ü | ¤u¨ã´£¥Ü¥N½X | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | µL |
TCM_SETUNICODEFORMAT 2005h | ³]©w¼ÐÅÒ±±¨î¶µ¬O§_¨Ï¥Î¸U°ê½X | ¤@¥Nªí¨Ï¥Î¸U°ê½X¡A¹s¥Nªí¨Ï¥Î ANSI ¦r¤¸ | ¤£¨Ï¥Î¡AÀ³³]¬° 0 | ì¥ýªº¦r¤¸½s½X¡A¤@¥Nªíì¨Ó¨Ï¥Î¸U°ê½X¡A¹s¥Nªíì¥ý¨Ï¥Î ANSI ¦r¤¸ |
¹ï¼ÐÅÒ±±¨î¶µ°e¥X TCM_REMOVEIMAGE ®É¡A§R°£ªº¬O»P¨äÃöÁp¹Ï¹³¦Cªí¤ºªº¹Ï¹³¡C¦pªG¸Ó¹Ï¹³«ê¦n¬O¦b¬YÓ¼ÐÅÒ¶µ¥Ø¤Wªº¹Ï¹³¡A¨º»ò¸Ó¼ÐÅÒ¶µ¥Ø¤Wªº¹Ï¹³·|®ø¥¢¡A¦Ó¨ä¥L¼ÐÅÒ¶µ¥Ø¤Wªº¹Ï¹³¤£ÅÜ¡F¦ý³o®É¹Ï¹³¦Cªí¤º¡A¦b§R°£¹Ï¹³¤§«áªº¯Á¤ÞȤwµM§ïÅÜ¡A©Ò¥H¦pªG¤§«á¦A§â¹Ï¹³³]¬°¼ÐÅÒ¶µ¥Øªº¹Ï¹³®É¡A¶·±Ä¥Î·sªº¯Á¤ÞÈ¡C
TCM_HITTEST ª½Ä¶¬O©R¤¤´ú¸Õ¡A·N«ä¬O´ú¸Õ¬Y¤@¹³¯Àªº®y¼Ð¬O§_¦b¬YÓ¼ÐÅÒ¦WºÙ¤º¡A¦bÅã²{§Ö±¶¥\¯àªí¡B©ì©ñ¥\¯à®É·|»Ýn¥Î¨ì¡CÁöµM¦b·L³nºô¯¸¤W»¡¡A³oùتº®y¼Ð¬O«ü¿Ã¹õ®y¼Ð¡A¦ý¹ê»Ú´ú¸Õµ²ªG¬O°w¹ï¤u§@°Ï¥ª¤W¨¤¬°ìÂIªº¤u§@°Ï®y¼Ð¡C¦Ó¹³¯Àªº¤u§@°Ï®y¼Ð¬O¦s©ñ©ó lParam ©Ò«ü¦ì§}¤Wªº TCHITTESTINFO µ²ºcÅé¡A¦¹µ²ºcÅ骺¦UÄæ¦ì¦p¤U¡G
TCHITTESTINFO STRUCT pt POINT <> ;n´ú¸Õªº¤u§@°Ï®y¼Ð flags DWORD ? ;´ú¸Õµ²ªG TCHITTESTINFO ENDS
pt ¬On´ú¸Õªº¤u§@°Ï®y¼Ð¡Aflags ¬O´ú¸Õ«áµ²ªG¡A¥i¯àªºµ²ªG¦p¤Uªí¡G
flags | ¼ÆÈ | »¡©ú |
TCHT_NOWHERE | 1 | ®y¼Ð¤£¦b¥ô¦ó¤@Ó¼ÐÅÒ¦WºÙ¤W |
TCHT_ONITEMICON | 2 | ®y¼Ð¦ì©ó¼ÐÅÒ¦WºÙªº¹Ï¥Ü¤W |
TCHT_ONITEMLABEL | 4 | ®y¼Ð¦ì©ó¼ÐÅÒ¦WºÙªº¤å¦r¤W |
TCHT_ONITEM | 6 | ®y¼Ð¦ì©ó¬YÓ¼ÐÅÒ¦WºÙ¤º¡A¦ý¤£¦b¹Ï¥Ü¤W¡A¤]¤£¦b¤å¦r¤W¡C¦pªG¬O¾Ö¦³ªÌø»sªº¼ÐÅÒ±±¨î¶µ¡A¥un®y¼Ð¦ì©ó¼ÐÅÒ¦WºÙ¤¤¡A¤£½×¬O¤£¬O¦b¹Ï¥Ü©Î¤å¦r¤W¡Aflags ³£·|¬O³oÓÈ |
¹ï¼ÐÅÒ±±¨î¶µµo¥X TCM_SETITEMEXTRA °T®§¡A¥i¥HÂX¥RÀ³¥Îµ{¦¡¦Û¦æ©w¸qªº¸ê®Æ¤j¤p¡C쥻¹w³]ȬO 4 Ӧ줸²Õ¡A¦s©ñ©ó TCITEM ªº lParam Äæ¦ì¡A¦ý¬O¦pªG¤£¼Å¨Ï¥Î¡A¥i¥H§Q¥Î TCM_SETITEMEXTRA °T®§¥[¥HÂX¥R¡C
¦b¶i¦æÂX¥R¤§«á¡A¨Ï¥Î TCM_INSERTITEM¡BTCM_GETITEM¡BTCM_SETITEM °T®§¶i¦æ´¡¤J¡BÀò±o¡B³]©w¼ÐÅÒ¶µ¥Ø®É¡A´NµLªk¨Ï¥Î TCITEM µ²ºcÅé¤F¡A¥²¶·¦Û¦æ©w¸q·sªºµ²ºcÅé¡C¦Ó³oÓ·sªºµ²ºcÅ骺²Ä¤@ÓÄæ¦ì¥²¶·¬O TCITEMHEADER µ²ºcÅé¡A¨ä¾lÄæ¦ì¥ÑÀ³¥Îµ{¦¡©w¸q¡A¦Ó¥B¨ä¾lÄæ¦ìÁ`¦@¦³¦h¤Ö¦ì¤¸²Õ¡A¥²¶·»P TCM_SETITEMEXTRA °T®§ªº wParam «ü©wªº¦ì¤¸²Õ¼Æ¬Û²Å¡C©³¤U¬O TCITEMHEADER »P¤p¤ì°¸¥ô·NÁ|ªº¨Ò¤l¡AMY_TCITEM µ²ºcÅé¡C¦b·sªºµ²ºcÅéùØ¡A©w¸q¤F¨âÓ·sªºÄæ¦ì¸ê®Æ¡G
TCITEMHEADER µ²ºcÅé | ·sªº MY_TCITEM µ²ºcÅé |
TCITEMHEADER STRUCT 8 mask_ DWORD ? ;«ü©wþÓÄæ¦ì¦³®ÄªººX¼Ð lpReserved1 DWORD ? ;«O¯d lpReserved2 DWORD ? ;«O¯d pszText LPSTR ? ;¦r¦ê¦ì§} cchTextMax DWORD ? ;¦r¦êªø«× iImage DWORD ? ;¹Ï¹³¯Á¤Þ TCITEMHEADER ENDS |
MY_TCITEM STRUCT 8 tcihd TCITEMHEADER <> MyData DWORD ? ;¦Û¦æ©w¸qªº¸ê®Æ MyName DB 20h DUP (?) ;¦Û¦æ©w¸qªº¸ê®Æ MY_TCITEM ENDS |
TCM_SETITEMSIZE »P TCM_SETMINTABWIDTH ¤£¤Ó¬Û¦P¡CTCM_SETITEMSIZE ¥Î©ó³]©w¨ã¦³ TCS_FIXEDWIDTH ©Î TCS_OWNERDRAWFIXED ·®æªº¼ÐÅÒ±±¨î¶µ¡A©Ò¦³¼ÐÅÒªº¤Ø¤o³£·|Åܱo¬Û¦P¡A§Y¨Ï¬Y¨Ç¼ÐÅÒ¤å¦r¤£°÷®e¯Ç¤]¤@¼Ë¡A¶W¹Lªº³¡¤À´NµLªk¬Ý¨£¡F¦pªG³£¤£¨ã³o¨âºØ·®æªº¨ä¤¤¤@ºØ¡A¨º»ò¼ÐÅÒ¼e«×µLªk¥¿±`³]©w¡A¦ý°ª«×«o¥i¥H¡CTCM_SETMINTABWIDTH «h¬O¤£½×¬O§_¦³ TCS_FIXEDWIDTH ©Î TCS_OWNERDRAWFIXED ·®æ¡A³£·|³]©w³Ì¤p¼e«×¡A¦pªG¬YÓ¼ÐÅÒ¤å¦r¤Óªø¡A¨ä¼e«×·|ÀH¤§½Õ¾ã¦Ó¯à¨£¨ä¥þ»ª¡C