²Ä¤G¤Q¤E³¹¡@³q¥Î±±¨î¶µ¡G¼ÐÅÒ±±¨î¶µ

¤°»ò¬O³q¥Î±±¨î¶µ¡]Common Controls¡^¡H

¦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

¸ü¤J³q¥Î±±¨î¶µ

¥Ñ©ó³q¥Î±±¨î¶µªº¼Æ¶q¤Ó¦h¡A°²¦p¨t²Î¤@±Ò°Ê¡A´N§â©Ò¦³ªº³q¥Î±±¨î¶µ¸ü¤J¨Ãµù¥U¡A¬O«Ü®ö¶O¸ê·½ªº¡A©Ò¥H·L³n¨Ã¨S¦³³o¼Ë°µ¡C³o·N¨ýµÛ¡A­n¨Ï¥Î¥¦­Ì¤§«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¦]¦¹¥u­n°õ¦æ¤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

ªí¤@¡G±`¨£ªº³q¥Î±±¨î¶µ
±±¨î¶µµøµ¡Ãþ§O»¡©údwICC
°Êµe±±¨î¶µ
animation
SysAnimate32 °Êµe±±¨î¶µ¥iÅã¥Ü AVI¡CAVI ¬O¤@¨t¦C¦ì¤¸¹Ïµe­±¡AÃþ¦ü¹q¼v¡C¦ý°Êµe±±¨î¶µ¥u¯àÅã¥Ü¤£¥]§t­µ°Tªº AVIICC_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¸ê°TICC_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¨Ç¸ê°TICC_BAR_CLASSES
4
·Æ°Ê¶b±±¨î¶µ
trackbar
msctls_trackbar32·Æ°Ê¶b¤W³q±`¦³·Æ±ì¤Î¨è«×¡A¨Ï¥ÎªÌ¥i¥H§â·Æ¹«²¾¨ì·Æ±ì¤W«ö¦í¥ªÁ䤣©ñ¡A±N·Æ±ì²¾¨ì¾A·í¨è«×¤W¡A¥H¹ï¹q¸£¤U¹F«ü¥OICC_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


¼ÐÅÒ±±¨î¶µ

¼ÐÅÒ±±¨î¶µ¦U³¡¦WºÙ

¼ÐÅÒ±±¨î¶µ¨Ì»Ý¨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¸ê·½´y­zÀɤ¤©w¸q¡uDIALOG¡v°Ï¶ô¡A©ó¦¹°Ï¶ô¤¤¥Î¡uCONTROL¡v´y­z¼ÐÅÒ±±¨î¶µ¡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

①¡Bmask_¡G¦b MSDN ¤å¥ó¤¤²Ä¤@­ÓÄæ¦ì¥»¬O mask¡A¦ý»P²Õ¦X»y¨¥ªº¹Bºâ¤l mask µo¥Í½Ä¬ð¡]¦b MASM ¤¤¡Amask ¥Î©ó³B²z¬ö¿ý¡ARECORD¡A¤ºªº¹Bºâ¡^¡A¬G WinInc ±N¨ä§ï¦¨ mask_¡A¥¦¥i¥H¬O¤Uªí¤¤¦UºX¼Ðªº²Õ¦X¡A¥¦«ü©w¤F TCITEM ¤¤­þ¨ÇÄæ¦ì¦³®Ä¡C
ºX¼Ð¼Æ­È»¡©ú
TCIF_IMAGE2iImage Äæ¦ì¦³®Ä
TCIF_PARAM8lParam Äæ¦ì¦³®Ä
TCIF_RTLREADING4Åã¥Ü pszText ©Ò«üªº¦r¦ê®É¡A¨ä¤è¦V»P¤÷µøµ¡¤å¦r¤Ï¦V
TCIF_STATE10hdwState Äæ¦ì¦³®Ä
TCIF_TEXT1pszText Äæ¦ì¦³®Ä
②¡BdwState¡G¨ú±o©Î³]©w¼ÐÅÒ±±¨î¶µªº¶µ¥Øª¬ºA®É¡Amask_ »Ý¥]§t TCIF_STATE ºX¼Ð¡A¦A¥H TCM_GETITEM ©Î TCM_SETITEM ¬°°Ñ¼Æ©I¥s SendMessage¡C¦pªG¬O«eªÌ¡A©I¥s§¹¦¨«á¦¹Äæ¦ì·|¦s¦³¼ÐÅÒ¶µ¥Øªºª¬ºA¡F¦pªG¬O«áªÌ¡A»Ý¦b©I¥s«e³]¦n dwState¡A¤~¯à³]©w¦n¼ÐÅÒ¶µ¥Øª¬ºA¡CTCM_INSERTITEM °T®§·|©¿²¤¦¹Äæ¦ì¡A¦]¬°·s«Ø¼ÐÅÒ¶µ¥Ø®É¡A¤£¯à¦P®É³]©wª¬ºA¡C
③¡BdwStateMask¡G¾B¸n¦ì¤¸¡A·N«ä¬O«ü©w¨º¨Ç¦ì¤¸·|Åܧó¡A¦Ó¨ä¥L¦ì¤¸¥Nªíªºª¬ºA¤£ÅÜ¡C¥u¦³¦ì¤¸¬°¤@¡A¤~·|§ïÅÜ¡CTCM_INSERTITEM °T®§·|©¿²¤¦¹Äæ¦ì¡C
④¡BpszText¡G¥H¹s¬°µ²§Àªº¦r¦ê¦ì§}¡A¦¹¦r¦ê¬°¼ÐÅÒ¤å¦r¡C¦pªG¬O©I¥s TCM_GETITEM ¨ú±o¼ÐÅÒ¤å¦r®É¡A¨º»ò¦¹¦ì§}¬°½w½Ä°Ï¦ì§}¡A¦Ó³o½w½Ä°Ï¥Î©ó±µ¦¬¼ÐÅÒ¤å¦rªº¦r¦ê¡C
⑤¡BcchTextMax¡G¦¹Äæ¦ì¶È¦b¨ú±o¼ÐÅÒ¤å¦r®É¦³®Ä¡A¥Î©ó«ü©w½w½Ä°Ï¤j¤p¡A¥H¦r¤¸¬°³æ¦ì¡C
⑥¡BiImage¡G«ü©w¨Ï¥Î­þ¤@­Ó¹Ï¹³¡A¦¹Äæ¦ì¬O¦b¹Ï¹³¦Cªí¡]image list¡^¤¤ªº¯Á¤Þ­È¡C
⑦¡BlParam¡GÀ³¥Îµ{¦¡¦Û¦æ©w¸qªº¸ê®Æ¡A¨Ò¦p¬Û¹ïÀ³ªº¤l¹ï¸Ü²°¥N½X¡A¥i¥H¦b¨Ï¥ÎªÌ¤Á´«¶µ¥Ø®É¡A©óµøµ¡¨ç¦¡¤¤¦¬¨ì¦ÓÅã²{¬Û¹ïÀ³ªº¤l¹ï¸Ü²°¡C

¼ÐÅÒ±±¨î¶µªº¼ÐÅÒª¬ºA«Ü¤Ö¡A¦³©³¤U´XºØ¡A°£¤F¼o±ó¤£¥Îªº TCIS_HIDDEN¡A³Ñ¤U¨âºØ¡A¨CºØª¬ºA³£¥Î¤@­Ó¦ì¤¸ªí¥Ü¡G

ª¬ºA¼Æ­È»¡©ú
TCIS_BUTTONPRESSED1¼ÐÅÒ§e²{«ö¶s³Q«ö¤Uªºª¬ºA¡A¥u¦³ TCS_BOTTOM ¤~¦³¦¹ª¬ºA
TCIS_HIGHLIGHTED2¼ÐÅÒ³B©ó°ª«G«×ª¬ºA
TCIS_HIDDEN1¼ÐÅÒ³B©óÁôÂꬺA¡A¦ý¤w¼o±ó¤£¥Î

°²¦p­n³]©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¬O­nÅý²Ä¤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¤£¨Ï¨ä§ïÅÜ¡A­n§ïÅܪº¦ì¤¸±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ªí

¹Ï¹³¦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ªG­n¦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¤§«e­n³]©w TCITEM ªº iImage Äæ¦ì¡B⑤¤£¦A»Ý­n¹Ï¹³¦Cªí®É¾P·´¥¦¡C

¼ÐÅÒ±±¨î¶µÅã¥Ü°Ï°ì¤ºªº¤l¹ï¸Ü²°

«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¹ï¸Ü²°¹ïÀ³«e­zªº²Ä¤@­Ó¥\¯à¬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³ò¤º¡A­n¿í¦u¤U­±´X¶µ³W«h¡G

⑴¡B¤l¹ï¸Ü²°¥i¥H¦b¸ê·½´y­zÀɤ¤¥H DIALOG ©Î DIALOGEX °Ï¶ô©w¸q¡A¦ý¥²¶·¥[¤W WS_CHILD ­·®æ¡A¦Ó¥B¤£¥i¦³ WS_POPUP ­·®æ¡A¤]¤£¥i¥H¦³¼ÐÃDÄæ¡]¤]´N¬O¤£¯à¦³ CAPTION ¿ï¶µ¡^¡C
⑵¡B¨Ï¥ÎªÌ¥i¥H¦b¤£Ãö³¬¤l¹ï¸Ü²°ªº±¡ªp¤U¡A´N¤Á´«¨ì¥t¤@­Ó¼ÐÅÒ¶µ¥Øªº¤l¹ï¸Ü²°¡A©Ò¥H³o¨Ç¤l¹ï¸Ü²°³£¬OÄݩ󤣱j¨î¦^À³¹ï¸Ü²°¡A¥²¶·©I¥s CreateDialogParam «Ø¥ß¡C
⑶¡B­pºâ¤l¹ï¸Ü²°¤Ø¤o©Î¼ÐÅÒ±±¨î¶µ¤Ø¤o¡A¥i¤À¬°¨âºØ±¡§Î¡G¡]¤l¹ï¸Ü²°ªº¤Ø¤o¥i¥H©MÅã¥Ü°Ï°ì¤@¼Ë¤j¡Aµy·L¤p¤@¡B¨â­Ó¹³¯À¡^
⒜¡B¥HÅã¥Ü°Ï°ì¬°·Ç¡A¤]´N¬O¤wª¾Åã¥Ü°Ï°ì¤Ø¤o¡A¥h­pºâ¼ÐÅÒ±±¨î¶µ¤Ø¤o¡C
⒝¡B¦ý¤j³¡¤Àªº±¡§Î¬O¥H¼ÐÅÒ±±¨î¶µ¬°·Ç¡A¤]´N¬O¤wª¾¼ÐÅÒ±±¨î¶µ¤Ø¤o¡A¥h­pºâÅã¥Ü°Ï°ì¤Ø¤o¡C
⑷¡B¨Ï¥ÎªÌ¤Á´«¼ÐÅҮɡAÀ³¥Îµ{¦¡»Ý¦bµøµ¡¨ç¦¡¤¤³B²z TCN_SELCHANGE ³qª¾½X¡A¨Ã©I¥s ShowWindow ¨M©wÅã¥Ü­þ­Ó¤l¹ï¸Ü²°¡A¤£Åã¥Ü­þ­Ó¤l¹ï¸Ü²°¡C

¤W­zªº²Ä⑴¡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

⒜¡B¦pªG fLarge ¬°¤@¡A¥Nªí¬O¦b¤wª¾Åã¥Ü°Ï°ìªº¤Ø¤o¡A¥h­pºâ¼ÐÅÒ±±¨î¶µªº¤Ø¤o¡C¦b©I¥s SendMessage ¤§«e¡ApRect ¬O RECT µ²ºcÅé¦ì§}¡A¸Óµ²ºcÅ餺¦s¦³Åã¥Ü°Ï°ì¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ð¡C·í TCM_ADJUSTRECT ­pºâ§¹¦¨«á¡A¸Óµ²ºcÅé·|Åܬ°¼ÐÅÒ±±¨î¶µªº¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ð¡C
⒝¡B¦pªG fLarge ¬°¹s¡A¥Nªí¬O¦b¤wª¾¼ÐÅÒ±±¨î¶µªº¤Ø¤o¡A¥h­pºâÅã¥Ü°Ï°ìªº¤Ø¤o¡C¦b©I¥s SendMessage ¤§«e¡ApRect ¬O¤w¦s¦³¼ÐÅÒ±±¨î¶µ¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ðªº RECT µ²ºcÅé¦ì§}¡C·í TCM_ADJUSTRECT ­pºâ§¹¦¨«á¡A¸Óµ²ºcÅé·|Åܬ°Åã¥Ü°Ï°ìªº¥ª¤W¨¤¤Î¥k¤U¨¤®y¼Ð¡C

¥»³¹ªº¨Ò¤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«e­z 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

WM_NOTIFY °T®§

·í¨Ï¥ÎªÌ¥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¤W­zµ²º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ªº¡A­n¦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°²¦p­n¦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


HMS2S ­ì©lµ{¦¡

©³¤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 ;¥D­n¹ï¸Ü²°Ãѧ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 ;¥D­n¹ï¸Ü²°¹Ï¥Ü
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Ķ¸ê·½´y­zÀÉ¡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 ¦æ¤w­pºâ¥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¹ï¸Ü²°¡C­n§¹¦¨²Ä①¨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°õ¦æ§¹¤W­z²Ä¤@¦æ«ü¥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´£¬O­n¸ü¤J MYFIX.INC¡C

¤W­zµ{¦¡³Ì«á¤@¦æ¨Ã¤£Ãø¡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

¤W­zµ{¦¡²Ä¤@¦æ¬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 API

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

①¡Bcx¡Bcy¡G¤À§O¬O¹Ï¹³ªº¼e«×»P°ª«×¡A¥H¹³¯À¬°³æ¦ì¡C¦b¹Ï¹³¦Cªí¤¤ªº¨C­Ó¹Ï¹³¼e«×³£¥²¶·»P¨ä¥L¤@¼Ë¡A°ª«×¤]¬O¦p¦¹¡C
②¡Bflag¡G«ü©w¹Ï¹³¦CªíªºÃþ«¬¡A¥i¥H¬O¤Uªíªº¼Æ­È¡G
flags¼Æ­È»¡©ú
ILC_COLOR0¨Ï¥Î¹w³]­È«Ø¥ß¹Ï¹³¦Cªí¡A³q±`¬O ILC_COLOR4¡A¦ý¦pªG¨Ï¥ÎªºÅã¥Ü¸Ë¸m¥i¯à¬O ILC_COLORDDB
ILC_COLOR44¨Ï¥Î¥|¦ì¤¸ÃC¦â¡A§Y 16 ¦â
ILC_COLOR88¨Ï¥Î¤K¦ì¤¸ÃC¦â¡A§Y 256 ¦â
ILC_COLOR1610h¨Ï¥Î¤Q¤»¦ì¤¸ÃC¦â¡A§Y 65536 ¦â
ILC_COLOR2418h¨Ï¥Î¤G¤Q¥|¦ì¤¸ÃC¦â¡A§Y¯u±m
ILC_COLOR3220h¨Ï¥Î¤G¤Q¥|¦ì¤¸ÃC¦â¡A§Y¯u±m¥[¤W£\³q¹D
ILC_COLORDDB0FEh»P¸Ë¸m¬ÛÃöªº¦ì¤¸¹Ï
ILC_MASK1¨ã¦³¦¹ºX¼Ðªº¹Ï¹³¦Cªí¤º¡A¨C±i¹Ï¹³³£¦³¨â±i¦ì¤¸¹Ï¡A¤@±i¬O­ì¹Ï¡A¤@±i¬O§@¬°¾B¸nªº³æ¦â¶Â¥Õ¹Ï¡A¥i¨Ï¬Y¤@ºØÃC¦âÅܱo³z©ú
ILC_MIRROR2000h¦b¥Ñ¥k¦Ü¥ªªº¨t²Î¤¤¡A¹Ï¹³¦Cªí¤ºªº©Ò¦³¹Ï¹³³£·|³QÃ蹳½Âà
ILC_ORIGINALSIZE10000h¤¹³\¹Ï¹³¦Cªí±µ¨ü¤ñ³]©w¤Ø¤o§ó¤pªº¹Ï¹³¡A¦Óºû«ù¨ä­ì©l¤Ø¤o
ILC_PERITEMMIRROR8000h·í¤@¦¸´¡¤J¦h­Ó¹Ï¹³®É¡A¤¹³\³æ¿W¹ï¨C­Ó¹Ï¹³¶i¦æÃ蹳½Âà¡A¦Ó¤£¬OÃè¹³¾ã­Ó¹Ï¹³¦ê
③¡BcInitial¡G¬O¹Ï¹³¦Cªí«Ø¥ß®É¡A¤@¶}©lªº¹Ï¹³¼Æ¶q¡C
④¡BcGrow¡G¬O«ü·í¹Ï¹³¦Cªí»Ý­nÂX¥R®É¡A¨t²Î¦Û°Ê¦a¨C¦¸¼W¥[ªº¹Ï¹³¼Æ¶q¡C

¦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 API

ImageList_Destroy ¥Î©ó¾P·´¹Ï¹³¦Cªí¡A¨ä­ì«¬¬°¡G

invoke  ImageList_Destroy,\
        himl            ; handle to the image list to destroy

ImageList_Destroy ¥u¦³¤@­Ó°Ñ¼Æ¡A­n¾P·´ªº¹Ï¹³¦Cªí¥N½X¡C¦pªG¦¨¥\¾P·´¡A¦^¶Ç­È¬°¤@¡F§_«h¬°¹s¡C

ImageList_ReplaceIcon API

­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©Ò¥H­n·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

①¡Bhiml¡G­n³B²zªº¹Ï¹³¦Cªí¥N½X¡C
②¡Bi¡G­n¨ú¥Nªº¹Ï¹³¯Á¤Þ¡C¦pªG i ¬°¡Ð1¡A¨º»ò¦¹¨ç¦¡·|§â¹Ï¹³²K¥[¦b³Ì«á¤@­Ó¹Ï¹³¤§«á¡C
③¡Bhicon¡G¹Ï¥Ü©Î´å¼Ð¥N½X¡A¥¦­Ì·|¨ú¥N­ì¦³¦b¹Ï¹³¦Cªí¤¤ªº¹Ï¤ù¡C

¦pªG°õ¦æ¦¨¥\¡A¦^¶Ç­È¬°¹Ï¹³¯Á¤Þ¡A§_«h¬°¹s¡C

CreateDialogParam API

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

①¡BhInstance¡G¥]§t¹ï¸Ü²°­±ªOªº¼Ò²Õ¥N½X¡C¦pªG¦¹°Ñ¼Æ¬° 0¡A«h·|¨Ï¥Î¥Ø«eªº¥i°õ¦æÀÉ¡C
②¡BlpTemplateName¡G¥H¹sµ²§Àªº¦r¦ê¡A¦¹¦r¦ê¥Nªí¹ï¸Ü²°­±ªO¦WºÙ¡F¤]¥i¥H¬O 1¡ã65535 ¤§¶¡ªº¥¿¾ã¼Æ¡A¦¹¼Æ­È¥Nªí¹ï¸Ü²°­±ªOªºÃѧO½X¡C¤£½×¬O­þ¤@ºØ¡A³£»Ý»P¸ê·½´y­zÀɤ¤ªº¹ï¸Ü²°­±ªO°t¦X¡C
③¡BhWndParent¡Gµøµ¡¥N½X¡A¦¹µøµ¡¥N½Xªí¥Ü¾Ö¦³¦¹¹ï¸Ü²°¡C
④¡BlpDialogFunc¡G¹ï¸Ü²°¨ç¦¡¦ì§}¡C
⑤¡BdwInitParam¡G·í¹ï¸Ü²°«Ø¥ß¡A¦ý©|¥¼Åã¥Ü«e¡A¹ï¸Ü²°¨ç¦¡·|¦¬¨ì WM_INITDIALOG °T®§¡A¨ä lParam °Ñ¼Æ´N¬O dwInitParam¡AÀ³¥Îµ{¦¡¥i¥H¥Î¦¹¼Æ­È¶i¦æªì©l¤Æ¤u§@¡C

¦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_BOTTOM2¦¹­·®æ¨Ï¼ÐÅÒ¦ì©óÅã¥Ü°Ï°ìªº¤U­±¡C
TCS_BUTTONS100h¦¹­·®æ±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_FIXEDWIDTH400h©Ò¦³¼ÐÅÒªº¼e«×³£¬Û¦P¡A¤£¯à»P TCS_RIGHTJUSTIFY ·f°t¡C
TCS_FLATBUTTONS8¿ï¨úªº¼ÐÅÒ·|Åã²{¥W³´®ÄªG¡A¦Ó¨ä¥L«hµL¦¹®ÄªG¡C¦¹­·®æ¥u·|¼vÅT¨ã¦³ TCS_BUTTONS ­·®æªº¼ÐÅÒ±±¨î¶µ¡C
TCS_FOCUSNEVER8000h§Y¨Ï³B©ó¿ï¨úªº¼ÐÅÒ¡A¤]¤£·|¨Ï¼ÐÅÒ±±¨î¶µÀò±o¿é¤JµJÂI¡C
TCS_FOCUSONBUTTONDOWN1000h¿ï¨ú¼ÐÅÒ¶µ¥Ø¡A·|¨Ï¼ÐÅÒ±±¨î¶µÀò±o¿é¤JµJÂI¡C
TCS_FORCEICONLEFT10h¹Ï¥Ü·|¹ï»ô©T©w¼e«×¼ÐÅÒªº¥ª½t¡C¦¹­·®æ¥u¯à»P TCS_FIXEDWIDTH ·f°t¨Ï¥Î¡C
TCS_FORCELABELLEFT20h¼ÐÅÒ¤å¦r·|¦V¥ªÃä¹ï»ô¡C¦¹­·®æ¥u¯à»P TCS_FIXEDWIDTH ·f°t¨Ï¥Î¡C
TCS_HOTTRACK40h±Ò¥Î¼ÐÅÒ±±¨î¶µªº¼ö°lÂܮĪG¡A¥ç§Y·í·Æ¹«Äa°±¦b¼ÐÅÒ¦WºÙ¤W®É·|¦Û°Ê°ª«GÅã¥Ü¡Cªñ´Áªº Windows ·|¦Û°Ê±Ò¥Î¦¹¶µ¥\¯à¡C
TCS_MULTILINE200h¦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_MULTISELECT4«ö¦í Ctrl Áä®É¥i¿ï¨ú¦h­Ó¼ÐÅÒ¡A¥²¶·»P TCS_BUTTONS ·f°t¡C
TCS_OWNERDRAWFIXED2000h¾Ö¦³ªÌø»s¼ÐÅÒ±±¨î¶µ¡A¤]´N¬O¥ÑÀ³¥Îµ{¦¡¡A¦Ó¤£¬O¨t²Î¡Aø»s¼ÐÅÒ±±¨î¶µ¡C
TCS_RAGGEDRIGHT800hÅã¥Ü¦h¦C¼ÐÅҮɡA¨ã¦³¦¹­·®æªº¼ÐÅÒ±±¨î¶µ©ÒÅã¥Üªº¼ÐÅÒ¦WºÙ¼e«×ºû«ù­ì»ª¡A¤£·|©µ¦ù¦Ü¹ï»ô±±¨î¶µ¥k½t©Î¤U½t¡]¨ã¦³ TCS_VERTICAL ­·®æ¡^¡C
TCS_RIGHT2¼ÐÅÒ·|¥H««ª½¤è¦¡Åã¥Ü¦b¼ÐÅÒ±±¨î¶µ¥k°¼¡A¥²¶··f°t TCS_VERTICAL¡C
TCS_RIGHTJUSTIFY0Åã¥Ü¦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_SCROLLOPPOSITE1·í¨Ï¥ÎªÌ¿ï¨ú¦h¦C¼ÐÅÒªº¨ä¤¤¤@­Ó®É¡A¹w³]±¡§Î¡A¨t²Î·|±N¥¼ºò¾FÅã¥Ü°Ï°ìªº¼ÐÅÒ²¾¦Ü¶È¾aÅã¥Ü°Ï°ì¡F°²¦p«ü©w¦¹­·®æ¡A¨t²Î¤£·|²¾°Ê¿ï¨úªº¼ÐÅÒ¡A¤Ï¦Ó±N¦bÅã¥Ü°Ï°ì»P³Q¿ï¨ú¼ÐÅÒ¤§¶¡ªº©Ò¦³¼ÐÅÒ²¾¦ÜÅã¥Ü°Ï°ì¹ï­±³B¡C
TCS_SINGLELINE0¶ÈÅã¥Ü¤@¦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_TABS0¹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_TOOLTIPS4000h¼ÐÅÒ±±¨î¶µ¨ã¦³¬ÛÃöªº¤u¨ã´£¥Ü±±¨î¶µ¡C
TCS_VERTICAL80h¹]ÁèÅã¥Ü¼ÐÅÒ¡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¡F­Y¤£¨ã 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

¼ÐÅÒ±±¨î¶µªº³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ÁÙ¬O­nº¡¨¬¬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®§

¼ÐÅÒ±±¨î¶µªº°T®§¦p¤U¡G

°T®§»¡©úwParamlParam¦^¶Ç­È
TCM_ADJUSTRECT
1328h
¤wª¾Åã¥Ü°Ï°ì¤j¤p¡A­pºâ¼ÐÅÒ±±¨î¶µ¤Ø¤o¡F©Î¤Ï¹L¨Ó¡C¸Ô±¡¨£«e­± ­Y¬°¤@¡Aªí¥Ü¤wª¾Åã¥Ü°Ï°ì¡A­pºâ±±¨î¶µ¤Ø¤o¡F§_«h¬°¹sRECT µ²º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©Ò¦³¼ÐÅÒ³£³]¬°¥¼¿ï¨ú¡F­Y¬°¤@¡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À³³]¬° 0TCHITTESTINFO µ²ºcÅ骺¦ì§}®y¼Ð©Ò¦bªº¼ÐÅÒ¡F­Y®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¿ï¨úªº¡A­Y³]©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¡F­Y¨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À³³]¬° 00¡ã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À³³]¬° 00¡ã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 ¬O­n´ú¸Õªº¤u§@°Ï®y¼Ð¡Aflags ¬O´ú¸Õ«áµ²ªG¡A¥i¯àªºµ²ªG¦p¤Uªí¡G

flags¼Æ­È»¡©ú
TCHT_NOWHERE1®y¼Ð¤£¦b¥ô¦ó¤@­Ó¼ÐÅÒ¦WºÙ¤W
TCHT_ONITEMICON2®y¼Ð¦ì©ó¼ÐÅÒ¦WºÙªº¹Ï¥Ü¤W
TCHT_ONITEMLABEL4®y¼Ð¦ì©ó¼ÐÅÒ¦WºÙªº¤å¦r¤W
TCHT_ONITEM6®y¼Ð¦ì©ó¬Y­Ó¼ÐÅÒ¦WºÙ¤º¡A¦ý¤£¦b¹Ï¥Ü¤W¡A¤]¤£¦b¤å¦r¤W¡C¦pªG¬O¾Ö¦³ªÌø»sªº¼ÐÅÒ±±¨î¶µ¡A¥u­n®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