VC»ù´¡½Ì³Ì

ÐòÑÔ¼°°æÈ¨ËµÃ÷ 1999/09/05

ÎÒ±£Áô±¾À¸Ä¿ËùÓÐÎÄÕµİæÈ¨£¬Î´¾­¹ý±¾ÈËÔÊÐíÈκλú¹¹»ò¸öÈ˲»µÃÒÔÈκη½Ê½×ªÔØ£¬¸´ÖƱ¾À¸Ä¿ÈκÎÎÄÕ»òÊÇÌṩÏÂÔØ¡£Èç¹ûÐèÒª×ªÔØÇëÓë×÷ÕßÎÅâùÑóÁªÏµ¡£

Ê×ÏÈÎÒÒª¸ÐÐ»ÍøÉϵÄÅóÓѸøÎҵĹÄÀøºÍÖ§³Ö£¬ÕâÊÇÎÒ´Óʽ̳̱àдµÄÖ÷Òª¶¯Á¦£¬Æä´Î·á¸»À¸Ä¿Ò²ÊÇÕ¾µã·¢Õ¹±¾ÉíµÄÐèÒª¡£ÔÚÒÔºóµÄʱ¼äÖÐÎÒ»áÂ½Ðø±àд½Ì³Ì¹©´ó¼Ò²Î¿¼£¬Ï£Íû³õѧVCµÄÅóÓÑÄܵõ½°ïÖúºÍÖ¸µ¼£¬ÊìϤVCµÄÅóÓÑÄܵõ½Æô·¢£¬¾«Í¨VCµÄÅóÓÑÄܲ»Áߴͽ̣¬Í¬Ê±Ò²Ï£ÍûÄÜÆðÒ»¸öÅ×שÒýÓñµÄ×÷Óá£

ÔÚÕâ¸öÀ¸Ä¿ÖÐÎÒÒÔÑ­Ðò½¥½øµÄ·½Ê½½²ÊöVC¿ª·¢·½·¨ºÍ¼¼ÇÉ£¬´ÓVCÈëÃŵ½¸÷ÖÖ´°ÌåµÄʹÓ㬶Ի°¿òµÄ±àд£¬ÎĵµÊӽṹµÄʹÓã¬ÒÔ¼°ÍøÂ翪·¢ºÍÆäËûһЩ¸ß¼¶µÄ»°Ìâ¡£

±¾À¸Ä¿µÄÄÚÈÝ£ºÔÚ±¾À¸Ä¿ÀïÎÒ½«½²ÊöһЩÎÒÈÏΪ¿ª·¢Ñ§Ï°¹ý³ÌÖбȽÏÖØÒªµÄÄÚÈÝÒ²ÓÐһЩÎÒµÄѧϰ¾­Ñ飬ÎÒµÄÄ¿µÄÊǰïÖú´ó¼Ò¸üºÃµÄѧϰVC£¬¶ø²»ÊÇ´ó¶øÈ«µÄ½²½âVCµÄʹÓ÷½·¨£¬¿ª·¢·½·¨¡£ËùÒÔÏ£ÍûÄãÉí±ßÄÜÓÐÒ»±¾²Î¿¼Êé¶ø²»Òª½«Õâ¸öÀ¸Ä¿µ±×÷ÄãÈëÃŵIJο¼Êé¡£ÎÒÕâÑù×öÊÇÒòΪÎÒµÄʱ¼äºÍ¾«Á¦ÓÐÏÞ£¬Ò²Ã»ÓÐɨÃèÒǺÍOCRÈí¼þ£¬²»¿ÉÄÜд³ö³¤Æª´ó×÷¡£Í¬Ê±ÊÐÃæÉϵIJο¼ÊéÁ¼Ý¬²»Æë£¬ÎÒÏ£ÍûÔÚ¿´ÍêÒ»±¾²»Ì«ºÃµÄ²Î¿¼Êéºó¿´Õâ¸öÀ¸Ä¿ÄÜÓÐÒ»ÖÖ»ÐÈ»´óÎòµÄ¸Ð¾õ¡££¨ºÃÏóÓеã¿äÕÅ£©

±¾À¸Ä¿µÄ¶ÔÏó£ºÕâÀïµÄ½Ì³ÌÖ÷ÒªÊÇÕë¶ÔVC¿ª·¢µÄ³õ¼¶Ê¹ÓÃÕߺ͸ÕÈëÃŵĿª·¢Õß¶ø±àд¡£Í¬Ê±Ò²ÒªÇó¶ÁÕß¾ßÓÐC/C++ÓïÑÔ»ù´¡¡£

¸ÐлһЩÎÒÉí±ßµÄÈË£¬ÕýÒòΪÓÐËûÃǵĹØÐĺͰïÖúÕâ¸öÀ¸Ä¿²ÅÄܵÃÒÔÎÊÊÀ¡£¸ÐлÎÒµÄĸÇ×ÔÚ¶àÄêÀ´Éú»îÉϸøÓèÎÒÎÞ΢²»ÖÁµÄÕչˣ»ÎҵĵܵÜÕÅÁ¢Ëûʱ³£¸øÎÒ½éÉÜһЩºÃÍæµÄÓÎÏ·ÈÃÎÒ¿ÉÒÔ·ÅËÉÒ»ÏÂ×Ô¼º£»ÎÒ´óѧµÄµ¼Ê¦Ðì¼×Í¬Ôø¸øÎÒÌṩºÃµÄʵÑé»·¾³£»ÎҵĺÃÅóÓÑÖܽ­¶àÄêÀ´Ëûʱ³£¸øÎÒһЩÐÂÏʵÄÁé¸Ð£»ÎÒµÄÅóÓÑÒ²Êǹ¤×÷ÉϵÄͬʳÂãüÔÚ¹¤×÷ÉϸøÎҵİïÖúºÍÖ¸µ¼£»µçÄÔ±¨µÄÄк£13ΪÎÒÁªÏµ±¾À¸Ä¿ÔÚµçÄÔ±¨µÄ×ªÔØ£»»¹ÓÐÄÇÐ©ÍøÉÏдÐŹÄÀøÎÒµÄÅóÓÑ£¬ÓÐÁËËûÃǵĿ϶¨ÎҲŸе½×Ô¼ºµÄ¸¶³öÊÇÓÐÒâÒåµÄ¡£

Èç¹ûÓÐʲôÒâ¼û»ò½¨ÒéÇëÄãÁôÑÔ»òÁªÏµÎÅâùÑó¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/

Ŀ¼
+-- µÚÒ»Õ VCÈëÃÅ ´ò°üÏÂÔØ
|------ 1.1 ÈçºÎѧºÃVC
|------ 1.2 Àí½âWindowsÏûÏ¢»úÖÆ
|------ 1.3 ÀûÓÃVisual C++/MFC¿ª·¢Windows³ÌÐòµÄÓÅÊÆ
|------ 1.4 ÀûÓÃMFC½øÐпª·¢µÄͨÓ÷½·¨½éÉÜ
|------ 1.5 MFCÖг£ÓÃÀ࣬ºê£¬º¯Êý½éÉÜ
+-- µÚ¶þÕ ͼÐÎÊä³ö ´ò°üÏÂÔØ
|------ 2.1 ºÍGUIÓйصĸ÷ÖÖ¶ÔÏó
|------ 2.2 ÔÚ´°¿ÚÖÐÊä³öÎÄ×Ö
|------ 2.3 ʹÓõ㣬ˢ×Ó£¬±Ê½øÐлæÍ¼
|------ 2.4 ÔÚ´°¿ÚÖлæÖÆÉ豸Ïà¹ØÎ»Í¼£¬Í¼±ê£¬É豸ÎÞ¹ØÎ»Í¼
|------ 2.5 ʹÓø÷ÖÖÓ³É䷽ʽ
|------ 2.6 ¶à±ßÐκͼôÌùÇøÓò
+-- µÚÈýÕ ÎĵµÊӽṹ ´ò°üÏÂÔØ
|------ 3.1 Îĵµ ÊÓͼ ¿ò¼Ü´°¿Ú¼äµÄ¹ØÏµºÍÏûÏ¢´«Ë͹æÂÉ
|------ 3.2 ½ÓÊÕÓû§ÊäÈë
|------ 3.3 ʹÓò˵¥
|------ 3.4 Îĵµ£¬ÊÓ£¬¿ò¼ÜÖ®¼äÏ໥×÷ÓÃ
|------ 3.5 ÀûÓÃÐòÁл¯½øÐÐÎļþ¶Áд
|------ 3.6 MFCÖÐËùÌṩµÄ¸÷ÖÖÊÓÀà½éÉÜ
+-- µÚËÄÕ ´°¿Ú¿Ø¼þ ´ò°üÏÂÔØ
|------ 4.1 Button
|------ 4.2 Static Box
|------ 4.3 Edit Box
|------ 4.4 Scroll Bar
|------ 4.5 List Box/Check List Box
|------ 4.6 Combo Box/Combo Box Ex
|------ 4.7 Tree Ctrl
|------ 4.8 List Ctrl
|------ 4.9 Tab Ctrl
|------ 4.A Tool Bar
|------ 4.B Status Bar
|------ 4.C Dialog Bar
|------ 4.D ÀûÓÃAppWizard´´½¨²¢Ê¹ÓÃToolBar StatusBar Dialog Bar
|------ 4.E General Window
|------ 4.F ¹ØÓÚWM_NOTIFYµÄʹÓ÷½·¨
+-- µÚÎåÕ ¶Ô»°¿ò ´ò°üÏÂÔØ
|------ 5.1 ʹÓÃ×ÊÔ´±à¼­Æ÷±à¼­¶Ô»°¿ò
|------ 5.2 ´´½¨ÓÐģʽ¶Ô»°¿ò
|------ 5.3 ´´½¨ÎÞģʽ¶Ô»°¿ò
|------ 5.4 ÔÚ¶Ô»°¿òÖнøÐÐÏûÏ¢Ó³Éä
|------ 5.5 ÔÚ¶Ô»°¿òÖнøÐÐÊý¾Ý½»»»ºÍÊý¾Ý¼ì²é
|------ 5.6 ʹÓÃÊôÐÔ¶Ô»°¿ò
|------ 5.7 ʹÓÃͨÓöԻ°¿ò
|------ 5.8 ½¨Á¢ÒÔ¶Ô»°¿òΪ»ù´¡µÄÓ¦ÓÃ
|------ 5.9 ʹÓöԻ°¿ò×÷Ϊ×Ó´°¿Ú
+-- µÚÁùÕÂ ÍøÂçͨÐÅ¿ª·¢ ´ò°üÏÂÔØ
|------ 6.1 WinSock½éÉÜ
|------ 6.2 ÀûÓÃWinSock½øÐÐÎÞÁ¬½ÓµÄͨÐÅ
|------ 6.3 ÀûÓÃWinSock½¨Á¢ÓÐÁ¬½ÓµÄͨÐÅ
+-- ÏÂÔØÍêÕû½Ì³Ì
Íê³ÉÓÚ 1999/12/07
¾­¹ýÈý¸öÔÂµÄÆ´´ÕÖÕÓÚÍê³ÉÁËÕâÒ»»ù´¡½Ì³Ì£¬ËµÕæµÄÒÔÎÒÕâÑùÍÏÀ­µÄ¸öÐÔÎÒûÏëµ½Èý¸öÔ¾ͿÉÒÔÍê³É£¬Ò²ÐíÊÇÎþÉüÁËÖÊÁ¿À´»»È¡ËÙ¶È¡£ÎÒ»áÔÚÒÔºóÍêÉÆ±¾½Ì³ÌÖеÄÕ½ڣ¬²¢Ï£Íû´ó¼Ò¶ÔÏÖÓеÄÄÚÈݶàÌáÒâ¼û¡£½ÓÏÂÀ´ÎÒ¿ÉÄÜ»áдһЩÓйØÓÚVisual C++/MFCµÄ¸ß¼¶½Ì³Ì¡£ÔٴθÐÐ»Ç°ÃæÌáµ½µÄËùÓÐÅóÓÑ¡£

1.1 ÈçºÎѧºÃVC

Õâ¸öÎÊÌâºÜ¶àÅóÓѶ¼ÎʹýÎÒ£¬µ±È»Á÷º¹ÊDZØÐëµÄ£¬µ«Í¬Ê±Èç¹û°´ÕÕijÖÖ˼·½øÐÐÓмƻ®µÄѧϰ¾Í»áÆðµ½¸üºÃµÄЧ¹û¡£ÍòÊ¿ªÍ·ÄÑ£¬ÎªÁ˰ïÖúÅóÓÑÃǸü¿ìµÄÕÆÎÕVC¿ª·¢£¬ÏÂÃæÎÒ½«×Ô¼ºµÄÒ»µãÌå»á½²Ò»Ï£º

1¡¢ÐèÒªÓкõÄC/C++»ù´¡¡£ÕýËùν¡°Ä¥µ¶²»Îó¿³²ñ¹¤¡±£¬×ʼ½Ó´¥VCʱ²»Òª¼±ÓÚ¿ªÊ¼Windows³ÌÐò¿ª·¢£¬¶øÊÇÓ¦¸Ã½øÐÐһЩ×Ö·û½çÃæ³ÌÐòµÄ±àд¡£ÕâÑù×öµÄÄ¿µÄÖ÷ÒªÊÇÔö¼Ó¶ÔÓïÑÔµÄÊìϤ³Ì¶È£¬Í¬Ê±Ò²ÑµÁ·×Ô¼ºµÄ˼άºÍÊìϤһЩÔÚ±à³ÌÖг£·¸µÄ´íÎ󡣸üÖØÒªµÄÊÇÀí½â²¢ÄÜÔËÓÃC++µÄ¸÷ÖÖÌØÐÔ£¬ÕâЩÔÚÒÔºóµÄ¿ª·¢Öж¼»áÓкܴóµÄ°ïÖú£¬ÌرðÊÇÀûÓÃMFC½øÐпª·¢µÄÅóÓѶÔC++Ò»¶¨ÒªÄÜÊìÁ·ÔËÓá£

2¡¢Àí½âWindowsµÄÏûÏ¢»úÖÆ£¬´°¿Ú¾ä±úºÍÆäËûGUI¾ä±úµÄº¬ÒåºÍÓÃ;¡£Á˽âºÍMFC¸÷¸öÀ๦ÄÜÏà½üµÄAPIº¯Êý¡£

3¡¢Ò»¶¨ÒªÀí½âMFCÖÐÏûÏ¢Ó³ÉäµÄ×÷Óá£

4¡¢ÑµÁ·×Ô¼ºÔÚ±àд´úÂëʱ²»Ê¹Óòο¼Êé¶øÊÇʹÓÃHelp Online¡£

5¡¢¼ÇסһЩ³£ÓõÄÏûÏ¢Ãû³ÆºÍ²ÎÊýµÄÒâÒå¡£

6¡¢Ñ§»á¿´±ðÈ˵ĴúÂë¡£

7¡¢¶à¿´Ê飬ÉÙÂòÊ飬ÂòÊéǰһ¶¨ÒªÉ÷ÖØ¡£

8¡¢ÏÐÏÂÀ´µÄʱºò¾Í¿´²Î¿¼Êé¡£

9¡¢¶àÀ´ÎÒµÄÖ÷Ò³¡£^O^

ºóÃæ¼¸ÌõÊÇÎÒ¸öÈ˵ÄÒ»µãÒâ¼û£¬Äã¿ÉÒÔ¸ù¾ÝÐèÒªºÍ×ÔÉíµÄÇé¿öÑ¡ÓÃÊÊÓÃÓÚ×Ô¼ºµÄ·½·¨¡£

´ËÍâÎÒ½«Ò»Ð©ÎÒÔÚÑ¡Ôñ²Î¿¼ÊéʱµÄÔ­Ôò£º

¶ÔÓÚ³õѧÕߣºÓ¦¸ÃÑ¡ÔñһЩÄÚÈݱȽÏÈ«ÃæµÄÊé¼®£¬²¢ÇÒÊé¼®ÖеÄÄÚÈÝÓ¦¸ÃÒÔºÏÀíµÄ·½Ê½°²ÅÅ£¬ÔÚʹÓøÃÊéʱ¿ÉÒԴﵽѭÐò½¥½øµÄЧ¹û£¬ÊéÖеĴúÂëÒªÓÐÏêϸµÄ½²½â¡£¾¡Á¿Âò·­ÒëµÄÊ飬ÒòΪÕâЩÊéÒ»°ã¶¼±È½ÏÒ×¶®£¬¶øÇÒÓïÑԱȽÏÇáËÉ¡£ÂòÊéǰһ¶¨ÒªÉ÷ÖØÈç¹ûÂòµ½²»ºÃÓõÄÊé¿ÉÄÜ»á¶Ô×Ô¼ºµÄѧϰ»ý¼«ÐÔ²úÉú´ò»÷¡£

¶ÔÓÚÒѾ­ÕÆÎÕÁËVCµÄÅóÓÑ£ºÕâÖ̶ֳȵĿª·¢ÕßÓ¦¸Ã¼ÓÉî×Ô¼º¶ÔϵͳԭÀí£¬¼¼ÊõÒªµãµÄÈÏʶ¡£ÐèҪѡÔñһЩ¶ÔÔ­Àí½²½âµÄ±È½Ï͸³¹µÄÊé¼®£¬ÕâÑùÒ»À´²Å»á¶Ôм¼ÊõÓиü¶àµÄÁ˽⣬×îºÃÊéÖжԼ¼ÊõµÄÓ¦ÓÃÓÐÒ»¶¨µÄ²ûÊö¡£¾¡Á¿Ñ¡Ôñʾ·¶´úÂë±Ø½Ï¾«¼òµÄÊ飬¿ÉÒÔ½ÚÔ¼Òø×Ó¡£

´ËÍâ×îºÃÉæÁÔһЩ¸¨ÖúÐÔµÄÊé¼®¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


1.2 Àí½âWindowsÏûÏ¢»úÖÆ

WindowsϵͳÊÇÒ»¸öÏûÏ¢Çý¶¯µÄOS£¬Ê²Ã´ÊÇÏûÏ¢ÄØ£¿ÎÒºÜÄÑ˵µÃÇå³þ£¬Ò²ºÜÄÑÏÂÒ»¸ö¶¨Ò壨˭ÔÚÐêÎÒ£©£¬ÎÒÏÂÃæ´Ó²»Í¬µÄ¼¸¸ö·½Ãæ½²½âһϣ¬Ï£Íû´ó¼Ò¿´Á˺óÓÐÒ»µãÁ˽⡣

1¡¢ÏûÏ¢µÄ×é³É£ºÒ»¸öÏûÏ¢ÓÉÒ»¸öÏûÏ¢Ãû³Æ£¨UINT£©£¬ºÍÁ½¸ö²ÎÊý£¨WPARAM£¬LPARAM£©¡£µ±Óû§½øÐÐÁËÊäÈë»òÊÇ´°¿ÚµÄ״̬·¢Éú¸Ä±äʱϵͳ¶¼»á·¢ËÍÏûÏ¢µ½Ä³Ò»¸ö´°¿Ú¡£ÀýÈçµ±²Ëµ¥×ªÖÐÖ®ºó»áÓÐWM_COMMANDÏûÏ¢·¢ËÍ£¬WPARAMµÄ¸ß×ÖÖУ¨HIWORD(wParam)£©ÊÇÃüÁîµÄIDºÅ£¬¶Ô²Ëµ¥À´½²¾ÍÊDz˵¥ID¡£µ±È»Óû§Ò²¿ÉÒÔ¶¨Òå×Ô¼ºµÄÏûÏ¢Ãû³Æ£¬Ò²¿ÉÒÔÀûÓÃ×Ô¶¨ÒåÏûÏ¢À´·¢ËÍ֪ͨºÍ´«ËÍÊý¾Ý¡£

2¡¢Ë­½«ÊÕµ½ÏûÏ¢£ºÒ»¸öÏûÏ¢±ØÐëÓÉÒ»¸ö´°¿Ú½ÓÊÕ¡£ÔÚ´°¿ÚµÄ¹ý³Ì£¨WNDPROC£©ÖпÉÒÔ¶ÔÏûÏ¢½øÐзÖÎö£¬¶Ô×Ô¼º¸ÐÐËȤµÄÏûÏ¢½øÐд¦Àí¡£ÀýÈçÄãÏ£Íû¶Ô²Ëµ¥Ñ¡Ôñ½øÐд¦ÀíÄÇôÄã¿ÉÒÔ¶¨Òå¶ÔWM_COMMAND½øÐд¦ÀíµÄ´úÂ룬Èç¹ûÏ£ÍûÔÚ´°¿ÚÖнøÐÐͼÐÎÊä³ö¾Í±ØÐë¶ÔWM_PAINT½øÐд¦Àí¡£

3¡¢Î´´¦ÀíµÄÏûÏ¢µ½ÄÇÀïÈ¥ÁË£ºM$Ϊ´°¿Ú±àдÁËĬÈϵĴ°¿Ú¹ý³Ì£¬Õâ¸ö´°¿Ú¹ý³Ì½«¸ºÔð´¦ÀíÄÇЩÄã²»´¦ÀíÏûÏ¢¡£ÕýÒòΪÓÐÁËÕâ¸öĬÈÏ´°¿Ú¹ý³ÌÎÒÃDzſÉÒÔÀûÓÃWindowsµÄ´°¿Ú½øÐпª·¢¶ø²»±Ø¹ý¶à¹Ø×¢´°¿Ú¸÷ÖÖÏûÏ¢µÄ´¦Àí¡£ÀýÈç´°¿ÚÔÚ±»Í϶¯Ê±»áÓкܶàÏûÏ¢·¢ËÍ£¬¶øÎÒÃǶ¼¿ÉÒÔ²»ÓèÀí²ÇÈÃϵͳ×Ô¼ºÈ¥´¦Àí¡£

4¡¢´°¿Ú¾ä±ú£ºËµµ½ÏûÏ¢¾Í²»Äܲ»Ëµ´°¿Ú¾ä±ú£¬ÏµÍ³Í¨¹ý´°¿Ú¾ä±úÀ´ÔÚÕû¸öϵͳÖÐΨһ±êʶһ¸ö´°¿Ú£¬·¢ËÍÒ»¸öÏûϢʱ±ØÐëÖ¸¶¨Ò»¸ö´°¿Ú¾ä±ú±íÃ÷¸ÃÏûÏ¢ÓÉÄǸö´°¿Ú½ÓÊÕ¡£¶øÃ¿¸ö´°¿Ú¶¼»áÓÐ×Ô¼ºµÄ´°¿Ú¹ý³Ì£¬ËùÒÔÓû§µÄÊäÈë¾Í»á±»ÕýÈ·µÄ´¦Àí¡£ÀýÈçÓÐÁ½¸ö´°¿Ú¹²ÓÃÒ»¸ö´°¿Ú¹ý³Ì´úÂ룬ÄãÔÚ´°¿ÚÒ»Éϰ´ÏÂÊó±êʱÏûÏ¢¾Í»áͨ¹ý´°¿ÚÒ»µÄ¾ä±ú±»·¢Ë͵½´°¿ÚÒ»¶ø²»ÊÇ´°¿Ú¶þ¡£

5¡¢Ê¾Àý£ºÏÂÃæÓÐÒ»¶Îα´úÂëÑÝʾÈçºÎÔÚ´°¿Ú¹ý³ÌÖд¦ÀíÏûÏ¢

LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM)
{
	switch(uMessageType)
	{//ʹÓÃSWITCHÓï¾ä½«¸÷ÖÖÏûÏ¢·Ö¿ª
		case(WM_PAINT):
			doYourWindow(...);//ÔÚ´°¿ÚÐèÒªÖØÐ»æÖÆÊ±½øÐÐÊä³ö
		break;
		case(WM_LBUTTONDOWN):
			doYourWork(...);//ÔÚÊó±ê×ó¼ü±»°´ÏÂʱ½øÐд¦Àí
		break;
		default:
			callDefaultWndProc(...);//¶ÔÓÚÆäËüÇé¿ö¾ÍÈÃϵͳ×Ô¼º´¦Àí
		break;
	}
}

½ÓÏÂÀ´Ì¸Ì¸Ê²Ã´ÊÇÏûÏ¢»úÖÆ£ºÏµÍ³½«»áά»¤Ò»¸ö»ò¶à¸öÏûÏ¢¶ÓÁУ¬ËùÓвúÉúµÄÏûÏ¢¶¼»Ø±»·ÅÈë»òÊDzåÈë¶ÓÁÐÖС£ÏµÍ³»áÔÚ¶ÓÁÐÖÐÈ¡³öÿһÌõÏûÏ¢£¬¸ù¾ÝÏûÏ¢µÄ½ÓÊÕ¾ä±ú¶ø½«¸ÃÏûÏ¢·¢Ë͸øÓµÓиô°¿ÚµÄ³ÌÐòµÄÏûϢѭ»·¡£Ã¿Ò»¸öÔËÐеijÌÐò¶¼ÓÐ×Ô¼ºµÄÏûϢѭ»·£¬ÔÚÑ­»·Öеõ½ÊôÓÚ×Ô¼ºµÄÏûÏ¢²¢¸ù¾Ý½ÓÊÕ´°¿ÚµÄ¾ä±úµ÷ÓÃÏàÓ¦µÄ´°¿Ú¹ý³Ì¡£¶øÔÚûÓÐÏûϢʱÏûϢѭ»·¾Í½«¿ØÖÆÈ¨½»¸øÏµÍ³ËùÒÔWindows¿ÉÒÔͬʱ½øÐжà¸öÈÎÎñ¡£ÏÂÃæµÄα´úÂëÑÝʾÁËÏûϢѭ»·µÄÓ÷¨£º

while(1)
{
	id=getMessage(...);
	if(id == quit)
		break;
	translateMessage(...);
}
µ±¸Ã³ÌÐòûÓÐÏûϢ֪ͨʱgetMessage¾Í²»»á·µ»Ø£¬Ò²¾Í²»»áÕ¼ÓÃϵͳµÄCPUʱ¼ä¡£ ͼʾÏûϢͶµÝģʽ

ÔÚ16λµÄϵͳÖÐϵͳÖÐÖ»ÓÐÒ»¸öÏûÏ¢¶ÓÁУ¬ËùÒÔϵͳ±ØÐëµÈ´ýµ±Ç°ÈÎÎñ´¦ÀíÏûÏ¢ºó²Å¿ÉÒÔ·¢ËÍÏÂÒ»ÏûÏ¢µ½ÏàÓ¦³ÌÐò£¬Èç¹ûÒ»¸ö³ÌÐòÏÝÈçËÀÑ­»·»òÊǺÄʱ²Ù×÷ʱϵͳ¾Í»áµÃ²»µ½¿ØÖÆÈ¨¡£ÕâÖÖ¶àÈÎÎñϵͳҲ¾Í³ÆÎªÐ­Í¬Ê½µÄ¶àÈÎÎñϵͳ¡£Windows3.X¾ÍÊÇÕâÖÖϵͳ¡£

¶ø32λµÄϵͳÖÐÿһÔËÐеijÌÐò¶¼»áÓÐÒ»¸öÏûÏ¢¶ÓÁУ¬ËùÒÔϵͳ¿ÉÒÔÔÚ¶à¸öÏûÏ¢¶ÓÁÐÖÐת»»¶ø²»±ØµÈ´ýµ±Ç°³ÌÐòÍê³ÉÏûÏ¢´¦Àí¾Í¿ÉÒԵõ½¿ØÖÆÈ¨¡£ÕâÖÖ¶àÈÎÎñϵͳ¾Í³ÆÎªÇÀÏÈʽµÄ¶àÈÎÎñϵͳ¡£Windows95/NT¾ÍÊÇÕâÖÖϵͳ¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


1.3 ÀûÓÃVisual C++/MFC¿ª·¢Windows³ÌÐòµÄÓÅÊÆ

MFC½èÖúC++µÄÓÅÊÆÎªWindows¿ª·¢¿ª±ÙÁËһƬÐÂÌìµØ£¬Í¬Ê±Ò²½èÖúApplicationWizzardʹ¿ª·¢Õß°ÚÍÑÀëÁËÄÇЩÿ´Î¶¼±ØÐ´»ù±¾´úÂ룬½èÖúClassWizardºÍÏûÏ¢Ó³Éäʹ¿ª·¢Õß°ÚÍÑÁ˶¨ÒåÏûÏ¢´¦ÀíʱÄÇÖÖ»ìÂÒºÍÈß³¤µÄ´úÂë¶Î¡£¸üÁîÈËÐ˷ܵÄÊÇÀûÓÃC++µÄ·â×°¹¦ÄÜʹ¿ª·¢Õß°ÚÍÑWindowsÖи÷ÖÖ¾ä±úµÄÀ§ÈÅ£¬Ö»ÐèÒªÃæ¶ÔC++ÖеĶÔÏó£¬ÕâÑùÒ»À´Ê¹¿ª·¢¸ü½Ó½ü¿ª·¢ÓïÑÔ¶øÔ¶Àëϵͳ¡££¨µ«ÎÒ¸öÈËÈÏΪÁ˽âϵͳԭÀí¶Ô¿ª·¢ºÜÓаïÖú£©

ÕýÒòΪMFCÊǽ¨Á¢ÔÚC++µÄ»ù´¡ÉÏ£¬ËùÒÔÎÒÇ¿µ÷C/C++ÓïÑÔ»ù´¡¶Ô¿ª·¢µÄÖØÒªÐÔ¡£ÀûÓÃC++µÄ·â×°ÐÔ¿ª·¢Õß¿ÉÒÔ¸üÈÝÒ×Àí½âºÍ²Ù×÷¸÷ÖÖ´°¿Ú¶ÔÏó£»ÀûÓÃC++µÄÅÉÉúÐÔ¿ª·¢Õß¿ÉÒÔ¼õÉÙ¿ª·¢×Ô¶¨Òå´°¿ÚµÄʱ¼äºÍ´´Ôì³ö¿ÉÖØÓõĴúÂ룻ÀûÓÃÐéÄâÐÔ¿ÉÒÔÔÚ±ØÒªÊ±¸üºÃµÄ¿ØÖÆ´°¿ÚµÄ»î¶¯¡£¶øÇÒC++±¾ÉíËù¾ß±¸µÄ³¬Ô½CÓïÑÔµÄÌØÐÔ¶¼¿ÉÒÔʹ¿ª·¢Õß±àд³ö¸üÒ×Ó㬸üÁé»îµÄ´úÂë¡£

ÔÚMFCÖжÔÏûÏ¢µÄ´¦ÀíÀûÓÃÁËÏûÏ¢Ó³ÉäµÄ·½·¨£¬¸Ã·½·¨µÄ»ù´¡ÊǺ궨ÒåʵÏÖ£¬Í¨¹ýºê¶¨Ò彫ÏûÏ¢·ÖÅɵ½²»Í¬µÄ³ÉÔ±º¯Êý½øÐд¦Àí¡£ÏÂÃæ¼òµ¥½²ÊöÒ»ÏÂÕâÖÖ·½·¨µÄʵÏÖ·½·¨£º

´úÂëÈçÏÂ
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)	
//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()	
//}}AFX_MSG_MAP
	ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)
END_MESSAGE_MAP()
¾­¹ý±àÒëºó£¬´úÂë±»Ìæ»»ÎªÈçÏÂÐÎʽ£¨ÕâÖ»ÊÇ×÷½²½â£¬Êµ¼ÊÇé¿ö±ÈÕ⸴Ôӵöࣩ£º
//BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)	
CMainFrame::newWndProc(...)
{
	switch(...)
	{
		//{{AFX_MSG_MAP(CMainFrame)
		//	ON_WM_CREATE()	
		case(WM_CREATE):
			OnCreate(...);
		break;
		//}}AFX_MSG_MAP
		//	ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)
		case(WM_COMMAND):
			if(HIWORD(wP)==ID_FONT_DROPDOWN)
			{
				DoNothing(...);
			}
		break;
	//END_MESSAGE_MAP()
	}
}
newWndProc¾ÍÊÇ´°¿Ú¹ý³ÌÖ»ÒªÊǸÃÀàµÄʵÀýÉú³ÉµÄ´°¿Ú¶¼Ê¹Óøô°¿Ú¹ý³Ì¡£

ËùÒÔÁ˽âÁËWindowsµÄÏûÏ¢»úÖÆÔÚ¼ÓÉ϶ÔÏûÏ¢Ó³ÉäµÄÀí½â¾ÍºÜÈÝÒ×Á˽âMFC¿ª·¢µÄ»ù±¾Ë¼Â·ÁË¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


1.4 ÀûÓÃMFC½øÐпª·¢µÄͨÓ÷½·¨½éÉÜ

ÒÔÏÂÊÇÎÒÔÚ×î³õѧϰVCʱËù³£ÓõĿª·¢Ë¼Â·ºÍ·½·¨£¬Ï£ÍûÄܶԳõѧVCµÄÅóÓÑÓÐËù°ïÖúºÍÆô·¢¡£

1¡¢¿ª·¢ÐèÒª¶ÁдÎļþµÄÓ¦ÓóÌÐò²¢ÇÒÓмòµ¥µÄÊäÈëºÍÊä³ö¿ÉÒÔÀûÓõ¥ÎĵµÊӽṹ¡£

2¡¢¿ª·¢×¢Öؽ»»¥µÄ¼òµ¥Ó¦ÓóÌÐò¿ÉÒÔʹÓöԻ°¿òΪ»ù´¡µÄ´°¿Ú£¬Èç¹ûÎļþ¶Áд¼òµ¥Õâ¿ÉÀûÓÃCFile½øÐС£

3¡¢¿ª·¢×¢Öؽ»»¥²¢ÇÒÎļþ¶Áд¸´Ôӵĵļòµ¥Ó¦ÓóÌÐò¿ÉÒÔÀûÓÃÒÔCFormViewΪ»ù´¡Êӵĵ¥ÎĵµÊӽṹ¡£

4¡¢ÀûÓöԻ°¿òµÃµ½Óû§ÊäÈëµÄÊý¾Ý£¬Ôڵȼ¶Ìá¸ßºó¿ÉʹÓþ͵ØÊäÈë¡£

5¡¢ÔÚ¶Ô¶àÎĵµÒªÇó²»Ç¿ÁÒʱ¾¡Á¿±ÜÃâ¶àÎĵµÊӽṹ£¬¿ÉÒÔÀûÓ÷ָôÌõ²úÉúµ¥Îĵµ¶àÊӽṹ¡£

6¡¢ÔÚÒªÇóÔÚ¶à¸öÎĵµ¼ä´«µÝÊý¾ÝʱʹÓöàÎĵµÊӽṹ¡£

7¡¢Ñ§»áÀûÓÃ×Ó´°¿Ú£¬²¢ÔÚ×Ô¶¨ÒåµÄ×Ó´°¿Ú°üº¬¶à¸ö¿Ø¼þ´ïµ½·â×°¹¦ÄܵÄÄ¿µÄ¡£

8¡¢¾¡Á¿±ÜÃâʹÓöàÎĵµ¶àÊӽṹ¡£

9¡¢²»ÒªÊ¹ÓöàÖØ¼Ì³Ð²¢¾¡Á¿¼õÉÙÒ»¸öÀàÖзâ×°¹ý¶àµÄ¹¦ÄÜ¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


1.5 MFCÖг£ÓÃÀ࣬ºê£¬º¯Êý½éÉÜ

³£ÓÃÀà

CRect£ºÓÃÀ´±íʾ¾ØÐεÄÀ࣬ӵÓÐËĸö³ÉÔ±±äÁ¿£ºtop left bottom right¡£·Ö±ð±íÊÇ×óÉϽǺÍÓÒϽǵÄ×ø±ê¡£¿ÉÒÔͨ¹ýÒÔÏµķ½·¨¹¹Ô죺

  • CRect( int l, int t, int r, int b ); Ö¸Ã÷Ëĸö×ø±ê

  • CRect( const RECT& srcRect ); ÓÉRECT½á¹¹¹¹Ôì

  • CRect( LPCRECT lpSrcRect ); ÓÉRECT½á¹¹¹¹Ôì

  • CRect( POINT point, SIZE size ); ÓÐ×óÉϽÇ×ø±êºÍ³ß´ç¹¹Ôì

  • CRect( POINT topLeft, POINT bottomRight ); ÓÐÁ½µã×ø±ê¹¹Ôì

ÏÂÃæ½éÉܼ¸¸ö³ÉÔ±º¯Êý£º

  • int Width( ) const; µÃµ½¿í¶È
  • int Height( ) const; µÃµ½¸ß¶È
  • CSize Size( ) const; µÃµ½³ß´ç
  • CPoint& TopLeft( ); µÃµ½×óÉϽÇ×ø±ê
  • CPoint& BottomRight( ); µÃµ½ÓÒϽÇ×ø±ê
  • CPoint CenterPoint( ) const; µÃµ±ÖÐÐÄ×ø±ê
´ËÍâ¾ØÐοÉÒԺ͵㣨CPoint£©Ïà¼Ó½øÐÐÎ»ÒÆ£¬ºÍÁíÒ»¸ö¾ØÐÎÏà¼ÓµÃµ½¡°²¢¡±²Ù×÷ºóµÄ¾ØÐΡ£

CPoint£ºÓÃÀ´±íʾһ¸öµãµÄ×ø±ê£¬ÓÐÁ½¸ö³ÉÔ±±äÁ¿£ºx y¡£ ¿ÉÒÔºÍÁíÒ»¸öµãÏà¼Ó¡£

CString£ºÓÃÀ´±íʾ¿É±ä³¤¶ÈµÄ×Ö·û´®¡£Ê¹ÓÃCString¿É²»Ö¸Ã÷ÄÚ´æ´óС£¬CString»á¸ù¾ÝÐèÒª×ÔÐзÖÅä¡£ÏÂÃæ½éÉܼ¸¸ö³ÉÔ±º¯Êý£º

  • GetLength µÃµ½×Ö·û´®³¤¶È
  • GetAt µÃµ½Ö¸¶¨Î»Öô¦µÄ×Ö·û
  • operator + Ï൱ÓÚstrcat
  • void Format( LPCTSTR lpszFormat, ... ); Ï൱ÓÚsprintf
  • Find ²éÕÒÖ¸¶¨×Ö·û£¬×Ö·û´®
  • Compare ±È½Ï
  • CompareNoCase ²»Çø·Ö´óСд±È½Ï
  • MakeUpper ¸ÄΪСд
  • MakeLower ¸ÄΪ´óд

CStringArray£ºÓÃÀ´±íʾ¿É±ä³¤¶ÈµÄ×Ö·û´®Êý×é¡£Êý×éÖÐÿһ¸öÔªËØÎªCString¶ÔÏóµÄʵÀý¡£ÏÂÃæ½éÉܼ¸¸ö³ÉÔ±º¯Êý£º

  • Add Ôö¼ÓCString
  • RemoveAt ɾ³ýÖ¸¶¨Î»ÖÃCString¶ÔÏó
  • RemoveAll ɾ³ýÊý×éÖÐËùÓÐCString¶ÔÏó
  • GetAt µÃµ½Ö¸¶¨Î»ÖõÄCString¶ÔÏó
  • SetAt ÐÞ¸ÄÖ¸¶¨Î»ÖõÄCString¶ÔÏó
  • InsertAt ÔÚijһλÖòåÈëCString¶ÔÏó

³£Óúê

RGB

TRACE

ASSERT

VERIFY

³£Óú¯Êý

CWindApp* AfxGetApp();

HINSTANCE AfxGetInstanceHandle( );

HINSTANCE AfxGetResourceHandle( );

int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );ÓÃÓÚµ¯³öÒ»¸öÏûÏ¢¿ò

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/




2.1 ºÍGUIÓйصĸ÷ÖÖ¶ÔÏó

ÔÚWindowsÖÐÓи÷ÖÖGUI¶ÔÏ󣨲»ÒªºÍC++¶ÔÏó»ìÏý£©£¬µ±ÄãÔÚ½øÐлæÍ¼¾ÍÐèÒªÀûÓÃÕâЩ¶ÔÏó¡£¶ø¸÷ÖÖ¶ÔÏó¶¼ÓµÓи÷ÖÖÊôÐÔ£¬ÏÂÃæ·Ö±ð½²Êö¸÷ÖÖGUI¶ÔÏóºÍÓµÓеÄÊôÐÔ¡£

×ÖÌå¶ÔÏóCFontÓÃÓÚÊä³öÎÄ×ÖʱѡÓò»Í¬·ç¸ñºÍ´óСµÄ×ÖÌå¡£¿ÉÑ¡ÔñµÄ·ç¸ñ°üÀ¨£ºÊÇ·ñΪбÌ壬ÊÇ·ñΪ´ÖÌ壬×ÖÌåÃû³Æ£¬ÊÇ·ñÓÐÏ»®Ïߵȡ£ÑÕÉ«ºÍ±³¾°É«²»ÊôÓÚ×ÖÌåµÄÊôÐÔ¡£¹ØÓÚÈçºÎ´´½¨ºÍʹÓÃ×ÖÌåÔÚ2.2 ÔÚ´°¿ÚÖÐÊä³öÎÄ×ÖÖлáÏêϸ½²½â¡£

Ë¢×ÓCBrush¶ÔÏó¾ö¶¨Ìî³äÇøÓòʱËù²ÉÓõÄÑÕÉ«»òÄ£°å¡£¶ÔÓÚÒ»¸ö¹Ì¶¨É«µÄË¢×ÓÀ´½²ËüµÄÊôÐÔΪÑÕÉ«£¬ÊÇ·ñ²ÉÓÃÍø¸ñºÍÍø¸ñµÄÀàÐÍÈçˮƽµÄ£¬´¹Ö±µÄ£¬½»²æµÄµÈ¡£ÄãÒ²¿ÉÒÔÀûÓÃ8*8µÄλͼÀ´´´½¨Ò»¸ö×Ô¶¨ÒåÄ£°åµÄË¢×Ó£¬ÔÚʹÓÃÕâÖÖË¢×ÓÌî³äʱϵͳ»áÀûÓÃλͼÖð²½Ìî³äÇøÓò¡£¹ØÓÚÈçºÎ´´½¨ºÍʹÓÃË¢×ÓÔÚ2.3 ʹÓÃË¢×Ó£¬±Ê½øÐлæÍ¼ÖлáÏêϸ½²½â¡£

»­±ÊCPen¶ÔÏóÔÚ»­µãºÍ»­ÏßʱÓÐÓá£ËüµÄÊôÐÔ°üÀ¨ÑÕÉ«£¬¿í¶È£¬Ïߵķç¸ñ£¬ÈçÐéÏߣ¬ÊµÏߣ¬µã»®Ïߵȡ£¹ØÓÚÈçºÎ´´½¨ºÍʹÓû­±ÊÔÚ2.3 ʹÓÃË¢×Ó£¬±Ê½øÐлæÍ¼ÖлáÏêϸ½²½â¡£

λͼCBitmap¶ÔÏó¿ÉÒÔ°üº¬Ò»·ùͼÏñ£¬¿ÉÒÔ±£´æÔÚ×ÊÔ´ÖС£¹ØÓÚÈçºÎʹÓÃλͼÔÚ2.4 ÔÚ´°¿ÚÖлæÖÆÉ豸Ïà¹ØÎ»Í¼£¬Í¼±ê£¬É豸ÎÞ¹ØÎ»Í¼ÖлáÏêϸ½²½â¡£

»¹ÓÐÒ»ÖÖÌØÊâµÄGUI¶ÔÏóÊǶà±ßÐΣ¬ÀûÓöà±ßÐοÉÒԺܺõÄÏÞÖÆ×÷Í¼ÇøÓò»òÊǸı䴰¿ÚÍâÐÍ¡£¹ØÓÚÈçºÎ´´½¨ºÍʹÓöà±ßÐÎÔÚ2.6 ¶à±ßÐκͼôÌùÇøÓòÖлáÏêϸ½²½â¡£

ÔÚWindowsÖÐʹÓÃGUI¶ÔÏó±ØÐë×ñÊØÒ»¶¨µÄ¹æÔò¡£Ê×ÏÈÐèÒª´´½¨Ò»¸öºÏ·¨µÄ¶ÔÏ󣬲»Í¬µÄ¶ÔÏó´´½¨·½·¨²»Í¬¡£È»ºóÐèÒª½«¸ÃGUI¶ÔÏóÑ¡ÈëDCÖУ¬Í¬Ê±±£´æDCÖÐÔ­À´µÄGUI¶ÔÏó¡£Èç¹ûÑ¡ÈëÒ»¸ö·Ç·¨µÄ¶ÔÏ󽫻áÒýÆðÒì³£¡£ÔÚʹÓÃÍêºóÓ¦¸Ã»Ö¸´Ô­À´µÄ¶ÔÏó£¬ÕâÒ»µãÌØ±ðÖØÒª£¬Èç¹û±£´æÒ»¸öÁÙʱ¶ÔÏóÔÚDCÖУ¬¶øÔÚÁÙʱ¶ÔÏó±»Ïú»Ùºó¿ÉÄÜÒýÆðÒì³£¡£ÓÐÒ»µã±ØÐë×¢Ò⣬ÿһ¸ö¶ÔÏóÔÚÖØÐ´´½¨Ç°±ØÐëÏú»Ù£¬ÏÂÃæµÄ´úÂëÑÝʾÁËÕâÒ»ÖÖ°²È«µÄʹÓ÷½·¨£º

OnDraw(CDC* pDC)
{
	CPen pen1,pen2;
	pen1.CreatePen(PS_SOLID,2,RGB(128,128,128));//´´½¨¶ÔÏó
	pen2.CreatePen(PS_SOLID,2,RGB(128,128,0));//´´½¨¶ÔÏó
	CPen* pPenOld=(CPen*)pDC->SelectObject(&pen1);//Ñ¡Ôñ¶ÔÏó½øDC
	drawWithPen1...
	(CPen*)pDC->SelectObject(&pen2);//Ñ¡Ôñ¶ÔÏó½øDC
	drawWithPen2...
	pen1.DeleteObject();//Ôٴδ´½¨Ç°ÏÈÏú»Ù
	pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));//Ôٴδ´½¨¶ÔÏó
	(CPen*)pDC->SelectObject(&pen1);//Ñ¡Ôñ¶ÔÏó½øDC
	drawWithPen1...
	pDC->SelectObject(pOldPen);//»Ö¸´
}

´ËÍâϵͳÖл¹ÓµÓÐһЩ¿â´æGUI¶ÔÏó£¬Äã¿ÉÒÔÀûÓÃCDC::SelectStockObject(SelectStockObject( int nIndex )Ñ¡ÈëÕâЩ¶ÔÏó£¬ËüÃǰüÀ¨Ò»Ð©¹Ì¶¨ÑÕÉ«µÄË¢×Ó£¬»­±ÊºÍһЩ»ù±¾×ÖÌå¡£

  • BLACK_BRUSH   Black brush.

  • DKGRAY_BRUSH   Dark gray brush.

  • GRAY_BRUSH   Gray brush.

  • HOLLOW_BRUSH   Hollow brush.

  • LTGRAY_BRUSH   Light gray brush.

  • NULL_BRUSH   Null brush.

  • WHITE_BRUSH   White brush.

  • BLACK_PEN   Black pen.

  • NULL_PEN   Null pen.

  • WHITE_PEN   White pen.

  • ANSI_FIXED_FONT   ANSI fixed system font.

  • ANSI_VAR_FONT   ANSI variable system font.

  • DEVICE_DEFAULT_FONT   Device-dependent font.

  • OEM_FIXED_FONT   OEM-dependent fixed font.

  • SYSTEM_FONT   The system font. By default, Windows uses the system font to draw menus, dialog-box controls, and other text. In Windows versions 3.0 and later, the system font is proportional width; earlier versions of Windows use a fixed-width system font.

  • SYSTEM_FIXED_FONT   The fixed-width system font used in Windows prior to version 3.0. This object is available for compatibility with earlier versions of Windows.

  • DEFAULT_PALETTE   Default color palette. This palette consists of the 20 static colors in the system palette.
ÕâЩ¶ÔÏóÁôÔÚDCÖÐÊǰ²È«µÄ£¬ËùÒÔÄã¿ÉÒÔÀûÓÃÑ¡Èë¿â´æ¶ÔÏóÀ´×÷Ϊ»Ö¸´DCÖÐGUI¶ÔÏó¡£

´ó¼Ò¿ÉÄܶ¼×¢Òâµ½ÁË»æÍ¼Ê±¶¼ÐèÒªÒ»¸öDC¶ÔÏó£¬DC£¨Device ContextÉ豸»·¾³£©¶ÔÏóÊÇÒ»¸ö³éÏóµÄ×÷ͼ»·¾³£¬¿ÉÄÜÊǶÔÓ¦ÆÁÄ»£¬Ò²¿ÉÄÜÊǶÔÓ¦´òÓ¡»ú»òÆäËü¡£Õâ¸ö»·¾³ÊÇÉ豸Î޹صģ¬ËùÒÔÄãÔÚ¶Ô²»Í¬µÄÉ豸Êä³öʱֻÐèҪʹÓò»Í¬µÄÉ豸»·¾³¾ÍÐÐÁË£¬¶ø×÷ͼ·½Ê½¿ÉÒÔÍêÈ«²»±ä¡£ÕâÒ²¾ÍÊÇWindowsÒ«ÑÛµÄÒ»µãÉ豸ÎÞ¹ØÐÔ¡£ÈçͬÄ㽫¶ÔÒ»·ù»­Ê¹ÓÃÕÕÏà»ú»ò¸´Ó¡»ú½«»á²úÉú²»Í¬µÄÊä³ö£¬¶ø²»ÐèÒª¶Ô»­½øÐÐÈκε÷Õû¡£DCµÄʹÓûᴩ²åÔÚ±¾ÕÂÖнøÐнéÉÜ¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


2.2 ÔÚ´°¿ÚÖÐÊä³öÎÄ×Ö

ÔÚÕâÀïÎÒ¼Ù¶¨¶ÁÕßÒѾ­ÀûÓÃApplicationWizardÉú³ÉÁËÒ»¸öSDI½çÃæµÄ³ÌÐò´úÂë¡£½ÓÏÂÀ´µÄÄãÖ»ÐèÒªÔÚCViewÅÉÉúÀàµÄOnDraw³ÉÔ±º¯ÊýÖмÓÈë»æÍ¼´úÂë¾Í¿ÉÒÔÁË¡£ÔÚÕâÀïÎÒÐèÒª½âÊÍÒ»ÏÂOnDrawº¯ÊýµÄ×÷Óã¬OnDrawº¯Êý»áÔÚ´°¿ÚÐèÒªÖØ»æÊ±×Ô¶¯±»µ÷Ó㬴«ÈëµÄ²ÎÊýCDC* pDC¶ÔÓ¦µÄ¾ÍÊÇDC»·¾³¡£Ê¹ÓÃOnDrawµÄÓŵã¾ÍÔÚÓÚÔÚÄãʹÓôòÓ¡¹¦ÄܵÄʱºò´«ÈëOnDrawµÄDC»·¾³½«»áÊÇ´òÓ¡»ú»æÍ¼»·¾³£¬Ê¹ÓôòÓ¡Ô¤ÀÀʱ´«ÈëµÄÊÇÒ»¸ö³ÆÎªCPreviewDCµÄ»æÍ¼»·¾³£¬ËùÒÔÄãÖ»ÐèÒªÒ»·Ý´úÂë¾Í¿ÉÒÔÍê³É´°¿Ú/´òÓ¡Ô¤ÀÀ/´òÓ¡»ú»æÍ¼ÈýÖØ¹¦ÄÜ¡£ÀûÓÃWindowsµÄÉ豸ÎÞ¹ØÐÔºÍM$Ϊ´òÓ¡Ô¤ÀÀËù±àдµÄÉÏǧÐдúÂëÄã¿ÉÒÔºÜÈÝÒ×µÄÍê³ÉÒ»¸ö¾ßÓÐËù¼û¼´ËùµÃµÄÈí¼þ¡£

Êä³öÎÄ×ÖÒ»°ãʹÓÃCDC::BOOL TextOut( int x, int y, const CString& str )ºÍCDC::int DrawText( const CString& str, LPRECT lpRect, UINT nFormat )Á½¸öº¯Êý£¬¶ÔTextOutÀ´½²Ö»ÄÜÊä³öµ¥ÐеÄÎÄ×Ö£¬¶øDrawText¿ÉÒÔÖ¸¶¨ÔÚÒ»¸ö¾ØÐÎÖÐÊä³öµ¥Ðлò¶àÐÐÎÄ×Ö£¬²¢ÇÒ¿ÉÒԹ涨¶ÔÆë·½Ê½ºÍʹÓúÎÖÖ·ç¸ñ¡£nFormat¿ÉÒÔÊǶàÖÖÒÔϱê¼ÇµÄ×éºÏ£¨ÀûÓÃλ»ò²Ù×÷£©ÒԴﵽѡÔñÊä³ö·ç¸ñµÄÄ¿µÄ¡£

  • DT_BOTTOMµ×²¿¶ÔÆë   Specifies bottom-justified text. This value must be combined with DT_SINGLELINE.

  • DT_CALCRECT¼ÆËãÖ¸¶¨ÎÄ×ÖʱËùÐèÒª¾ØÐγߴ砠 Determines the width and height of the rectangle. If there are multiple lines of text, DrawText will use the width of the rectangle pointed to by lpRect and extend the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText will modify the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text, but does not draw the text.

  • DT_CENTERÖв¿¶ÔÆë   Centers text horizontally.

  • DT_END_ELLIPSIS or DT_PATH_ELLIPSIS   Replaces part of the given string with ellipses, if necessary, so that the result fits in the specified rectangle. The given string is not modified unless the DT_MODIFYSTRING flag is specified.

    You can specify DT_END_ELLIPSIS to replace characters at the end of the string, or DT_PATH_ELLIPSIS to replace characters in the middle of the string. If the string contains backslash (\) characters, DT_PATH_ELLIPSIS preserves as much as possible of the text after the last backslash.

  • DT_EXPANDTABS   Expands tab characters. The default number of characters per tab is eight.

  • DT_EXTERNALLEADING   Includes the font’s external leading in the line height. Normally, external leading is not included in the height of a line of text.

  • DT_LEFT×ó¶ÔÆë   Aligns text flush-left.

  • DT_MODIFYSTRING   Modifies the given string to match the displayed text. This flag has no effect unless the DT_END_ELLIPSIS or DT_PATH_ELLIPSIS flag is specified.

    Note Some uFormat flag combinations can cause the passed string to be modified. Using DT_MODIFYSTRING with either DT_END_ELLIPSIS or DT_PATH_ELLIPSIS may cause the string to be modified, causing an assertion in the CString override.

  • DT_NOCLIP   Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used.

  • DT_NOPREFIX½ûֹʹÓÃ&ǰ׺   Turns off processing of prefix characters. Normally, DrawText interprets the ampersand (&) mnemonic-prefix character as a directive to underscore the character that follows, and the two-ampersand (&&) mnemonic-prefix characters as a directive to print a single ampersand. By specifying DT_NOPREFIX, this processing is turned off.

  • DT_PATH_ELLIPSIS   

  • DT_RIGHTÓÒ¶ÔÆë   Aligns text flush-right.

  • DT_SINGLELINEµ¥ÐÐÊä³ö   Specifies single line only. Carriage returns and linefeeds do not break the line.

  • DT_TABSTOPÉèÖÃTAB×Ö·ûËùÕ¼¿í¶È   Sets tab stops. The high-order byte of nFormat is the number of characters for each tab. The default number of characters per tab is eight.

  • DT_TOP¶¨²¿¶ÔÆë   Specifies top-justified text (single line only).

  • DT_VCENTERÖв¿¶ÔÆë   Specifies vertically centered text (single line only).

  • DT_WORDBREAKÿÐÐÖ»ÔÚµ¥´Ê¼ä±»ÕÛÐР  Specifies word-breaking. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by lpRect. A carriage return–linefeed sequence will also break the line.

ÔÚÊä³öÎÄ×ÖʱÈç¹ûÏ£Íû¸Ä±äÎÄ×ÖµÄÑÕÉ«£¬Äã¿ÉÒÔÀûÓÃCDC::SetTextColor( COLORREF crColor )½øÐÐÉèÖã¬Èç¹ûÄãÏ£Íû¸Ä±ä±³¾°É«¾ÍÀûÓÃCDC::SetBkColor( COLORREF crColor )£¬ºÜ¶àʱºòÄã¿ÉÄÜÐèҪ͸Ã÷µÄ±³¾°É«Äã¿ÉÒÔÀûÓÃCDC::SetBkMode( int nBkMode )ÉèÖ㬿ɽÓÊܵIJÎÊýÓÐ

  • OPAQUE   Background is filled with the current background color before the text, hatched brush, or pen is drawn. This is the default background mode.

  • TRANSPARENT   Background is not changed before drawing.

½ÓÏÂÀ´½²½²ÈçºÎ´´½¨×ÖÌ壬Äã¿ÉÒÔ´´½¨µÄ×ÖÌåÓÐÁ½ÖÖ£º¿â´æ×ÖÌåCDC::CreateStockObject( int nIndex )ºÍ×Ô¶¨Òå×ÖÌå¡£
ÔÚ´´½¨·Ç¿â´æ×ÖÌåʱÐèÒªÌî³äÒ»¸öLOGFONT½á¹¹²¢Ê¹ÓÃCFont::CreateFontIndirect(const LOGFONT* lpLogFont )£¨¿ÉÒԲο¼ÎÄÕÂÔÚͬһϵͳÖÐÏÔʾGB×Ö·ûºÍBIG5×Ö·û£©£¬»òʹÓÃCFont::CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename )ÆäÖеIJÎÊýºÍLOGFONTÖеķÖÁ¿ÓÐÒ»¶¨µÄ¶ÔÓ¦¹ØÏµ¡£ÏÂÃæ·Ö±ð½²½â²ÎÊýµÄÒâÒ壺

nHeight ×ÖÌå¸ß¶È£¨Âß¼­µ¥Î»£©µÈÓÚÁãΪȱʡ¸ß¶È£¬·ñÔòÈ¡¾ø¶ÔÖµ²¢ºÍ¿ÉÓõÄ×ÖÌå¸ß¶È½øÐÐÆ¥Åä¡£
nWidth ¿í¶È£¨Âß¼­µ¥Î»£©Èç¹ûΪÁãÔòʹÓÿÉÓõĺá×ݱȽøÐÐÆ¥Åä¡£
nEscapement ³ö¿ÚʸÁ¿ÓëXÖá¼äµÄ½Ç¶È
nOrientation ×ÖÌå»ùÏßÓëXÖá¼äµÄ½Ç¶È
nWeight ×ÖÌå´Öϸ£¬¿ÉÈ¡ÒÔÏÂÖµ
Constant Value
FW_DONTCARE 0
FW_THIN 100
FW_EXTRALIGHT 200
FW_ULTRALIGHT 200
FW_LIGHT 300
FW_NORMAL 400
FW_REGULAR 400
FW_MEDIUM 500
FW_SEMIBOLD 600
FW_DEMIBOLD 600
FW_BOLD 700
FW_EXTRABOLD 800
FW_ULTRABOLD 800
FW_BLACK 900
FW_HEAVY 900

bItalic ÊÇ·ñΪбÌå
bUnderline ÊÇ·ñÓÐÏ»®Ïß
cStrikeOut ÊÇ·ñ´øÉ¾³ýÏß
nCharSet Ö¸¶¨×Ö·û¼¯ºÏ£¬¿ÉÈ¡ÒÔÏÂÖµ
Constant Value
ANSI_CHARSET 0
DEFAULT_CHARSET 1
SYMBOL_CHARSET 2
SHIFTJIS_CHARSET 128
OEM_CHARSET 255

nOutPrecision Êä³ö¾«¶È
OUT_CHARACTER_PRECIS OUT_STRING_PRECIS
OUT_DEFAULT_PRECIS OUT_STROKE_PRECIS
OUT_DEVICE_PRECIS OUT_TT_PRECIS
OUT_RASTER_PRECIS

nClipPrecision ¼ô¼­¾«¶È£¬¿ÉÈ¡ÒÔÏÂÖµ
CLIP_CHARACTER_PRECIS CLIP_MASK
CLIP_DEFAULT_PRECIS CLIP_STROKE_PRECIS
CLIP_ENCAPSULATE CLIP_TT_ALWAYS
CLIP_LH_ANGLES

nQuality Êä³öÖÊÁ¿£¬¿ÉÈ¡ÒÔÏÂÖµ

  • DEFAULT_QUALITY   Appearance of the font does not matter.

  • DRAFT_QUALITY   Appearance of the font is less important than when PROOF_QUALITY is used. For GDI raster fonts, scaling is enabled. Bold, italic, underline, and strikeout fonts are synthesized if necessary.

  • PROOF_QUALITY   Character quality of the font is more important than exact matching of the logical-font attributes. For GDI raster fonts, scaling is disabled and the font closest in size is chosen. Bold, italic, underline, and strikeout fonts are synthesized if necessary.
nPitchAndFamily ×ÖÌå¼äµÄ¼ä¾à
lpszFacename Ö¸¶¨×ÖÌåÃû³Æ£¬ÎªÁ˵õ½ÏµÍ³ËùÓµÓеÄ×ÖÌå¿ÉÒÔÀûÓÃEmunFontFamiliesEx¡££¨¿ÉÒԲο¼ÎÄÕÂÔÚͬһϵͳÖÐÏÔʾGB×Ö·ûºÍBIG5×Ö·û£©

´ËÍâ¿ÉÒÔÀûÓÃCFontDialogÀ´µÃµ½Óû§Ñ¡ÔñµÄ×ÖÌåµÄLOGFONTÊý¾Ý¡£

×îºóÎÒ½²Ò»ÏÂÎı¾×ø±êµÄ¼ÆË㣬ÀûÓÃCDC::GetTextExtent( const CString& str )¿ÉÒԵõ½×Ö·û´®µÄÔÚÊä³öʱËùÕ¼ÓõĿí¶ÈºÍ¸ß¶È£¬ÕâÑù¾Í¿ÉÒÔÔÚÊÖ¹¤Êä³ö¶àÐÐÎÄ×ÖʱʹÓÃÕýÈ·µÄÐоࡣÁíÍâÈç¹ûÐèÒª¸ü¾«È·µÄ¶Ô×ÖÌå¸ß¶ÈºÍ¿í¶È½øÐмÆËã¾ÍÐèҪʹÓÃCDC::GetTextMetrics( LPTEXTMETRIC lpMetrics ) ¸Ãº¯Êý½«»áÌî³äTEXTMETRIC½á¹¹£¬¸Ã½á¹¹ÖеķÖÁ¿¿ÉÒԷdz£¾«È·µÄÃèÊö×ÖÌåµÄ¸÷ÖÖÊôÐÔ¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


2.3 ʹÓõ㣬ˢ×Ó£¬±Ê½øÐлæÍ¼

ÔÚWindowsÖл­µãµÄ·½·¨ºÜ¼òµ¥£¬Ö»ÐèÒªµ÷ÓÃCOLORREF CDC::SetPixel( int x, int y, COLORREF crColor )¾Í¿ÉÒÔÔÚÖ¸¶¨µã»­ÉÏÖ¸¶¨ÑÕÉ«£¬Í¬Ê±·µ»ØÔ­À´µÄÑÕÉ«¡£COLORREF CDC::GetPixel( int x, int y)¿ÉÒԵõ½Ö¸¶¨µãµÄÑÕÉ«¡£ÔÚWindowsÖÐÓ¦¸ÃÉÙʹÓû­µãµÄº¯Êý£¬ÒòΪÕâÑù×öµÄÖ´ÐÐЧÂʱȽϵ͡£

Ë¢×Ӻͻ­±ÊÔÚWindows×÷ͼÖÐÊÇʹÓÃ×î¶àµÄGUI¶ÔÏ󣬱¾½ÚÔÚ½²½âË¢×Ӻͻ­±ÊʹÓ÷½·¨µÄͬʱҲ½²Êöһд»ù±¾×÷ͼº¯Êý¡£

ÔÚ»­µã»ò»­ÏßʱϵͳʹÓõ±Ç°DCÖеĻ­±Ê£¬ËùÒÔÔÚ´´½¨»­±Êºó±ØÐ뽫ÆäÑ¡ÈëDC²Å»áÔÚ»æÍ¼Ê±²úÉúЧ¹û¡£»­±Ê¿ÉÒÔͨ¹ýCPen¶ÔÏóÀ´²úÉú£¬Í¨¹ýµ÷ÓÃCPen::CreatePen( int nPenStyle, int nWidth, COLORREF crColor )À´´´½¨¡£ÆäÖÐnPenStyleÖ¸Ãû»­±ÊµÄ·ç¸ñ£¬¿ÉÈ¡ÈçÏÂÖµ£º

  • PS_SOLID ʵÏß   Creates a solid pen.

  • PS_DASH ÐéÏߣ¬¿í¶È±ØÐëΪһ   Creates a dashed pen. Valid only when the pen width is 1 or less, in device units.

  • PS_DOT µãÏߣ¬¿í¶È±ØÐëΪһ   Creates a dotted pen. Valid only when the pen width is 1 or less, in device units.

  • PS_DASHDOT µã»®Ïߣ¬¿í¶È±ØÐëΪһ   Creates a pen with alternating dashes and dots. Valid only when the pen width is 1 or less, in device units.

  • PS_DASHDOTDOT Ë«µã»®Ïߣ¬¿í¶È±ØÐëΪһ   Creates a pen with alternating dashes and double dots. Valid only when the pen width is 1 or less, in device units.

  • PS_NULL ¿ÕÏߣ¬Ê¹ÓÃʱʲôҲ²»»á²úÉú   Creates a null pen.

  • PS_ENDCAP_ROUND ½áÊø´¦ÎªÔ²ÐΠ  End caps are round.

  • PS_ENDCAP_SQUARE ½áÊø´¦Îª·½ÐΠ  End caps are square.

nWidthºÍcrColorΪÏߵĿí¶ÈºÍÑÕÉ«¡£

Ë¢×ÓÊÇÔÚ»­·â±ÕÇúÏßʱÓÃÀ´Ìî³äµÄÑÕÉ«£¬ÀýÈçµ±Äã»­Ô²Ðλò·½ÐÎʱϵͳ»áÓõ±Ç°µÄË¢×Ó¶ÔÄÚ²¿½øÐÐÌî³ä¡£Ë¢×Ó¿ÉÀûÓÃCBrush¶ÔÏó²úÉú¡£Í¨¹ýÒÔϼ¸ÖÖº¯Êý´´½¨Ë¢×Ó£º

  • BOOL CreateSolidBrush( COLORREF crColor ); ´´½¨Ò»Ö̶ֹ¨ÑÕÉ«µÄË¢×Ó
  • BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); ´´½¨Ö¸¶¨ÑÕÉ«ºÍÍø¸ñµÄË¢×Ó£¬nIndex¿ÉÈ¡ÒÔÏÂÖµ£º
    • HS_BDIAGONAL   Downward hatch (left to right) at 45 degrees

    • HS_CROSS   Horizontal and vertical crosshatch

    • HS_DIAGCROSS   Crosshatch at 45 degrees

    • HS_FDIAGONAL   Upward hatch (left to right) at 45 degrees

    • HS_HORIZONTAL   Horizontal hatch

    • HS_VERTICAL   Vertical hatch
  • BOOL CreatePatternBrush( CBitmap* pBitmap ); ´´½¨ÒÔ8*8λͼΪģ°åµÄË¢×Ó

ÔÚÑ¡ÔñÁË»­±ÊºÍË¢×Óºó¾Í¿ÉÒÔÀûÓÃWindowsµÄ×÷ͼº¯Êý½øÐÐ×÷ͼÁË£¬»ù±¾µÄ»­Ïߺ¯ÊýÓÐÒÔϼ¸ÖÖ

  • CDC::MoveTo( int x, int y ); ¸Ä±äµ±Ç°µãµÄλÖÃ
  • CDC::LineTo( int x, int y ); »­Ò»ÌõÓɵ±Ç°µãµ½²ÎÊýÖ¸¶¨µãµÄÏß
  • CDC::BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); »­»¡Ïß
  • CDC::BOOL Polyline( LPPOINT lpPoints, int nCount ); ½«¶àÌõÏßÒÀ´ÎÐòÁ¬½Ó
»ù±¾µÄ×÷ͼº¯ÊýÓÐÒÔϼ¸ÖÖ£º
  • CDC::BOOL Rectangle( LPCRECT lpRect ); ¾ØÐÎ
  • CDC::RoundRect( LPCRECT lpRect, POINT point ); Ô²½Ç¾ØÐÎ
  • CDC::Draw3dRect( int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight ); 3D±ß¿ò
  • CDC::Chord( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); ÉÈÐÎ
  • CDC::Ellipse( LPCRECT lpRect ); ÍÖÔ²ÐÎ
  • CDC::Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );
  • CDC::Polygon( LPPOINT lpPoints, int nCount ); ¶à±ßÐÎ
¶ÔÓÚ¾ØÐΣ¬Ô²ÐλòÀàËÆµÄ·â±ÕÇúÏߣ¬ÏµÍ³»áʹÓû­±Ê»æÖƱßÔµ£¬Ê¹ÓÃË¢×ÓÌî³äÄÚ²¿¡£Èç¹ûÄ㲻ϣÍûÌî³ä»òÊÇ»­³ö±ßÔµ£¬Äã¿ÉÒÔÑ¡Èë¿ÕË¢×Ó£¨NULL_PEN£©»òÊÇ£¨NULL_BRUSH£©¿Õ±Ê¡£

ÏÂÃæµÄ´úÂë´´½¨Ò»ÌõÁ½ÏóËØ¿íµÄʵÏß²¢Ñ¡ÈëDC¡£²¢½øÐмòµ¥µÄ×÷ͼ£º
{
...
	CPen pen;
	pen.CreatePen(PS_SOLID,2,RGB(128,128,128));
	CPen* pOldPen=(CPen*)dc.SelectObject(&pen);
	dc.SelectStockObject(NULL_BRUSH);//Ñ¡Èë¿ÕË¢×Ó
	dc.Rectangle(CRect(0,0,20,20));//»­¾ØÐÎ
...
}

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


2.4 ÔÚ´°¿ÚÖлæÖÆÉ豸Ïà¹ØÎ»Í¼£¬Í¼±ê£¬É豸ÎÞ¹ØÎ»Í¼

ÔÚWindowsÖпÉÒÔ½«Ô¤ÏÈ×¼±¸ºÃµÄͼÏñ¸´ÖƵ½ÏÔÊ¾ÇøÓòÖУ¬ÕâÖÖÄڴ濽±´Ö´ÐÐÆðÀ´ÊǷdz£¿ìµÄ¡£ÔÚWindowsÖÐÌṩÁËÁ½ÖÖʹÓÃͼÐο½±´µÄ·½·¨£ºÍ¨¹ýÉ豸Ïà¹ØÎ»Í¼£¨DDB£©ºÍÉ豸ÎÞ¹ØÎ»Í¼£¨DIB£©¡£

DDB¿ÉÒÔÓÃMFCÖеÄCBitmapÀ´±íʾ£¬¶øDDBÒ»°ãÊÇ´æ´¢ÔÚ×ÊÔ´ÎļþÖУ¬ÔÚ¼ÓÔØÊ±Ö»ÐèҪͨ¹ý×ÊÔ´IDºÅ¾Í¿ÉÒÔ½«Í¼ÐÎ×°Èë¡£BOOL CBitmap::LoadBitmap( UINT nIDResource )¿ÉÒÔ×°ÈëÖ¸¶¨DDB£¬µ«ÊÇÔÚ»æÖÆÊ±±ØÐë½èÖúÁíÒ»¸öºÍµ±Ç°»æÍ¼DC¼æÈݵÄÄÚ´æDCÀ´½øÐС£Í¨¹ýCDC::BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )»æÖÆÍ¼ÐΣ¬Í¬Ê±Ö¸¶¨¹âÕ¤²Ù×÷µÄÀàÐÍ¡£BitBlt¿ÉÒÔ½«Ô´DCÖÐλͼ¸´ÖƵ½Ä¿µÄDCÖУ¬ÆäÖÐǰËĸö²ÎÊýΪĿµÄÇøÓòµÄ×ø±ê£¬½ÓÏÂÀ´ÊÇÔ´DCÖ¸Õ룬ȻºóÊÇÔ´DCÖÐµÄÆðÊ¼×ø±ê£¬ÓÉÓÚBitBltΪµÈ±ÈÀý¸´ÖÆ£¬ËùÒÔ²»ÐèÒªÔÙ´ÎÖ¸¶¨³¤¿í£¬£¨StretchBlt¿ÉÒÔ½øÐÐËõ·Å£©×îºóÒ»¸ö²ÎÊýΪ¹âÕ¤²Ù×÷µÄÀàÐÍ£¬¿ÉÈ¡ÒÔÏÂÖµ£º

  • BLACKNESS Êä³öÇøÓòΪºÚÉ«   Turns all output black.

  • DSTINVERT ·´É«Êä³öÇøÓò   Inverts the destination bitmap.

  • MERGECOPY ÔÚÔ´ºÍÄ¿µÄ¼äʹÓÃAND²Ù×÷   Combines the pattern and the source bitmap using the Boolean AND operator.

  • MERGEPAINT ÔÚ·´É«ºóµÄÄ¿µÄºÍÔ´¼äʹÓÃOR²Ù×÷   Combines the inverted source bitmap with the destination bitmap using the Boolean OR operator.

  • NOTSRCCOPY ½«·´É«ºóµÄÔ´¿½±´µ½Ä¿µÄÇø   Copies the inverted source bitmap to the destination.

  • PATINVERT Ô´ºÍÄ¿µÄ¼ä½øÐÐXOR²Ù×÷   Combines the destination bitmap with the pattern using the Boolean XOR operator.

  • SRCAND Ô´ºÍÄ¿µÄ¼ä½øÐÐAND²Ù×÷   Combines pixels of the destination and source bitmaps using the Boolean AND operator.

  • SRCCOPY ¸´ÖÆÔ´µ½Ä¿µÄÇø   Copies the source bitmap to the destination bitmap.

  • SRCINVERT Ô´ºÍÄ¿µÄ¼ä½øÐÐXOR²Ù×÷   Combines pixels of the destination and source bitmaps using the Boolean XOR operator.

  • SRCPAINT Ô´ºÍÄ¿µÄ¼ä½øÐÐOR²Ù×÷   Combines pixels of the destination and source bitmaps using the Boolean OR operator.

  • WHITENESS Êä³öÇøÓòΪ°×É«   Turns all output white.
ÏÂÃæÓôúÂëÑÝʾÕâÖÖ·½·¨£º
CYourView::OnDraw(CDC* pDC)
{
	CDC memDC;//¶¨ÒåÒ»¸ö¼æÈÝDC
	memDC.CreateCompatibleDC(pDC);//´´½¨DC
	CBitmap bmpDraw;
	bmpDraw.LoadBitmap(ID_BMP);//×°ÈëDDB
	CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw);//±£´æÔ­ÓÐDDB£¬²¢Ñ¡ÈëÐÂDDBÈëDC
	pDC->BitBlt(0,0,20,20,&memDC,0,0,SRCCOPY);//½«Ô´DCÖÐ(0,0,20,20)¸´ÖƵ½Ä¿µÄDC(0,0,20,20)
	pDC->BitBlt(20,20,40,40,&memDC,0,0,SRCAND);//½«Ô´DCÖÐ(0,0,20,20)ºÍÄ¿µÄDC(20,20,40,40)ÖÐÇøÓò½øÐÐAND²Ù×÷
	memDC.SelectObject(pbmpOld);//Ñ¡ÈëÔ­DDB
}

£¨Í¼±ê²¢²»ÊÇÒ»¸öGDI¶ÔÏó£¬ËùÒÔ²»ÐèҪѡÈëDC£©ÔÚMFCÖÐûÓÐÒ»¸öרÃŵÄͼ±êÀ࣬ÒòΪͼ±êµÄ²Ù×÷±È½Ï¼òµ¥£¬Ê¹ÓÃHICON CWinApp::LoadIcon( UINT nIDResource )»òÊÇHICON CWinApp::LoadStandardIcon( LPCTSTR lpszIconName ) ×°Èëºó¾Í¿ÉÒÔÀûÓÃBOOL CDC::DrawIcon( int x, int y, HICON hIcon )»æÖÆ¡£ÓÉÓÚÔÚͼ±êÖпÉÒÔÖ¸¶¨Í¸Ã÷ÇøÓò£¬ËùÒÔÔÚijЩÐèҪʹÓ÷ǹæÔòͼÐζøÇÒÃæ»ý²»´óµÄʱºòʹÓÃͼ±ê»á±È½Ï¼òµ¥¡£ÏÂÃæ¸ø³ö¼òµ¥µÄ´úÂ룺

OnDraw(CDC* pDC)
{
	HICON hIcon1=AfxGetApp()->LoadIcon(IDI_I1);
	HICON hIcon2=AfxGetApp()->LoadIcon(IDI_I2);
	pDC->DrawIcon(0,0,hIcon1);
	pDC->DrawIcon(0,40,hIcon2);
	DestroyIcon(hIcon1);
	DestroyIcon(hIcon2);
}

ͬÑùÔÚMFCҲûÓÐÌṩһ¸öDIBµÄÀ࣬ËùÒÔÔÚʹÓÃDIBλͼʱÎÒÃÇÐèÒª×Ô¼º¶ÁȡλͼÎļþÖеÄÍ·ÐÅÏ¢£¬²¢¶ÁÈëÊý¾Ý£¬²¢ÀûÓÃAPIº¯ÊýStretchDIBits»æÖÆ¡£Î»Í¼ÎļþÒÔBITMAPFILEHEADER½á¹¹¿ªÊ¼£¬È»ºóÊÇBITMAPINFOHEADER½á¹¹ºÍµ÷É«°æÐÅÏ¢ºÍÊý¾Ý£¬Æäʵλͼ¸ñʽÊÇͼÐθñʽÖÐ×î¼òµ¥µÄÒ»ÖÖ£¬¶øÇÒÒ²ÊÇWindows¿ÉÒÔÀí½âµÄÒ»ÖÖ¡£ÎÒ²»Ïêϸ½²½âDIBλͼµÄ½á¹¹£¬Ìṩһ¸öCDibÀ๩´ó¼ÒʹÓã¬Õâ¸öÀà°üº¬ÁË»ù±¾µÄ¹¦ÄÜÈ磺Load,Save,Draw¡£DownLoad CDib 4K

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


2.5 ʹÓø÷ÖÖÓ³É䷽ʽ

ËùνµÄÓ³É䷽ʽ¼òµ¥µã½²¾ÍÊÇ×ø±êµÄ°²ÅÅ·½Ê½£¬ÏµÍ³Ä¬ÈϵÄÓ³É䷽ʽΪMM_TEXT¼´X×ø±êÏòÓÒÔö¼Ó£¬Y×ø±êÏòÏÂÔö¼Ó£¬(0,0)ÔÚÆÁÄ»×óÉÏ·½£¬DCÖеÄÿһµã¾ÍÊÇÆÁÄ»ÉϵÄÒ»¸öÏóËØ¡£Ò²ÐíÄã»áÈÏΪÕâÖÖ·½Ê½ÏÂÊÇ×îºÃÀí½âµÄ£¬µ«ÊÇÒ»¸öµãºÍÏóËØ¶ÔÓ¦µÄ¹ØÏµÔÚÆÁÄ»ÉÏ¿´À´ÊÇÕý³£µÄ£¬µ«µ½ÁË´òÓ¡»úÉϾͻáºÜ²»Õý³£¡£ÒòΪÎÒÃÇ×÷ͼÊÇÒÔµãΪµ¥Î»²¢ÇÒ´òÓ¡»úµÄ·Ö±æÂÊÔ¶Ô¶±ÈÏÔʾÆ÷¸ß£¨800DPI 800µãÿӢ´ç£©ËùÒÔÔÚ´òÓ¡»úÉÏͼÐο´ÆðÀ´¾Í»áºÜС¡£ÕâÑù¾ÍÐèҪΪ´òÓ¡Áí×öÒ»Ì×´úÂë¶ø¼Ó´óÁ˹¤×÷Á¿¡£Èç¹ûÿ¸öµã¶ÔÓ¦0.1ºÁÃ×ÄÇôÔÚÆÁÄ»ÉϵÄͼÐξͻáºÍ´òÓ¡³öÀ´µÄͼÐÎÒ»Ñù´óС¡£

ͨ¹ýint CDC::SetMapMode( int nMapMode )¿ÉÒÔÖ¸¶¨Ó³É䷽ʽ£¬¿ÉÓõÄÓÐÒÔϼ¸ÖÖ£º

  • MM_HIENGLISH ÿµã¶ÔÓ¦0.001Ó¢´ç   Each logical unit is converted to 0.001 inch. Positive x is to the right; positive y is up.

  • MM_HIMETRIC ÿµã¶ÔÓ¦0.001ºÁÃ×   Each logical unit is converted to 0.01 millimeter. Positive x is to the right; positive y is up.

  • MM_LOENGLISH ÿµã¶ÔÓ¦0.01Ó¢´ç   Each logical unit is converted to 0.01 inch. Positive x is to the right; positive y is up.

  • MM_LOMETRIC ÿµã¶ÔÓ¦0.001ºÁÃ×   Each logical unit is converted to 0.1 millimeter. Positive x is to the right; positive y is up.

  • MM_TEXT ÏóËØ¶ÔÓ¦   Each logical unit is converted to 1 device pixel. Positive x is to the right; positive y is down.

ÒÔÉϼ¸ÖÖÓ³ÉäĬÈϵÄÔ­µãÔÚÆÁÄ»×óÉÏ·½¡£³ýMM_TEXTÍⶼΪX×ø±êÏòÓÒÔö¼Ó£¬Y×ø±êÏòÉÏÔö¼Ó£¬ºÍ×ÔÈ»×ø±êÊÇÒ»Öµġ£ËùÒÔÔÚ×÷ͼÊÇҪעÒâʲôʱºòÓ¦¸ÃʹÓøº×ø±ê¡£¶øÇÒÒÔÉϵÄÓ³Éä¶¼ÊÇX-YµÈ±ÈÀýµÄ£¬¼´ÏàͬµÄ³¤¶ÈÔÚX£¬YÖáÉÏÏÔʾµÄ³¤¶È¶¼ÊÇÏàͬµÄ¡£¹Û¿´²»Í¬Ó³ÉäЧ¹ûͼ DownLoad Sample

ÁíÍâµÄÒ»ÖÖÓ³É䷽ʽΪMM_ANISOTROPIC£¬ÕâÖÖ·½Ê½¿ÉÒԹ涨²»Í¬µÄ³¤¿í±ÈÀý¡£ÔÚÉèÖÃÕâÖÐÓ³É䷽ʽºó±ØÐëµ÷ÓÃCSize CDC::SetWindowExt( SIZE size )ºÍCSize CDC::SetViewportExt( SIZE size )À´É趨³¤¿í±ÈÀý¡£ÏµÍ³»á¸ù¾ÝÁ½´ÎÉ趨µÄ³¤¿íµÄ±ÈÖµÀ´È·¶¨³¤¿í±ÈÀý¡£ÏÂÃæ¸ø³öÒ»¶Î´úÂë±È½ÏÓ³ÉäǰºóµÄ³¤¿í±ÈÀý£º

OnDraw(CDC* pDC)
{
	CRect rcC1(200,0,400,200);
	pDC->FillSolidRect(rcC1,RGB(0,0,255));
	pDC->SetMapMode(MM_ANISOTROPIC );
	CSize sizeO;
	sizeO=pDC->SetWindowExt(5,5);
	TRACE("winExt %d %d\n",sizeO.cx,sizeO.cy);
	sizeO=pDC->SetViewportExt(5,10);
	TRACE("ViewExt %d %d\n",sizeO.cx,sizeO.cy);
	CRect rcC(0,0,200,200);
	pDC->FillSolidRect(rcC,RGB(0,128,0));
}
ÉÏÃæ´úÂëÔÚÓ³Éäºó»­³öµÄͼÐν«ÊÇÒ»¸ö³¤·½ÐΡ£¹Û¿´Ð§¹ûͼ DownLoad Sample

×îºó½²½²ÊÓÔ­µã£¨viewport origin£©,Äã¿ÉÒÔͨ¹ýµ÷ÓÃCPoint CDC::SetViewportOrg( POINT point )ÖØÐÂÉèÖÃÔ­µãµÄλÖã¬Õâ¾ÍÏà¶ÔÓÚ¶Ô×ø±ê½øÐÐÁËÎ»ÒÆ¡£ÀýÈçÄ㽫ԭµãÉèÖÃÔÚ(20,20)ÄÇôԭÀ´µÄ(0,0)¾Í±ä³ÉÁË(-20,-20)¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


2.6 ¶à±ßÐκͼôÌùÇøÓò

¶à±ßÐÎÒ²ÊÇÒ»¸öGDI¶ÔÏó£¬Í¬Ñù×ñÊØÆäËûGDI¶ÔÏóµÄ¹æÔò£¬Ö»ÊÇͨ³£¶¼²»½«ÆäÑ¡ÈëDCÖС£ÔÚMFCÖжà±ßÐÎÓÐCRgn±íʾ¡£¶à±ßÐÎÓÃÀ´±íʾһ¸ö²»Í¬Óë¾ØÐεÄÇøÓò£¬ºÍ¾ØÐξßÓÐÏàËÆµÄ²Ù×÷¡£È磺¼ì²âijµãÊÇ·ñÔÚÄÚ²¿£¬²¢²Ù×÷µÈ¡£´ËÍ⻹µÃµ½Ò»¸ö°üº¬´Ë¶à±ßÐεÄ×îС¾ØÐΡ£ÏÂÃæ½éÉÜһ϶à±ßÐÎÀàµÄ³ÉÔ±º¯Êý£º

  • CreateRectRgn ÓɾØÐδ´½¨Ò»¸ö¶à±ßÐÎ
  • CreateEllipticRgn ÓÉÍÖÔ²´´½¨Ò»¸ö¶à±ßÐÎ
  • CreatePolygonRgn ´´½¨Ò»¸öÓжà¸öµãΧ³ÉµÄ¶à±ßÐÎ
  • PtInRegion ijµãÊÇ·ñÔÚÄÚ²¿
  • CombineRgn Á½¸ö¶à±ßÐÎÏಢ
  • EqualRgn Á½¸ö¶à±ßÐÎÊÇ·ñÏàµÈ

ÔÚ±¾½ÚÖн²Ñݶà±ßÐεÄÒâÒåÔÚÓÚÖØÐÂÔÚ´°¿ÚÖÐ×÷ͼʱÌá¸ßЧÂÊ¡£ÒòΪÒý·¢´°¿ÚÖØ»æµÄÔ­ÒòÊÇij¸öÇøÓòʧЧ£¬¶øÊ§Ð§µÄÇøÓòÓöà±ßÐÎÀ´±íʾ¡£¼ÙÉè´°¿Ú´óСΪ500*400µ±ÉÏ·½µÄÁíÒ»¸ö´°¿Ú´Ó(0,0,10,10)ÒÆ¶¯µ½(20,20,30,30)Õâʱ(0,0,10,10)ÇøÓò¾ÍʧЧÁË£¬¶øÄãÖ»ÐèÒªÖØ»æÕⲿ·ÖÇøÓò¶ø²»ÊÇËùÓÐÇøÓò£¬ÕâÑùÄã³ÌÐòµÄÖ´ÐÐЧÂʾͻáÌá¸ß¡£

ͨ¹ýµ÷ÓÃAPIº¯Êýint GetClipRgn( HDC hdc, HRGN hrgn)¾Í¿ÉÒԵõ½Ê§Ð§ÇøÓò£¬µ«ÊÇÒ»°ãÓò»×ÅÄÇô¾«È·¶øÖ»ÐèµÃµ½°üº¬¸ÃÇøÓòµÄ×îС¾ØÐξͿÉÒÔÁË£¬ËùÒÔ¿ÉÒÔÀûÓÃint CDC::GetClipBox( LPRECT lpRect )Íê³ÉÕâÒ»¹¦ÄÜ¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/





3.1 Îĵµ ÊÓͼ ¿ò¼Ü´°¿Ú¼äµÄ¹ØÏµºÍÏûÏ¢´«Ë͹æÂÉ

ÔÚMFCÖÐM$ÒýÈëÁËÎĵµ-ÊӽṹµÄ¸ÅÄÎĵµÏ൱ÓÚÊý¾ÝÈÝÆ÷£¬ÊÓÏ൱Óڲ鿴Êý¾ÝµÄ´°¿Ú»òÊǺÍÊý¾Ý·¢Éú½»»¥µÄ´°¿Ú¡££¨ÕâÒ»½á¹¹ÔÚMFCÖеÄOLE£¬ODBC¿ª·¢Ê±Óֵõ½¸ü¶àµÄÍØÕ¹£©Òò´ËÒ»¸öÍêÕûµÄÓ¦ÓÃÒ»°ãÓÉËĸöÀà×é³É£ºCWinAppÓ¦ÓÃÀ࣬CFrameWnd´°¿Ú¿ò¼ÜÀ࣬CDocumentÎĵµÀ࣬CViewÊÓÀà¡££¨VC6ÖÐÖ§³Ö´´½¨²»´øÎĵµ-ÊÓµÄÓ¦Óã©

ÔÚ³ÌÐòÔËÐÐʱCWinApp½«´´½¨Ò»¸öCFrameWnd¿ò¼Ü´°¿ÚʵÀý£¬¶ø¿ò¼Ü´°¿Ú½«´´½¨ÎĵµÄ£°å£¬È»ºóÓÐÎĵµÄ£°å´´½¨ÎĵµÊµÀýºÍÊÓʵÀý£¬²¢½«Á½Õß¹ØÁª¡£Ò»°ãÀ´½²ÎÒÃÇÖ»Ðè¶ÔÎĵµºÍÊÓ½øÐвÙ×÷£¬¿ò¼ÜµÄ¸÷ÖÖÐÐΪÒѾ­±»MFC°²ÅźÃÁ˶ø²»ÐèÈËΪ¸ÉÔ¤£¬ÕâÒ²ÊÇM$Éè¼ÆÎĵµ-ÊӽṹµÄ±¾Ò⣬ÈÃÎÒÃǽ«×¢ÒâÁ¦·ÅÔÚÍê³ÉÈÎÎñÉ϶ø´Ó½çÃæ±àдÖнâ·Å³öÀ´¡£

ÔÚÓ¦ÓÃÖÐÒ»¸öÊÓ¶ÔÓ¦Ò»¸öÎĵµ£¬µ«Ò»¸öÎĵµ¿ÉÒÔ°üº¬¶à¸öÊÓ¡£Ò»¸öÓ¦ÓÃÖÐÖ»ÓÃÒ»¸ö¿ò¼Ü´°¿Ú£¬¶Ô¶àÎĵµ½çÃæÀ´½²¿ÉÄÜÓжà¸öMDI×Ó´°¿Ú¡£Ã¿Ò»¸öÊÓ¶¼ÊÇÒ»¸ö×Ó´°¿Ú£¬ÔÚµ¥Îĵµ½çÃæÖи¸´°¿Ú¼´ÊÇ¿ò¼Ü´°¿Ú£¬ÔÚ¶àÎĵµ½çÃæÖи¸´°¿ÚΪMDI×Ó´°¿Ú¡£Ò»¸ö¶àÎĵµÓ¦ÓÃÖпÉÒÔ°üº¬¶à¸öÎĵµÄ£°å£¬Ò»¸öÄ£°å¶¨ÒåÁËÒ»¸öÎĵµºÍÒ»¸ö»ò¶à¸öÊÓÖ®¼äµÄ¶ÔÓ¦¹ØÏµ¡£Í¬Ò»¸öÎĵµ¿ÉÒÔÊôÓÚ¶à¸öÄ£°å£¬µ«Ò»¸öÄ£°åÖÐÖ»ÔÊÐí¶¨ÒåÒ»¸öÎĵµ¡£Í¬ÑùÒ»¸öÊÓÒ²¿ÉÒÔÊôÓÚ¶à¸öÎĵµÄ£°å¡££¨²»ÖªµÀÎÒ˵Çå³þûÓУ©

½ÓÏÂÀ´¿´¿´ÈçºÎÔÚ³ÌÐòÖеõ½¸÷ÖÖ¶ÔÏóµÄÖ¸Õ룺

  • È«¾Öº¯ÊýAfxGetApp¿ÉÒԵõ½CWinAppÓ¦ÓÃÀàÖ¸Õë
  • AfxGetApp()->m_pMainWndΪ¿ò¼Ü´°¿ÚÖ¸Õë
  • ÔÚ¿ò¼Ü´°¿ÚÖУºCFrameWnd::GetActiveDocumentµÃµ½µ±Ç°»î¶¯ÎĵµÖ¸Õë
  • ÔÚ¿ò¼Ü´°¿ÚÖУºCFrameWnd::GetActiveViewµÃµ½µ±Ç°»î¶¯ÊÓÖ¸Õë
  • ÔÚÊÓÖУºCView::GetDocumentµÃµ½¶ÔÓ¦µÄÎĵµÖ¸Õë
  • ÔÚÎĵµÖУºCDocument::GetFirstViewPosition£¬CDocument::GetNextViewÓÃÀ´±éÀúËùÓкÍÎĵµ¹ØÁªµÄÊÓ¡£
  • ÔÚÎĵµÖУºCDocument::GetDocTemplateµÃµ½ÎĵµÄ£°åÖ¸Õë
  • ÔÚ¶àÎĵµ½çÃæÖУºCMDIFrameWnd::MDIGetActiveµÃµ½µ±Ç°»î¶¯µÄMDI×Ó´°¿Ú

Ò»°ãÀ´½²Óû§ÊäÈëÏûÏ¢£¨Èç²Ëµ¥Ñ¡Ôñ£¬Êó±ê£¬¼üÅ̵ȣ©»áÏÈ·¢ÍùÊÓ£¬Èç¹ûÊÓδ´¦ÀíÔò»á·¢Íù¿ò¼Ü´°¿Ú¡£ËùÒÔ¶¨ÒåÏûÏ¢Ó³Éäʱ¶¨ÒåÔÚÊÓÖоͿÉÒÔÁË£¬Èç¹ûÒ»¸öÓ¦ÓÃͬʱӵÓжà¸öÊÓ¶øµ±Ç°»î¶¯ÊÓûÓжÔÏûÏ¢½øÐд¦ÀíÔòÏûÏ¢»á·¢Íù¿ò¼Ü´°¿Ú¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


3.2 ½ÓÊÕÓû§ÊäÈë

ÔÚÊÓÖнÓÊÕÊó±êÊäÈ룺

Êó±êÏûÏ¢ÊÇÎÒÃdz£ÐèÒª´¦ÀíµÄÏûÏ¢£¬ÏûÏ¢·ÖΪ£ºÊó±êÒÆ¶¯£¬°´Å¥°´ÏÂ/ËÉ¿ª£¬Ë«»÷¡£ÀûÓÃClassWizard¿ÉÒÔÇáËɵÄÌí¼ÓÕ⼸ÖÖÏûÏ¢Ó³É䣬ÏÂÃæ·Ö±ð½²½âÿÖÖÏûÏ¢µÄ´¦Àí¡£

WM_MOUSEMOVE¶ÔÓ¦µÄº¯ÊýΪOnMouseMove( UINT nFlags, CPoint point )£¬nFlags±íÃ÷Á˵±Ç°Ò»Ð©°´¼üµÄÏûÏ¢£¬Äã¿ÉÒÔͨ¹ý¡°Î»Ó롱²Ù×÷½øÐмì²â¡£

  • MK_CONTROL Ctrl¼üÊÇ·ñ±»°´Ï   Set if the CTRL key is down.

  • MK_LBUTTON Êó±ê×ó¼üÊÇ·ñ±»°´Ï   Set if the left mouse button is down.

  • MK_MBUTTON Êó±êÖмä¼üÊÇ·ñ±»°´Ï   Set if the middle mouse button is down.

  • MK_RBUTTON Êó±êÓÒ¼üÊÇ·ñ±»°´Ï   Set if the right mouse button is down.

  • MK_SHIFT Shift¼üÊÇ·ñ±»°´Ï   Set if the SHIFT key is down.
point±íʾµ±Ç°Êó±êµÄÉè±¸×ø±ê£¬×ø±êÔ­µã¶ÔÓ¦ÊÓ×óÉϽǡ£

WM_LBUTTONDOWN/WM_RBUTTONDOWN£¨Êó±ê×ó/ÓÒ¼ü°´Ï£©¶ÔÓ¦µÄº¯ÊýΪOnLButtonDown/OnRButtonDown( UINT nFlags, CPoint point )²ÎÊýÒâÒåºÍOnMouseMoveÏàͬ¡£

WM_LBUTTONUP/WM_RBUTTONUP£¨Êó±ê×ó/ÓÒ¼üËÉ¿ª£©¶ÔÓ¦µÄº¯ÊýΪOnLButtonUp/OnRButtonUp( UINT nFlags, CPoint point )²ÎÊýÒâÒåºÍOnMouseMoveÏàͬ¡£

WM_LBUTTONDBLCLK/WM_RBUTTONDBLCLK£¨Êó±ê×ó/ÓÒ¼üË«»÷£©¶ÔÓ¦µÄº¯ÊýΪOnLButtonDblClk/OnRButtonDblClk( UINT nFlags, CPoint point )²ÎÊýÒâÒåºÍOnMouseMoveÏàͬ¡£

ÏÂÃæÎÒÓÃÒ»¶Îα´úÂëÀ´½²½âÒ»ÏÂÕâЩÏûÏ¢µÄÓ÷¨£º

´úÂëµÄ×÷ÓÃÊÇÓÃÊó±êÀ­³öÒ»¸ö¾ØÐÎ
global BOOL fDowned;//ÊÇ·ñÔÚÀ­¶¯
global CPoint ptDown;//°´ÏÂλÖÃ
global CPoint ptUp;//ËÉ¿ªÎ»ÖÃ

OnLButtonDown(UINT nFlags, CPoint point)
{
	fDowned=TRUE;
	ptUp=ptDown=point;
	DrawRect();
...
}

OnMouseMove(UINT nFlags, CPoint point)
{
	if(fDowned)
	{
		DrawRect();//»Ö¸´ÉÏ´ÎËù»­µÄ¾ØÐÎ
		ptUp=point;
		DrawRect();//»­Ð¾ØÐÎ
	}
}
OnLButtonUp(UINT nFlags, CPoint point)
{
	if(fDowned)
	{
		DrawRect();//»Ö¸´ÉÏ´ÎËù»­µÄ¾ØÐÎ
		ptUp=point;
		DrawRect();//»­Ð¾ØÐÎ
		fDowned=FALSE;
	}
}

DrawRect()
{//ÒÔ·´É«ÆÁÄ»µÄ·½·¨»­³öptDown,ptUp±ê¼ÇµÄ¾ØÐÎ
	CClientDC dc(this);
	MakeRect(ptDown,ptUp);
	SetROP(NOT);
	Rect();
}

×ø±ê¼äת»»£ºÔÚÒÔÉϵĺ¯ÊýÖÐpoint²ÎÊý¶ÔÓ¦µÄ¶¼ÊÇ´°¿ÚµÄÉè±¸×ø±ê£¬ÎÒÃÇÓ¦¸Ã½«Éè±¸×ø±êºÍÂß¼­×ø±êÏàÇø±ð£¬ÔÚͼ32_g1ÓÉÓÚ´°¿ÚʹÓÃÁ˹ö¶¯Ìõ£¬ËùÒÔ´«ÈëµÄÉè±¸×ø±êÊǶÔÓ¦ÓÚµ±Ç°´°¿Ú×óÉϽǵÄ×ø±ê£¬Ã»Óп¼ÂÇÊÇ·ñ¹ö¶¯£¬¶øÂß¼­×ø±ê±ØÐ뿼Âǹö¶¯ºó¶ÔÓ¦µÄ×ø±ê£¬ËùÒÔÎÒÒÔ»ÆÏßÐéÄâµÄ±í´ïÒ»¸öÂß¼­×ø±êµÄÇøÓò¡£¿ÉÒÔ¿´µÃ³öͬһµãÔÚ¹ö¶¯ºóµÄ×ø±êÖµÊDz»Í¬µÄ£¬ÕâÒ»¹æÔòͬÑùÊÊÓÃÓڸıäÁËÓ³É䷽ʽµÄ´°¿Ú£¬¼ÙÉèÄ㽫ӳÉ䷽ʽÉèÖÃΪÿµãΪ0.01ºÁÃ×£¬ÄÇôÉè±¸×ø±êËù¶ÔÓ¦µÄÂß¼­×ø±êÒ²ÐèÒªÖØÐ¼ÆËã¡£½øÐÐÕâÖÖת»»ÐèҪдһ¶Î´úÂ룬ËùÐÒµÄÊÇϵͳÌṩÁ˽øÐÐת»»µÄ¹¦ÄÜDCµÄDPtoLP£¬LPtoDP£¬ÏÂÃæ¸ø³ö´úÂëÍê³ÉÓÉÉè±¸×ø±êµ½Âß¼­×ø±êµÄת»»¡£

CPoint CYourView::FromDP(CPoint point)
{
	CClientDC dc(this);
	CPoint ptRet=point;
	dc.PrepareDC();//±ØÐëÏÈ×¼±¸DC£¬ÕâÔÚʹÓùö¶¯Ê±ÈÃDCÖØÐ¼ÆËã×ø±ê

	//Èç¹ûÄã×÷ͼÉèÖÃÁ˲»Í¬µÄÓ³É䷽ʽ£¬ÔòÔÚÏÂÃæÐèÒªÉèÖÃ
	dc.SetMapMode(...)
	//
	dc.DPtoLP(&ptRet);//DP->LP½øÐÐת»»
	return ptRet;
}

ÔÚͼ32_g1ÖÐÒÔÀ¶Ïß±ê¼ÇµÄÊÇÆÁÄ»ÇøÓò£¬ºìÏß±ê¼ÇµÄ¿Í»§ÇøÓò¡£ÀûÓÃScreenToClient£¬ClientToScreen¿ÉÒÔ½«×ø±êÔÚÕâÁ½¸öÇøÓò¼äת»»¡£

ÔÚÊÓÖнÓÊÕ¼üÅÌÊäÈ룺

¼üÅÌÏûÏ¢ÓÐÈý¸ö£º¼üÅ̱»°´ÏÂ/ËÉ¿ª£¬ÊäÈë×Ö·û¡£ÆäÖÐÊäÈë×Ö·ûÏ൱ÓÚÖ±½ÓµÃµ½Óû§ÊäÈëµÄ×Ö·ûÕâÔÚ²»ÐèÒª´¦Àí°´¼üϸ½ÚʱʹÓ㬶ø¼üÅ̱»°´ÏÂ/ËÉ¿ªÔÚ°´¼ü״̬¸Ä±äʱ·¢ËÍ¡£

WM_CHAR¶ÔÓ¦µÄº¯ÊýΪOnChar( UINT nChar, UINT nRepCnt, UINT nFlags )£¬ÆäÖÐnCharΪ±»°´ÏµÄ×Ö·û£¬nRepCnt±íÃ÷ÔÚ³¤Ê±¼äΪËÉ¿ªÊ±Ï൱Óڵİ´¼ü´ÎÊý£¬nFlagsÖеIJ»Í¬Î»´ú±í²»Í¬µÄº¬Ò壬ÔÚÕâÀïÒ»°ã²»Ê¹Óá£

WM_KEYDOWN/WM_KEYUPËù¶ÔÓ¦µÄº¯ÊýΪOnKeyDown/OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags )nChar´ú±í°´¼üµÄÐéÄâÂëÖµ£¬ÈçVK_ALTΪALT¼ü£¬VK_CONTROLΪCtrl¼ü¡£nFlags¸÷λµÄº¬ÒåÈçÏ£º
Value Description
0–7 Scan code (OEM-dependent value).
8 Extended key, such as a function key or a key on the numeric keypad (1 if it is an extended key).
9–10 Not used.
11–12 Used internally by Windows.
13 Context code (1 if the ALT key is held down while the key is pressed; otherwise 0).
14 Previous key state (1 if the key is down before the call, 0 if the key is up).
15 Transition state (1 if the key is being released, 0 if the key is being pressed).

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


3.3 ʹÓò˵¥

ÀûÓò˵¥½ÓÊÜÓû§ÃüÁîÊÇÒ»Öкܼòµ¥µÄ½»»¥·½·¨£¬Í¬Ê±Ò²ÊÇÒ»ÖÖºÜÓÐЧµÄ·½·¨¡£Í¨³£²Ëµ¥×÷ΪһÖÐ×ÊÔ´´æ´¢ÔÚÎļþÖУ¬Òò´ËÎÒÃÇ¿ÉÒÔÔÚÉè¼ÆÊ±¾ÍÀûÓÃ×ÊÔ´±à¼­Æ÷Éè¼ÆºÃÒ»¸ö²Ëµ¥¡£¹ØÓÚʹÓÃVCÉè¼Æ²Ëµ¥ÎҾͲ»ÔٶིÁË£¬µ«ÄãÔÚ±àд²Ëµ¥Ê±Ó¦¸Ã¾¡Á¿ÔÚÊôÐÔ¶Ô»°¿òµÄµ×²¿Ìáʾ£¨Prompt£©´¦ÊäÈëÎÄ×Ö£¬ÕâËäÈ»²»ÊDZØÒªµÄ£¬µ«MFCÔÚÓÐ״̬À¸ºÍ¹¤¾ßÌõµÄÇé¿öÏ»áʹÓøÃÎÄ×Ö£¬ÎÄ×ֵĸñʽΪ¡°×´Ì¬À¸³ö˵Ã÷\n¹¤¾ßÌõÌáʾ¡±¡£Í¼33_g1

ÎÒÃÇÒªÃæÁÙµÄÈÎÎñÊÇÈçºÎÖªµÀÓû§ºÎʱѡÔñÁ˲˵¥£¬ËûÑ¡µÄÊÇʲô²Ëµ¥Ïî¡£µ±Óû§Ñ¡ÔñÁËÒ»¸öÓÐЧµÄ²Ëµ¥Ïîʱϵͳ»áÏòÓ¦Ó÷¢ËÍÒ»¸öWM_COMMANDÏûÏ¢£¬ÔÚÏûÏ¢µÄ²ÎÊýÖбíÃ÷À´Ô´¡£ÔÚMFCÖÐÎÒÃÇÖ»ÐèÒª½øÐÐÒ»´ÎÓ³É䣬½«Ä³Ò»²Ëµ¥IDÓ³Éäµ½Ò»´¦Àíº¯Êý£¬Í¼33_g2¡£ÔÚÕâÀïÎÒÃÇÔÚCViewµÄÅÉÉúÀàÖд¦Àí²Ëµ¥ÏûÏ¢£¬Í¬Ê±ÎÒ¶ÔͬһIDÉèÖÃÁ½¸öÏûÏ¢Ó³É䣬½ÓÏÂÀ´½«ÕâÁ½ÖÖÓ³ÉäµÄ×÷Óá£

ON_COMMAND Ó³ÉäµÄ×÷ÓÃΪÔÚÓû§Ñ¡Ôñ¸Ã²Ëµ¥Ê±µ÷ÓÃÖ¸¶¨µÄ´¦Àíº¯Êý¡£È磺ON_COMMAND(IDM_COMMAND1, OnCommand1)»áʹ²Ëµ¥±»Ñ¡Ôñʱµ÷ÓÃOnCommand1³ÉÔ±º¯Êý¡£

ON_UPDATE_COMMAND_UI(IDM_COMMAND1, OnUpdateCommand1) Ó³ÉäµÄ×÷ÓÃÊÇÔڲ˵¥±»ÏÔʾʱͨ¹ýµ÷ÓÃÖ¸¶¨µÄº¯ÊýÀ´½øÐÐÈ·¶¨Æä״̬¡£ÔÚÕâ¸ö´¦Àíº¯ÊýÖÐÄã¿ÉÒÔÉèÖò˵¥µÄÔÊÐí/½ûֹ״̬£¬ÆäÏÔʾ×Ö·û´®ÊÇʲô£¬ÊÇ·ñÔÚÇ°Ãæ´ò¹³¡£º¯ÊýµÄ²ÎÊýΪCCmdUI* pCmdUI£¬CCmdUIÊÇMFCרÃÅΪ¸üÐÂÃüÁîÌṩµÄÒ»¸öÀ࣬Äã¿ÉÒÔµ÷ÓÃ

  • Enable ÉèÖÃÔÊÐí/½ûֹ״̬
  • SetCheck ÉèÖÃÊÇ·ñÔÚÇ°Ãæ´ò¹³
  • SetText ÉèÖÃÎÄ×Ö

ÏÂÃæÎÒ½²½âÒ»¸öÀý×Ó£ºÎÒÔÚCViewÅÉÉúÀàÖÐÓÐÒ»¸ö±äÁ¿m_fSelected£¬²¢ÇÒÔÚÊÓÖд¦ÀíÁ½¸ö²Ëµ¥µÄÏûÏ¢£¬µ±IDM_COMMAND1±»Ñ¡Ê±£¬¶Ôm_fSelected½øÐÐÂß¼­·Ç²Ù×÷£¬µ±IDM_COMMAND2±»Ñ¡ÖÐʱ³öÒ»Ìáʾ£»Í¬Ê±IDM_COMMAND1¸ù¾Ým_fSelected¾ö¶¨²Ëµ¥ÏÔʾµÄÎÄ×ÖºÍÊÇ·ñÔÚÇ°Ãæ´òÉϼì²é·ûºÅ£¬IDM_COMMAND2¸ù¾Ým_fSelectedµÄÖµ¾ö¶¨²Ëµ¥µÄÔÊÐí/½ûֹ״̬¡£ÏÂÃæÊÇ´úÂëºÍ˵Ã÷£ºÏÂÔØÊ¾Àý´úÂë 17K

void CMenuDView::OnCommand1() 
{
	m_fSelected=!m_fSelected;
	TRACE("command1 selected\n");
}

void CMenuDView::OnUpdateCommand1(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_fSelected);//¾ö¶¨¼ì²é״̬
	pCmdUI->SetText(m_fSelected?"µ±Ç°±»Ñ¡ÖÐ":"µ±Ç°Î´±»Ñ¡ÖÐ");//¾ö¶¨ËùÏÔʾµÄÎÄ×Ö
}


void CMenuDView::OnUpdateCommand2(CCmdUI* pCmdUI) 
{//¾ö¶¨ÊÇ·ñΪÔÊÐí
	pCmdUI->Enable(m_fSelected);
}

void CMenuDView::OnCommand2() 
{//Ñ¡ÖÐʱ¸ø³öÌáʾ
	AfxMessageBox("ÄãÑ¡ÁËcommand2");
}

½ÓÏÂÀ´ÔÙ½²Ò»Ð©Í¨¹ý´úÂë²Ù×ݲ˵¥µÄ·½·¨£¬ÔÚMFCÖÐÓÐÒ»¸öÀàCMenuÓÃÀ´´¦ÀíºÍ²Ëµ¥ÓйصŦÄÜ¡£ÔÚÉú³ÉÒ»¸öCMenu¶ÔÏóʱÄãÐèÒª´Ó×ÊÔ´ÖÐ×°Èç²Ëµ¥£¬Í¨¹ýµ÷ÓÃBOOL CMenu::LoadMenu( UINT nIDResource )½øÐÐ×°È룬ȻºóÄã¾Í¿ÉÒԶԲ˵¥½øÐж¯Ì¬µÄÐ޸ģ¬ËùÉæ¼°µ½µÄº¯ÊýÓУº

  • CMenu* GetSubMenu( int nPos ) һλÖõõ½×Ӳ˵¥µÄÖ¸Õ룬ÒòΪһ¸öCMenu¶ÔÏóÖ»Äܱíʾһ¸öµ¯³ö²Ëµ¥£¬Èç¹û²Ëµ¥ÖеÄijһÏîҲΪµ¯³ö²Ëµ¥£¬¾ÍÐèҪͨ¹ý¸Ãº¯Êý»ñȡָÕë¡£
  • BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ) ÔÚĩβÌí¼ÓÒ»ÏnFlagΪMF_SEPARATOR±íʾÔö¼ÓÒ»¸ö·Ö¸ôÌõ£¬ÕâÑùÆäËûÁ½¸ö²ÎÊý½«»á±»ºöÂÔ£»ÎªMF_STRING±íʾÌí¼ÓÒ»¸ö²Ëµ¥ÏîuIDNewItemΪ¸Ã²Ëµ¥µÄIDÃüÁîÖµ£»ÎªMF_POPUP±íʾÌí¼ÓÒ»¸öµ¯³ö²Ëµ¥ÏÕâʱuIDNewItemΪÁíÒ»²Ëµ¥µÄ¾ä±úHMENU¡£lpszNewItemΪ²Ëµ¥ÎÄ×Ö˵Ã÷¡£
  • BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL )ÓÃÓÚÔÚÖ¸¶¨Î»ÖòåÈëÒ»²Ëµ¥£¬Î»ÖÃÓɱäÁ¿nPositionÖ¸Ã÷¡£Èç¹ûnFlags°üº¬MF_BYPOSITIONÔò±íÃ÷²åÈëÔÚnPositionλÖã¬Èç¹û°üº¬MF_BYCOMMAND±íʾ²åÈëÔÚÃüÁîIDΪnPositionµÄ²Ëµ¥´¦¡£
  • BOOL ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL )ÓÃÓÚÐÞ¸ÄijһλÖõIJ˵¥£¬Èç¹ûnFlags°üº¬MF_BYPOSITIONÔò±íÃ÷ÐÞ¸ÄnPositionλÖõIJ˵¥£¬Èç¹û°üº¬MF_BYCOMMAND±íʾÐÞ¸ÄÃüÁîIDΪnPosition´¦µÄ²Ëµ¥¡£
  • BOOL RemoveMenu( UINT nPosition, UINT nFlags )ÓÃÓÚɾ³ýijһλÖõIJ˵¥¡£Èç¹ûnFlags°üº¬MF_BYPOSITIONÔò±íÃ÷ɾ³ýnPositionλÖõIJ˵¥£¬Èç¹û°üº¬MF_BYCOMMAND±íʾɾ³ýÃüÁîIDΪnPosition´¦µÄ²Ëµ¥¡£
  • BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ) ºÍ BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp )¿ÉÒÔÌí¼Óһλͼ²Ëµ¥£¬µ«ÕâÑùµÄ²Ëµ¥ÔÚÑ¡ÖÐʱֻÊÇ·´É«ÏÔʾ£¬²¢²»ÃÀ¹Û¡££¨¹ØÓÚʹÓÃ×Ô»æOwnerDraw²Ëµ¥Çë²Î¿¼ÎÒ·­ÒëµÄһƪÎÄÕÂ×Ô»æ²Ëµ¥Àࣩ

ÊÓͼÖÐÊÇûÓв˵¥µÄ£¬ÔÚ¿ò¼Ü´°¿ÚÖвÅÓУ¬ËùÒÔÖ»ÓÐÓÃAfxGetApp()->m_pMainWnd->GetMenu()²ÅÄܵõ½Ó¦ÓõIJ˵¥Ö¸Õë¡£

×îºóÎÒ½²Ò»ÏÂÈçºÎÔÚ³ÌÐòÖе¯³öÒ»¸ö²Ëµ¥£¬Äã±ØÐëÏÈ×°ÈëÒ»¸ö²Ëµ¥×ÊÔ´£¬Äã±ØÐèµÃµ½Ò»¸öµ¯³ö²Ëµ¥µÄÖ¸ÕëÈ»ºóµ÷ÓÃBOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL )µ¯³ö²Ëµ¥£¬ÄãÐèÒªÖ¸¶¨(x,y)Ϊ²Ëµ¥µ¯³öµÄλÖã¬pWndΪ½ÓÊÕÃüÁîÏûÏ¢µÄ´°¿ÚÖ¸Õë¡£ÏÂÃæÓÐÒ»¶Î´úÂë˵Ã÷·½·¨£¬ÏÂÔØÊ¾Àý´úÂë 17K¡£µ±È»ÎªÁË´¦ÀíÏûÏ¢ÄãÓ¦¸ÃÔÚpWndÖ¸Ã÷µÄ´°¿ÚÖжԲ˵¥ÃüÁîÏûÏ¢½øÐÐÓ³Éä¡£

CMenu menu;
menu.LoadMenu(IDR_POPUP);
CMenu* pM=menu.GetSubMenu(0);
CPoint pt;
GetCursorPos(&pt);
pM->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);

ÁíÒ»ÖÖ×ö·¨ÊÇͨ¹ýCMenu::CreatePopupMenu()½¨Á¢Ò»¸öµ¯³ö²Ëµ¥£¬È»ºóʹÓÃTrackPopupMenuµ¯³ö²Ëµ¥¡£Ê¹ÓÃCreatePopupMenu´´½¨µÄ²Ëµ¥Ò²¿ÉÒÔ½«Æä×÷Ϊһ¸öµ¯³öÏîÌí¼ÓÁíÒ»¸ö²Ëµ¥ÖС£ÏÂÃæµÄα´úÂëÑÝʾÁËÈçºÎ´´½¨Ò»¸öµ¯³ö²Ëµ¥²¢½øÐÐÐ޸ĺ󵯳ö£º

CMenu menu1,menu2;
menu1.CreatePopupMenu
menu1.InsertMenu(1)
menu1.InsertMenu(2)
menu1.InsertMenu(3)

menu2.CreatePopupMenu
menu2.AppendMenu(MF_POPUP,1,menu1.Detach()) ½«µ¯³ö²Ëµ¥¼ÓÈë or InsertMenu...
menu2.InsertMenu("string desc");
menu.TrackPopupMenu(...)

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


3.4 Îĵµ£¬ÊÓ£¬¿ò¼ÜÖ®¼äÏ໥×÷ÓÃ

Ò»°ãÀ´ËµÓû§µÄÊäÈë/Êä³ö»ù±¾¶¼ÊÇͨ¹ýÊÓ½øÐУ¬µ«Ò»Ð©ÀýÍâµÄÇé¿öÏ¿ÉÄÜÐèÒªºÍ¿ò¼ÜÖ±½Ó·¢Éú×÷Ó㬶øÔÚ¶àÊÓµÄÇé¿öÏÂÈçºÎÔÚÊÓÖ®¼ä´«µÝÊý¾Ý¡£

ÔÚʹÓò˵¥Ê±´ó¼Ò»á·¢ÏÖµ±Ò»¸ö²Ëµ¥Ã»ÓнøÐÐÓ³Éä´¦ÀíʱΪ½ûֹ״̬£¬ÔÚ¶àÊÓµÄÇé¿öϲ˵¥µÄ״̬ºÍ´¦ÀíÓ³ÉäÊǺ͵±Ç°»î¶¯ÊÓÏàÁªÏµµÄ£¬ÕâÑùMFC¿ÉÒÔ±£Ö¤ÊÓÄÜÕýÈ·µÄ½ÓÊÕµ½¸÷ÖÖÏûÏ¢£¬µ«ÓÐʱºòÒ²»á²úÉú²»±ã¡£ÓÐÒ»¸ö½â¾ö°ì·¨¾ÍÊÇÔÚ¿ò¼ÜÖжÔÏûÏ¢½øÐд¦Àí£¬ÕâÑùÒ²¿ÉÒÔ±£Ö¤µ±Ç°Îĵµ¿ÉÒÔͨ¹ý¿ò¼ÜµÃµ½µ±Ç°ÏûÏ¢¡£

ÔÚÓû§½øÐÐÊäÈëºóÈçºÎʹÊÓµÄ״̬µÃµ½¸üУ¿Õâ¸öÎÊÌâÔÚÒ»¸öÎĵµ¶ÔÓ¦Ò»¸öÊÓͼʱÊDz»´æÔڵ쬵«ÊÇÏÖÔÚÓÐÒ»¸öÎĵµ¶ÔÓ¦ÁËÁ½¸öÊÓͼ£¬µ±ÔÚÒ»¸öÊÓÉϽøÐÐÁËÊäÈëʱÈçºÎ±£Ö¤ÁíÒ»¸öÊÓÒ²µÃµ½Í¨ÖªÄØ£¿MFCµÄ×ö·¨ÊÇÀûÓÃÎĵµÀ´´¦ÀíµÄ£¬ÒòΪÎĵµ¹ÜÀí×ŵ±Ç°ºÍËüÁªÏµµÄÊÓ£¬ÓÉËüÀ´Í¨Öª¸÷¸öÊÓÊÇ×îºÏÊʵġ£ÈÃÎÒÃÇͬʱ¿´Á½¸öº¯Êý£º

  • void CView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint )
  • void CDocument::UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL )
µ±ÎĵµµÄUpdateAllViews±»µ÷ÓÃʱºÍ´ËÎĵµÏà¹ØµÄËùÓÐÊÓµÄOnUpdate¶¼»á±»µ÷Ó㬶ø²ÎÊýlHintºÍpHint¶¼»á±»´«µÝ¡£ÕâÑùÒ»À´·¢Éú¸Ä±äÊӾͿÉÒÔ֪ͨÆäËûµÄÐÖµÜÁË¡£ÄÇô»¹ÓÐÒ»¸öÎÊÌ⣺ÈçºÎÔÚOnUpdateÖÐÖªµÀÊÇÄǸöÊÓͼ·¢ÉúÁ˸ıäÄØ£¬Õâ¾Í¿ÉÒÔÀûÓÃpHint²ÎÊý£¬Ö»Òªµ÷ÓÃÕß½«thisÖ¸Õ븳ֵ¸ø²ÎÊý¾Í¿ÉÒÔÁË£¬µ±È»ÍêÈ«¿ÉÒÔÀûÓøòÎÊý´«µÝ¸ü¸´ÔӵĽṹ¡£

Êӵijõʼ»¯£¬µ±Ò»¸öÎĵµ±»´ò¿ª»òÊÇн¨Ò»¸öÎĵµÊ±ÊÓͼµÄCView::OnInitialUpdate()»á±»µ÷Óã¬Äã¿ÉÒÔͨ¹ýÖØÔØ¸Ãº¯Êý¶ÔÊÓ½øÐгõʼ»¯£¬²¢ÔÚ½áÊøÇ°µ÷Óø¸ÀàµÄOnInitialUpdate£¬ÒòΪÕâÑù¿ÉÒÔ±£Ö¤OnUpdate»á±»µ÷Óá£

ÎĵµÖÐÄÚÈݵÄÇå³ý£¬µ±Îĵµ±»¹Ø±Õʱ£¨±ÈÈçÍ˳ö»òÊÇн¨Ç°ÉÏÒ»¸öÎĵµÇå³ý£©void CDocument::DeleteContents ()»á±»µ÷Óã¬Äã¿ÉÒÔͨ¹ýÖØÔØ¸Ãº¯ÊýÀ´½øÐÐÇåÀí¹¤×÷¡£

ÔÚµ¥Îĵµ½á¹¹ÖÐÉÏÃæÁ½µãÓÈÆäÖØÒª£¬ÒòΪÈí¼þÔËÐÐÎĵµ¶ÔÏóºÍÊÓ¶ÔÏóÖ»»á±»²úÉú²¢É¾³ýÒ»´Î¡£ËùÒÔÓ¦¸Ã½«ÉÏÃæÁ½µãºÍC++¶ÔÏó¹¹ÔìºÍ¹¹Îö·ÖÇå³þ¡£

×îºó½«Ò»ÏÂÎĵµÄ£°å£¨DocTemplate£©µÄ×÷Óã¬ÎĵµÄ£°å·ÖΪÁ½À൥ÎĵµÄ£°åºÍ¶àÎĵµÄ£°å£¬·Ö±ðÓÉCSingleDocTemplateºÍCMultiDocTemplate±íʾ£¬Ä£°åµÄ×÷ÓÃÔÚÓڼǼÎĵµ£¬ÊÓ£¬¿ò¼ÜÖ®¼äµÄ¶ÔÓ¦¹ØÏµ¡£»¹ÓÐÒ»µã¾ÍÊÇÄ£°å¿ÉÒԼǼӦÓóÌÐò¿ÉÒÔ´ò¿ªµÄÎļþµÄÀàÐÍ£¬µ±´ò¿ªÎļþʱ»á¸ù¾ÝÎĵµÄ£°åÖеÄÐÅϢѡÔñÕýÈ·µÄÎĵµºÍÊÓ¡£Ä£°åÊÇÒ»¸ö±È½Ï³éÏëµÄ¸ÅÄһ°ãÀ´ËµÊDz»ÐèÒªÎÒÃÇÖ±½Ó½øÐвÙ×÷µÄ¡£

µ±Ê¹ÓÃÕßͨ¹ýÊÓÐÞ¸ÄÁËÊý¾Ýʱ£¬Ó¦¸Ãµ÷ÓÃGetDocument()->SetModifiedFlag(TRUE)֪ͨÎĵµÊý¾ÝÒѾ­±»¸üУ¬ÕâÑùÔڹرÕÎĵµÊ±»á×Ô¶¯Ñ¯ÎÊÓû§ÊÇ·ñ±£´æÊý¾Ý¡£

ºÃÏóÕâÒ»½Ú½²µÄÓÐЩÂÒ£¬´ó¼Ò¿´ºóÓÐʲôÏë·¨ºÍÎÊÌâÇëÔÚVCHelpÂÛ̳ÉÏÁôÑÔ£¬Îһᾡ¿ì»Ø¸´²¢ÇÒ»á¶Ô±¾½ÚÄÚÈÝÖØÐÂÕûÀíºÍÐ޸ġ£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


3.5 ÀûÓÃÐòÁл¯½øÐÐÎļþ¶Áд

ÔںܶàÓ¦ÓÃÖÐÎÒÃÇÐèÒª¶ÔÊý¾Ý½øÐб£´æ£¬»òÊÇ´Ó½éÖÊÉ϶ÁÈ¡Êý¾Ý£¬Õâ¾ÍÉæ¼°µ½ÎļþµÄ²Ù×÷¡£ÎÒÃÇ¿ÉÒÔÀûÓø÷ÖÖÎļþ´æÈ¡·½·¨Íê³ÉÕâЩ¹¤×÷£¬µ«MFCÖÐÒ²ÌṩÁËÒ»ÖÖ¶ÁдÎļþµÄ¼òµ¥·½·¨¡ª¡ª¡°ÐòÁл¯¡±¡£ÐòÁл¯»úÖÆÍ¨¹ý¸ü¸ß²ã´ÎµÄ½Ó¿Ú¹¦ÄÜÏò¿ª·¢ÕßÌṩÁ˸üÀûÓÚʹÓúÍ͸Ã÷ÓÚ×Ö½ÚÁ÷µÄÎļþ²Ù×Ý·½·¨£¬¾ÙÒ»¸öÀýÀ´½²Äã¿ÉÒÔ½«Ò»¸ö×Ö´®Ð´ÈëÎļþ¶ø²»ÐèÒªÀí»á¾ßÌ峤¶È£¬¶Á³öʱҲÊÇÒ»Ñù¡£ÄãÉõÖÁ¿ÉÒÔ¶Ô×Ö·û´®Êý×é½øÐвÙ×÷¡£ÔÚMFCÌṩµÄ¿É×Ô¶¯·ÖÅäÄÚ´æµÄÀàµÄÖ§³ÖÏÂÄã¿ÉÒÔ¸üÇáËɵĶÁ/дÊý¾Ý¡£ÄãÒ²¿ÉÒÔ¸ù¾ÝÐèÒª±àдÄã×Ô¼ºµÄ¾ßÓÐÐòÁл¯¹¦ÄܵÄÀà¡£

ÐòÁл¯ÔÚ×îµÍµÄ²ã´ÎÉÏÓ¦¸Ã±»ÐèÒªÐòÁл¯µÄÀàÖ§³Ö£¬Ò²¾ÍÊÇ˵Èç¹ûÄãÐèÒª¶ÔÒ»¸öÀà½øÐÐÐòÁл¯£¬ÄÇôÕâ¸öÀà±ØÐëÖ§³ÖÐòÁл¯¡£µ±Í¨¹ýÐòÁл¯½øÐÐÎļþ¶ÁдʱÄãÖ»ÐèÒª¸ÃÀàµÄÐòÁл¯º¯Êý¾Í¿ÉÒÔÁË¡£

ÔõÑùʹÀà¾ßÓÐÐòÁл¯¹¦ÄÜÄØ£¿ÄãÐèÒªÒÔÏµĹ¤×÷£º

  • ¸ÃÀà´ÓCObjectÅÉÉú¡£
  • ÔÚÀàÉùÃ÷ÖаüÀ¨DECLARE_SERIALºê¶¨Òå¡£
  • Ìṩһ¸öȱʡµÄ¹¹Ô캯Êý¡£
  • ÔÚÀàÖÐʵÏÖSerialzeº¯Êý
  • ʹÓÃIMPLEMENT_SERIALÖ¸Ã÷ÀàÃûºÍ°æ±¾ºÅ

ÏÂÃæµÄ´úÂ뽨Á¢ÁËÒ»¸ö¼òµ¥Éí·ÝÖ¤¼Ç¼µÄÀ࣬ͬʱҲÄܹ»Ö§³ÖÐòÁл¯¡£

in H
struct strPID
{
	char szName[10];
	char szID[16];
	struct strPID* pNext;
};
class CAllPID : public CObject
{
public:
	DECLARE_SERIAL(CAllPID)
	CAllPID();
	~CAllPID();
	
public:// ÐòÁл¯Ïà¹Ø	
	struct strPID* pHead;
	//ÆäËûµÄ³ÉÔ±º¯Êý
	void Serialize(CArchive& ar);
};

in CPP
IMPLEMENT_SERIAL(CAllPID,CObject,1) // version is 1£¬°æ±¾ÓÃÓÚ¶ÁÊý¾ÝʱµÄ¼ì²â
void CAllPID::Serialize(CArchive& ar)
{
	int iTotal;
	if(ar.IsStoring())
	{//±£´æÊý¾Ý
		iTotal=GetTotalID();//µÃµ½Á´±íÖеļǼÊýÁ¿
		arr<26;i++)
				ar<<&(((BYTE*)pItem)+i);//дһ¸östrPIDÖÐËùÓеÄÊý¾Ý
		}
	}
	else
	{//¶ÁÊý¾Ý
		ar>>iTotal;
		for(int i=0;i26;j++)
				ar>>*(((BYTE*)pID)+j);//¶ÁÒ»¸östrPIDÖÐËùÓеÄÊý¾Ý
			//ÐÞ¸ÄÁ´±í
		}
	}
}
µ±È»ÉÏÃæµÄ´úÂëºÜ²»ÍêÕû£¬µ«ÒѾ­¿ÉÒÔ˵Ã÷ÎÊÌâ¡£ÕâÑùCAllPID¾ÍÊÇÒ»¸ö¿ÉÒÔÖ§³ÖÐòÁл¯µÄÀ࣬²¢ÇÒ¿ÉÒÔ¸ù¾Ý¼Ç¼µÄÊýÁ¿¶¯Ì¬·ÖÅäÄÚ´æ¡£ÔÚÐòÁл¯ÖÐÎÒÃÇʹÓÃÁËCArchiveÀ࣬¸ÃÀàÓÃÓÚÔÚÐòÁл¯Ê±Ìṩ¶Áд֧³Ö£¬ËüÖØÔØÁË<<ºÍ>>ÔËËã·ûºÅ£¬²¢ÇÒÌṩReadºÍWriteº¯Êý¶ÔÊý¾Ý½øÐжÁд¡£

ÏÂÃæ¿´¿´ÈçºÎÔÚÎĵµÖÐʹÓÃÐòÁл¯¹¦ÄÜ£¬ÄãÖ»ÐèÒªÐÞ¸ÄÎĵµÀàµÄSerialize(CArchive& ar)º¯Êý£¬²¢µ÷Óø÷¸ö½øÐÐÐòÁл¯µÄÀàµÄSerial½øÐÐÊý¾Ý¶Áд¾Í¿ÉÒÔÁË¡£µ±È»ÄãÒ²¿ÉÒÔÔÚÎĵµÀàµÄÄÚ²¿½øÐÐÊý¾Ý¶Áд£¬ÏÂÃæµÄ´úÂëÀûÓÃÐòÁл¯¹¦ÄܶÁдÊý¾Ý£º

class CYourDoc : public CDocument
{
	void Serialize(CArchive& ar);
	CString m_szDesc;
	CAllPID m_allPID;
......
}

void CYourDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{//ÓÉÓÚCString¶ÔCArchive¶¨ÒåÁË<<ºÍ>>²Ù×÷·ûºÅ£¬ËùÒÔ¿ÉÒÔÖ±½ÓÀûÓÃ>>ºÍ<<
		ar<>m_szDesc;
	}
	m_allPID.Serialize(ar);//µ÷ÓÃÊý¾ÝÀàµÄÐòÁл¯º¯Êý
}

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


3.6 MFCÖÐËùÌṩµÄ¸÷ÖÖÊÓÀà½éÉÜ

MFCÖÐÌṩÁ˷ḻµÄÊÓÀ๩¿ª·¢ÕßʹÓã¬ÏÂÃæ¶Ô¸÷¸öÀà½øÐнéÉÜ£º

CViewÀàÊÇ×î»ù±¾µÄÊÓÀàÖ»Ö§³Ö×î»ù±¾µÄ²Ù×÷¡£

CScrollViewÀàÌṩÁ˹ö¶¯µÄ¹¦ÄÜ£¬Äã¿ÉÒÔÀûÓÃvoid CScrollView::SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault )ÉèÖùö¶¯³ß´ç£¬ºÍ×ø±êÓ³Éäģʽ¡£µ«ÊÇÔÚ»æÍ¼ºÍ½ÓÊÕÓû§ÊäÈëʱÐèÒª¶Ô×ø±ê½øÐÐת»»¡£Çë²Î¼û3.2 ½ÓÊÕÓû§ÊäÈë¡£

CFormViewÀàÌṩÓû§ÔÚ×ÊÔ´ÎļþÖж¨Òå½çÃæµÄÄÜÁ¦£¬²¢¿ÉÒÔ½«×Ó´°¿ÚºÍ±äÁ¿½øÐа󶨡£Í¨¹ýUpdateDataº¯ÊýÈÃÊý¾ÝÔÚ±äÁ¿ºÍ×Ó´°¿Ú¼ä½»»»¡£

CTreeViewÀàÀûÓÃTreeCtrl½çÃæ×÷ΪÊÓ½çÃæ£¬Í¨¹ýµ÷ÓÃCTreeCtrl& CTreeView::GetTreeCtrl( ) constµÃµ½CTreeCtrlµÄÒýÓá£

CListViewÀàÀûÓÃListCtrl½çÃæ×÷ΪÊÓ½çÃæ£¬Í¨¹ýµ÷ÓÃCTreeCtrl& CTreeView::GetTreeCtrl( ) constµÃµ½CListCtrlµÄÒýÓá£

CEditViewÀàÀûÓÃEdit½ÓÊÕÓû§ÊäÈ룬Ëü¾ßÓÐÊäÈë¿òµÄÒ»Çй¦ÄÜ¡£Í¨¹ýµ÷ÓÃCEdit& CEditView::GetEditCtrl( ) constµÃµ½Edit&µÄÒýÓá£void CEditView::SetPrinterFont( CFont* pFont )¿ÉÒÔÉèÖôòÓ¡×ÖÌå¡£

CRichEditViewÀà×÷ΪRich Text Edit£¨¸»Îı¾ÊäÈ룩µÄÊÓÀ࣬ÌṩÁË¿ÉÒÔ°´ÕÕ¸ñʽÏÔʾÎı¾µÄÄÜÁ¦£¬ÔÚʹÓÃʱÐèÒªCRichEditDocµÄÖ§³Ö¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/





4.1 Button

°´Å¥´°¿Ú£¨¿Ø¼þ£©ÔÚMFCÖÐʹÓÃCButton±íʾ£¬CButton°üº¬ÁËÈýÖÖÑùʽµÄ°´Å¥£¬Push Button£¬Check Box£¬Radio Box¡£ËùÒÔÔÚÀûÓÃCButton¶ÔÏóÉú³É°´Å¥´°¿ÚʱÐèÒªÖ¸Ã÷°´Å¥µÄ·ç¸ñ¡£

´´½¨°´Å¥£ºBOOL CButton::Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );ÆäÖÐlpszCaptionÊǰ´Å¥ÉÏÏÔʾµÄÎÄ×Ö£¬dwStyleΪ°´Å¥·ç¸ñ£¬³ýÁËWindows·ç¸ñ¿ÉÒÔʹÓÃÍ⣨ÈçWS_CHILD|WS_VISUBLE|WS_BORDER£©»¹Óа´Å¥×¨ÓõÄһЩ·ç¸ñ¡£

  • BS_AUTOCHECKBOX ¼ì²é¿ò£¬°´Å¥µÄ״̬»á×Ô¶¯¸Ä±ä   Same as a check box, except that a check mark appears in the check box when the user selects the box; the check mark disappears the next time the user selects the box.

  • BS_AUTORADIOBUTTON Ô²ÐÎÑ¡Ôñ°´Å¥£¬°´Å¥µÄ״̬»á×Ô¶¯¸Ä±ä   Same as a radio button, except that when the user selects it, the button automatically highlights itself and removes the selection from any other radio buttons with the same style in the same group.

  • BS_AUTO3STATE ÔÊÐí°´Å¥ÓÐÈýÖÖ״̬¼´£ºÑ¡ÖУ¬Î´Ñ¡ÖУ¬Î´¶¨   Same as a three-state check box, except that the box changes its state when the user selects it.

  • BS_CHECKBOX ¼ì²é¿ò   Creates a small square that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style).

  • BS_DEFPUSHBUTTON ĬÈÏÆÕͨ°´Å¥   Creates a button that has a heavy black border. The user can select this button by pressing the ENTER key. This style enables the user to quickly select the most likely option (the default option).

  • BS_LEFTTEXT ×ó¶ÔÆëÎÄ×Ö   When combined with a radio-button or check-box style, the text appears on the left side of the radio button or check box.

  • BS_OWNERDRAW ×Ի水ť   Creates an owner-drawn button. The framework calls the DrawItem member function when a visual aspect of the button has changed. This style must be set when using the CBitmapButton class.

  • BS_PUSHBUTTON ÆÕͨ°´Å¥   Creates a pushbutton that posts a WM_COMMAND message to the owner window when the user selects the button.

  • BS_RADIOBUTTON Ô²ÐÎÑ¡Ôñ°´Å¥   Creates a small circle that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style). Radio buttons are usually used in groups of related but mutually exclusive choices.

  • BS_3STATE ÔÊÐí°´Å¥ÓÐÈýÖÖ״̬¼´£ºÑ¡ÖУ¬Î´Ñ¡ÖУ¬Î´¶¨   Same as a check box, except that the box can be dimmed as well as checked. The dimmed state typically is used to show that a check box has been disabled.
rectΪ´°¿ÚËùÕ¼¾ÝµÄ¾ØÐÎÇøÓò£¬pParentWndΪ¸¸´°¿ÚÖ¸Õ룬nIDΪ¸Ã´°¿ÚµÄIDÖµ¡£

»ñÈ¡/¸Ä±ä°´Å¥×´Ì¬£º¶ÔÓÚ¼ì²é°´Å¥ºÍÔ²Ðΰ´Å¥¿ÉÄÜÓÐÁ½ÖÖ״̬£¬Ñ¡ÖкÍδѡÖУ¬Èç¹ûÉèÖÃÁËBS_3STATE»òBS_AUTO3STATE·ç¸ñ¾Í¿ÉÄܳöÏÖµÚÈýÖÖ״̬£ºÎ´¶¨£¬Õâʱ°´Å¥ÏÔʾ»ÒÉ«¡£Í¨¹ýµ÷ÓÃint CButton::GetCheck( ) µÃµ½µ±Ç°ÊÇ·ñ±»Ñ¡ÖУ¬·µ»Ø0£ºÎ´Ñ¡ÖУ¬1£ºÑ¡ÖУ¬2£ºÎ´¶¨¡£µ÷ÓÃvoid CButton::SetCheck( int nCheck );ÉèÖõ±Ç°Ñ¡ÖÐ״̬¡£

´¦Àí°´Å¥ÏûÏ¢£ºÒª´¦Àí°´Å¥ÏûÏ¢ÐèÒªÔÚ¸¸´°¿ÚÖнøÐÐÏûÏ¢Ó³É䣬ӳÉäºêΪON_BN_CLICKED( id, memberFxn )idΪ°´Å¥µÄIDÖµ£¬¾ÍÊÇ´´½¨Ê±Ö¸¶¨µÄnIDÖµ¡£´¦Àíº¯ÊýÔ­ÐÍΪafx_msg void memberFxn( );

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.2 Static Box

¾²Ì¬Îı¾¿Ø¼þµÄ¹¦ÄܱȽϼòµ¥£¬¿É×÷ΪÏÔʾ×Ö·û´®£¬Í¼±ê£¬Î»Í¼Óᣴ´½¨Ò»¸ö´°¿Ú¿ÉÒÔʹÓóÉÔ±º¯Êý£º
BOOL CStatic::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
ÆäÖÐdwStyle½«Ö¸Ã÷¸Ã´°¿ÚµÄ·ç¸ñ£¬³ýÁË×Ó´°¿Ú³£Óõķç¸ñWS_CHILD,WS_VISIBLEÍ⣬Äã¿ÉÒÔÕë¶Ô¾²Ì¬¿Ø¼þÖ¸Ã÷רÃŵķç¸ñ¡£

  • SS_CENTER,SS_LEFT,SS_RIGHT Ö¸Ã÷×Ö·ûÏÔʾµÄ¶ÔÆë·½Ê½¡£
  • SS_GRAYRECT ÏÔʾһ¸ö»ÒÉ«µÄ¾ØÐÎ
  • SS_NOPREFIX Èç¹ûÖ¸Ã÷¸Ã·ç¸ñ£¬¶ÔÓÚ×Ö·û&½«Ö±½ÓÏÔʾ£¬·ñÔò&½«×÷ΪתÒå·û£¬&½«²»ÏÔʾ¶øÔÚÆäºóµÄ×Ö·û½«ÓÐÏ»®Ïߣ¬Èç¹ûÐèÒªÖ±½ÓÏÔʾ&±ØÐëʹÓÃ&&±íʾ¡£
  • SS_BITMAP ÏÔʾλͼ
  • SS_ICON ÏÔʾͼ±ê
  • SS_CENTERIMAGE ͼÏó¾ÓÖÐÏÔʾ

¿ØÖÆÏÔʾµÄÎı¾ÀûÓóÉÔ±º¯ÊýSetWindowText/GetWindowTextÓÃÓÚÉèÖÃ/µÃµ½µ±Ç°ÏÔʾµÄÎı¾¡£

¿ØÖÆÏÔʾµÄͼ±êÀûÓóÉÔ±º¯ÊýSetIcon/GetIconÓÃÓÚÉèÖÃ/µÃµ½µ±Ç°ÏÔʾµÄͼ±ê¡£

¿ØÖÆÏÔʾµÄλͼÀûÓóÉÔ±º¯ÊýSetBitmap/GetBitmapÓÃÓÚÉèÖÃ/µÃµ½µ±Ç°ÏÔʾµÄλͼ¡£ÏÂÃæÒ»¶Î´úÂëÑÝʾÈçºÎ´´½¨Ò»¸öÏÔʾλͼµÄ¾²Ì¬´°¿Ú²¢ÉèÖÃλͼ

CStatic* pstaDis=new CStatic;
pstaDis->Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP|SSCENTERIMAGE,CRect(0,0,40,40),pWnd,1);
CBitmap bmpLoad;
bmpLoad.LoadBitmap(IDB_TEST);
pstaDis->SetBitmap(bmpLoad.Detach());

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.3 Edit Box

Edit´°¿ÚÊÇÓÃÀ´½ÓÊÕÓû§ÊäÈë×î³£ÓõÄÒ»¸ö¿Ø¼þ¡£´´½¨Ò»¸öÊäÈë´°¿Ú¿ÉÒÔʹÓóÉÔ±º¯Êý£º
BOOL CEdit::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
ÆäÖÐdwStyle½«Ö¸Ã÷¸Ã´°¿ÚµÄ·ç¸ñ£¬³ýÁË×Ó´°¿Ú³£Óõķç¸ñWS_CHILD,WS_VISIBLEÍ⣬Äã¿ÉÒÔÕë¶ÔÊäÈë¿Ø¼þÖ¸Ã÷רÃŵķç¸ñ¡£

  • ES_AUTOHSCROLL,ES_AUTOVSCROLL Ö¸Ã÷ÊäÈëÎÄ×Ö³¬³öÏÔʾ·¶Î§Ê±×Ô¶¯¹ö¶¯¡£
  • ES_CENTER,ES_LEFT,ES_RIGHT Ö¸¶¨¶ÔÆë·½Ê½
  • ES_MULTILINE ÊÇ·ñÔÊÐí¶àÐÐÊäÈë
  • ES_PASSWORD ÊÇ·ñΪÃÜÂëÊäÈë¿ò£¬Èç¹ûÖ¸Ã÷¸Ã·ç¸ñÔòÊäÈëµÄÎÄ×ÖÏÔʾΪ*
  • ES_READONLY ÊÇ·ñΪֻ¶Á
  • ES_UPPERCASE,ES_LOWERCASE ÏÔʾ´óд/Сд×Ö·û

¿ØÖÆÏÔʾµÄÎı¾ÀûÓóÉÔ±º¯ÊýSetWindowText/GetWindowTextÓÃÓÚÉèÖÃ/µÃµ½µ±Ç°ÏÔʾµÄÎı¾¡£

ͨ¹ýGetLimitText/SetLimitText¿ÉÒԵõ½/ÉèÖÃÔÚÊäÈë¿òÖÐÊäÈëµÄ×Ö·ûÊýÁ¿¡£

ÓÉÓÚÔÚÊäÈëʱÓû§¿ÉÄÜÑ¡Ôñijһ¶ÎÎı¾£¬ËùÒÔͨ¹ývoid CEdit::GetSel( int& nStartChar, int& nEndChar )µÃµ½Óû§Ñ¡ÔñµÄ×Ö·û·¶Î§£¬Í¨¹ýµ÷ÓÃvoid CEdit::SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE )¿ÉÒÔÉèÖõ±Ç°Ñ¡ÔñµÄÎı¾·¶Î§£¬Èç¹ûÖ¸¶¨nStartChar=0 nEndChar=-1Ôò±íʾѡÖÐËùÓеÄÎı¾¡£void ReplaceSel( LPCTSTR lpszNewText, BOOL bCanUndo = FALSE )¿ÉÒÔ½«Ñ¡ÖеÄÎı¾Ì滻Ϊָ¶¨µÄÎÄ×Ö¡£

´ËÍâÊäÈë¿ò»¹ÓÐһЩºÍ¼ôÌù°åÓйصŦÄÜ£¬void Clear( );ɾ³ýÑ¡ÖеÄÎı¾£¬void Copy( );¿É½«Ñ¡ÖеÄÎı¾ËÍÈë¼ôÌù°å£¬void Paste( );½«¼ôÌù°åÖÐÄÚÈݲåÈëµ½µ±Ç°ÊäÈë¿òÖйâ±êλÖã¬void Cut( );Ï൱ÓÚCopyºÍClear½áºÏʹÓá£

×îºó½éÉÜÒ»ÏÂÊäÈë¿ò¼¸ÖÖ³£ÓõÄÏûÏ¢Ó³Éäºê£º

  • ON_EN_CHANGE ÊäÈë¿òÖÐÎÄ×Ö¸üкó²úÉú
  • ON_EN_ERRSPACE ÊäÈë¿òÎÞ·¨·ÖÅäÄÚ´æÊ±²úÉú
  • ON_EN_KILLFOCUS / ON_EN_SETFOCUS ÔÚÊäÈë¿òʧȥ/µÃµ½ÊäÈë½¹µãʱ²úÉú
ʹÓÃÒÔÉϼ¸ÖÖÏûÏ¢Ó³ÉäµÄ·½·¨Îª¶¨ÒåÔ­ÐÍÈ磺afx_msg void memberFxn( );µÄº¯Êý£¬²¢ÇÒ¶¨ÒåÐÎʽÈçON_Notification( id, memberFxn )µÄÏûÏ¢Ó³Éä¡£Èç¹ûÔÚ¶Ô»°¿òÖÐʹÓÃÊäÈë¿ò£¬Class Wizard»á×Ô¶¯ÁгöÏà¹ØµÄÏûÏ¢£¬²¢ÄÜ×Ô¶¯²úÉúÏûÏ¢Ó³Éä´úÂë¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.4 Scroll Bar

Scroll BarÒ»°ã²»»áµ¥¶ÀʹÓã¬ÒòΪSpinCtrl¿ÉÒÔÈ¡´ú¹ö¶¯ÌõµÄÒ»²¿·Ö×÷Ó㬵«ÊÇÈç¹ûÄãÐèÒª×Ô¼ºÉú³ÉÅÉÉú´°¿Ú£¬¹ö¶¯Ìõ»¹ÊÇ»áÅÉÉÏһЩÓó¡¡£´´½¨Ò»¸ö¹ö¶¯Ìõ¿ÉÒÔʹÓóÉÔ±º¯Êý£º £º
BOOL CEdit::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
ÆäÖÐdwStyle½«Ö¸Ã÷¸Ã´°¿ÚµÄ·ç¸ñ£¬³ýÁË×Ó´°¿Ú³£Óõķç¸ñWS_CHILD,WS_VISIBLEÍ⣬Äã¿ÉÒÔÕë¶Ô¹ö¶¯ÌõÖ¸Ã÷רÃŵķç¸ñ¡£

  • SBS_VERT ·ç¸ñ½«´´½¨Ò»¸ö´¹Ö±µÄ¹ö¶¯Ìõ¡£
  • SBS_HORZ ·ç¸ñ½«´´½¨Ò»¸öˮƽµÄ¹ö¶¯Ìõ¡£

ÔÚ´´½¨¹ö¶¯ÌõºóÐèÒªµ÷ÓÃvoid SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE )ÉèÖùö¶¯·¶Î§£¬
int GetScrollPos( )/int SetScrollPos( )ÓÃÀ´µÃµ½ºÍÉèÖõ±Ç°¹ö¶¯ÌõµÄλÖá£

void ShowScrollBar( BOOL bShow = TRUE );ÓÃÀ´ÏÔʾ/Òþ²Ø¹ö¶¯Ìõ¡£

BOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH )ÓÃÀ´ÉèÖùö¶¯ÌõÉϼýÍ·ÊÇ·ñΪÔÊÐí״̬¡£nArrowFlags¿ÉÈ¡ÒÔÏÂÖµ£º

  • ESB_ENABLE_BOTH Á½¸ö¼ýÍ·¶¼ÎªÔÊÐí״̬
  • ESB_DISABLE_LTUP ÉÏ/×ó¼ýͷΪ½ûֹ״̬
  • ESB_DISABLE_RTDN ÏÂ/ÓÒ¼ýͷΪ½ûֹ״̬
  • ESB_DISABLE_BOTH Á½¸ö¼ýÍ·¶¼Îª½ûֹ״̬

Èç¹ûÐèÒªÔÚ¹ö¶¯ÌõλÖñ»¸Ä±äʱµÃµ½Í¨Öª£¬ÐèÒªÔÚ¸¸´°¿ÚÖж¨Òå¶ÔÏûÏ¢WM_VSCROLL/WM_HSCROLLµÄÓ³Éä¡£·½·¨ÎªÔÚ¸¸´°¿ÚÀàÖÐÖØÔØ
afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )/afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
ËùʹÓõÄÏûÏ¢Ó³ÉäºêΪ£ºON_WM_VSCROLL( ),ON_WM_HSCROLL( )£¬ÔÚÓ³ÉäºêÖв»ÐèÒªÖ¸Ã÷¹ö¶¯ÌõµÄID£¬ÒòΪËùÓйö¶¯ÌõµÄ¹ö¶¯ÏûÏ¢¶¼ÓÉͬÑùµÄº¯Êý´¦Àí¡£ÔÚOnHScroll/OnVScrollµÄµÚÈý¸ö²ÎÊý»áÖ¸Ã÷µ±Ç°¹ö¶¯ÌõµÄÖ¸Õë¡£µÚÒ»¸ö²ÎÊý±íʾ¹ö¶¯ÌõÉÏ·¢ÉúµÄ¶¯×÷£¬¿ÉÈ¡ÒÔÏÂÖµ£º

  • SB_TOP/SB_BOTTOM Òѹö¶¯µ½¶¥/µ×²¿
  • SB_LINEUP/SB_LINEDOWN ÏòÉÏ/Ϲö¶¯Ò»ÐÐ
  • SB_PAGEDOWN/SB_PAGEUP ÏòÉÏ/Ϲö¶¯Ò»Ò³
  • SB_THUMBPOSITION/SB_THUMBTRACK ¹ö¶¯ÌõÍ϶¯µ½Ä³Ò»Î»Ö㬲ÎÊýnPosÖ¸Ã÷µ±Ç°Î»Ö㨲ÎÊýnPosÔÚÆäËüµÄÇé¿öÏÂÊÇÎÞЧµÄ£©
  • SB_ENDSCROLL ¹ö¶¯ÌõÍ϶¯Íê³É£¨Óû§ËÉ¿ªÊó±ê£©

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.5 List Box/Check List Box

ListBox´°¿ÚÓÃÀ´ÁгöһϵÁеÄÎı¾£¬Ã¿ÌõÎı¾Õ¼Ò»ÐС£´´½¨Ò»¸öÁÐ±í´°¿Ú¿ÉÒÔʹÓóÉÔ±º¯Êý£º
BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
ÆäÖÐdwStyle½«Ö¸Ã÷¸Ã´°¿ÚµÄ·ç¸ñ£¬³ýÁË×Ó´°¿Ú³£Óõķç¸ñWS_CHILD,WS_VISIBLEÍ⣬Äã¿ÉÒÔÕë¶ÔÁÐ±í¿Ø¼þÖ¸Ã÷רÃŵķç¸ñ¡£

  • LBS_MULTIPLESEL Ö¸Ã÷Áбí¿ò¿ÉÒÔͬʱѡÔñ¶àÐÐ
  • LBS_EXTENDEDSEL ¿ÉÒÔͨ¹ý°´ÏÂShift/Ctrl¼üÑ¡Ôñ¶àÐÐ
  • LBS_SORT ËùÓеÄÐа´ÕÕ×Öĸ˳Ðò½øÐÐÅÅÐò

ÔÚÁбí¿òÉú³ÉºóÐèÒªÏòÆäÖмÓÈë»òÊÇɾ³ýÐУ¬¿ÉÒÔÀûÓãº
int AddString( LPCTSTR lpszItem )Ìí¼ÓÐУ¬
int DeleteString( UINT nIndex )ɾ³ýÖ¸¶¨ÐУ¬
int InsertString( int nIndex, LPCTSTR lpszItem )½«ÐвåÈëµ½Ö¸¶¨Î»Öá£
void ResetContent( )¿ÉÒÔɾ³ýÁбí¿òÖÐËùÓÐÐС£
ͨ¹ýµ÷ÓÃint GetCount( )µÃµ½µ±Ç°Áбí¿òÖÐÐеÄÊýÁ¿¡£

Èç¹ûÐèÒªµÃµ½/ÉèÖõ±Ç°±»Ñ¡ÖеÄÐУ¬¿ÉÒÔµ÷ÓÃint GetCurSel( )/int SetCurSel(int iIndex)¡£Èç¹ûÄãÖ¸Ã÷ÁËÑ¡Ôñ¶àÐеķç¸ñ£¬Äã¾ÍÐèÒªÏȵ÷ÓÃint GetSelCount( )µÃµ½±»Ñ¡ÖеÄÐеÄÊýÁ¿£¬È»ºóint GetSelItems( int nMaxItems, LPINT rgIndex )µÃµ½ËùÓÐÑ¡ÖеÄÐУ¬²ÎÊýrgIndexΪ´æ·Å±»Ñ¡ÖÐÐеÄÊý×顣ͨ¹ýµ÷ÓÃint GetLBText( int nIndex, LPTSTR lpszText )µÃµ½Áбí¿òÄÚÖ¸¶¨ÐеÄ×Ö·û´®¡£

´ËÍâͨ¹ýµ÷ÓÃint FindString( int nStartAfter, LPCTSTR lpszItem )¿ÉÒÔÔÚµ±Ç°ËùÓÐÐÐÖвéÕÒÖ¸¶¨µÄ×Ö·û´«µÄλÖã¬nStartAfterÖ¸Ã÷´ÓÄÇÒ»ÐпªÊ¼½øÐвéÕÒ¡£
int SelectString( int nStartAfter, LPCTSTR lpszItem )¿ÉÒÔÑ¡Öаüº¬Ö¸¶¨×Ö·û´®µÄÐС£

ÔÚMFC 4.2°æ±¾ÖÐÌí¼ÓÁËCCheckListBoxÀ࣬¸ÃÀàÊÇÓÉCListBoxÅÉÉú²¢ÓµÓÐCListBoxµÄËùÓй¦ÄÜ£¬²»Í¬µÄÊÇ¿ÉÒÔÔÚÿÐÐǰ¼ÓÉÏÒ»¸ö¼ì²é¿ò¡£±ØÐë×¢ÒâµÄÊÇÔÚ´´½¨Ê±±ØÐëÖ¸Ã÷LBS_OWNERDRAWFIXED»òLBS_OWNERDRAWVARIABLE·ç¸ñ¡£

ͨ¹ývoid SetCheckStyle( UINT nStyle )/UINT GetCheckStyle( )¿ÉÒÔÉèÖÃ/µÃµ½¼ì²é¿òµÄ·ç¸ñ£¬¹ØÓÚ¼ì²é¿ò·ç¸ñ¿ÉÒԲο¼4.1 ButtonÖнéÉÜ¡£Í¨¹ývoid SetCheck( int nIndex, int nCheck )/int GetCheck( int nIndex )¿ÉÒÔÉèÖú͵õ½Ä³Ðеļì²é״̬£¬¹ØÓÚ¼ì²é¿ò״̬¿ÉÒԲο¼4.1 ButtonÖнéÉÜ¡£

×îºó½éÉÜÒ»ÏÂÁбí¿ò¼¸ÖÖ³£ÓõÄÏûÏ¢Ó³Éäºê£º

  • ON_LBN_DBLCLK Êó±êË«»÷
  • ON_EN_ERRSPACE ÊäÈë¿òÎÞ·¨·ÖÅäÄÚ´æÊ±²úÉú
  • ON_EN_KILLFOCUS / ON_EN_SETFOCUS ÔÚÊäÈë¿òʧȥ/µÃµ½ÊäÈë½¹µãʱ²úÉú
  • ON_LBN_SELCHANGE Ñ¡ÔñµÄÐз¢Éú¸Ä±ä
ʹÓÃÒÔÉϼ¸ÖÖÏûÏ¢Ó³ÉäµÄ·½·¨Îª¶¨ÒåÔ­ÐÍÈ磺afx_msg void memberFxn( );µÄº¯Êý£¬²¢ÇÒ¶¨ÒåÐÎʽÈçON_Notification( id, memberFxn )µÄÏûÏ¢Ó³Éä¡£Èç¹ûÔÚ¶Ô»°¿òÖÐʹÓÃÁбí¿ò£¬Class Wizard»á×Ô¶¯ÁгöÏà¹ØµÄÏûÏ¢£¬²¢ÄÜ×Ô¶¯²úÉúÏûÏ¢Ó³Éä´úÂë¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.6 Combo Box/Combo Box Ex

×éºÏ´°¿ÚÊÇÓÉÒ»¸öÊäÈë¿òºÍÒ»¸öÁбí¿ò×é³É¡£´´½¨Ò»¸ö×éºÏ´°¿Ú¿ÉÒÔʹÓóÉÔ±º¯Êý£º
BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
ÆäÖÐdwStyle½«Ö¸Ã÷¸Ã´°¿ÚµÄ·ç¸ñ£¬³ýÁË×Ó´°¿Ú³£Óõķç¸ñWS_CHILD,WS_VISIBLEÍ⣬Äã¿ÉÒÔÕë¶ÔÁÐ±í¿Ø¼þÖ¸Ã÷רÃŵķç¸ñ¡£

  • CBS_DROPDOWN ÏÂÀ­Ê½×éºÏ¿ò
  • CBS_DROPDOWNLIST ÏÂÀ­Ê½×éºÏ¿ò£¬µ«ÊÇÊäÈë¿òÄÚ²»ÄܽøÐÐÊäÈë
  • CBS_SIMPLE ÊäÈë¿òºÍÁбí¿òͬʱ±»ÏÔʾ
  • LBS_SORT ËùÓеÄÐа´ÕÕ×Öĸ˳Ðò½øÐÐÅÅÐò

ÓÉÓÚ×éºÏ¿òÄÚ°üº¬ÁËÁбí¿ò£¬ËùÒÔÁбí¿òµÄ¹¦Äܶ¼Äܹ»Ê¹Óã¬Èç¿ÉÒÔÀûÓãº
int AddString( LPCTSTR lpszItem )Ìí¼ÓÐУ¬
int DeleteString( UINT nIndex )ɾ³ýÖ¸¶¨ÐУ¬
int InsertString( int nIndex, LPCTSTR lpszItem )½«ÐвåÈëµ½Ö¸¶¨Î»Öá£
void ResetContent( )¿ÉÒÔɾ³ýÁбí¿òÖÐËùÓÐÐС£
ͨ¹ýµ÷ÓÃint GetCount( )µÃµ½µ±Ç°Áбí¿òÖÐÐеÄÊýÁ¿¡£

Èç¹ûÐèÒªµÃµ½/ÉèÖõ±Ç°±»Ñ¡ÖеÄÐеÄλÖ㬿ÉÒÔµ÷ÓÃint GetCurSel( )/int SetCurSel(int iIndex)¡£Í¨¹ýµ÷ÓÃint GetLBText( int nIndex, LPTSTR lpszText )µÃµ½Áбí¿òÄÚÖ¸¶¨ÐеÄ×Ö·û´®¡£

´ËÍâͨ¹ýµ÷ÓÃint FindString( int nStartAfter, LPCTSTR lpszItem )¿ÉÒÔÔÚµ±Ç°ËùÓÐÐÐÖвéÕÒÖ¸¶¨µÄ×Ö·û´«µÄλÖã¬nStartAfterÖ¸Ã÷´ÓÄÇÒ»ÐпªÊ¼½øÐвéÕÒ¡£
int SelectString( int nStartAfter, LPCTSTR lpszItem )¿ÉÒÔÑ¡Öаüº¬Ö¸¶¨×Ö·û´®µÄÐС£

´ËÍâÊäÈë¿òµÄ¹¦Äܶ¼Äܹ»Ê¹Óã¬Èç¿ÉÒÔÀûÓãº
DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )µÃµ½»òÉèÖÃÊäÈë¿òÖб»Ñ¡ÖеÄ×Ö·ûλÖá£
BOOL LimitText( int nMaxChars )ÉèÖÃÊäÈë¿òÖпÉÊäÈëµÄ×î´ó×Ö·ûÊý¡£
ÊäÈë¿òµÄ¼ôÌù°å¹¦ÄÜCopy,Clear,Cut,Paste¶¯¿ÉÒÔʹÓá£

×îºó½éÉÜÒ»ÏÂÁбí¿ò¼¸ÖÖ³£ÓõÄÏûÏ¢Ó³Éäºê£º

  • ON_CBN_DBLCLK Êó±êË«»÷
  • ON_CBN_DROPDOWN Áбí¿ò±»µ¯³ö
  • ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS ÔÚÊäÈë¿òʧȥ/µÃµ½ÊäÈë½¹µãʱ²úÉú
  • ON_CBN_SELCHANGE Áбí¿òÖÐÑ¡ÔñµÄÐз¢Éú¸Ä±ä
  • ON_CBN_EDITUPDATE ÊäÈë¿òÖÐÄÚÈݱ»¸üÐÂ
ʹÓÃÒÔÉϼ¸ÖÖÏûÏ¢Ó³ÉäµÄ·½·¨Îª¶¨ÒåÔ­ÐÍÈ磺afx_msg void memberFxn( );µÄº¯Êý£¬²¢ÇÒ¶¨ÒåÐÎʽÈçON_Notification( id, memberFxn )µÄÏûÏ¢Ó³Éä¡£Èç¹ûÔÚ¶Ô»°¿òÖÐʹÓÃ×éºÏ¿ò£¬Class Wizard»á×Ô¶¯ÁгöÏà¹ØµÄÏûÏ¢£¬²¢ÄÜ×Ô¶¯²úÉúÏûÏ¢Ó³Éä´úÂë¡£

ÔÚMFC 4.2ÖжÔ×éºÏ¿ò½øÐÐÁËÔöÇ¿£¬Äã¿ÉÒÔÔÚ×éºÏ¿òÖÐʹÓÃImageList£¬ÓÐÒ»¸öеÄÀàCComboBoxEx£¨ÓÉCComboBoxÅÉÉú£©À´ÊµÏÖÕâÒ»¹¦ÄÜ¡£ÔÚCComboBoxExÀàÖÐÌí¼ÓÁËһЩеijÉÔ±º¯ÊýÀ´ÊµÏÖÐµĹ¦ÄÜ£ºÊ×ÏÈÄãÐèÒªµ÷ÓÃ
CImageList* SetImageList( CImageList* pImageList );À´ÉèÖÃImageList£¬È»ºóµ÷ÓÃ
int InsertItem( const COMBOBOXEXITEM* pCBItem );À´Ìí¼ÓÐУ¬ÆäÖÐCOMBOBOXEXITEM¶¨ÒåÈçÏ£º

typedef struct 
{    
	UINT    mask;    
	int     iItem;    
	LPTSTR  pszText;
	int     cchTextMax;    
	int     iImage;    
	int     iSelectedImage;
	int     iOverlay;    
	int     iIndent;    
	LPARAM  lParam;
} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;
ÄãÐèÒªÉèÖÃmask=CBEIF_IMAGE|CBEIF_TEXT£¬²¢ÉèÖÃiItemΪ²åÈëλÖã¬ÉèÖÃpszTextΪÏÔʾ×Ö·û´®£¬ÉèÖÃiImageΪÏÔʾµÄͼ±êË÷Òý¡£ÏÂÃæµÄ´úÂëÑÝʾÁËÈçºÎ½øÐвåÈ룺
/*m_cbeWnd ΪÒѾ­´´½¨µÄCComboBox¶ÔÏó
m_list ΪCImageList¶ÔÏóIDB_IMG Ϊ16*(16*4)µÄλͼ£¬Ã¿¸öͼƬΪ16*16¹²4¸öͼ±ê*/
m_list.Create(IDB_IMG,16,4,RGB(0,0,0));
m_cbeWnd.SetImageList(&m_list);

COMBOBOXEXITEM insItem;
insItem.mask=CBEIF_IMAGE|CBEIF_TEXT;
insItem.iItem=0;
insItem.iImage=0;
insItem.pszText="Line 1";
m_cbeWnd.InsertItem(&insItem);
insItem.iItem=1;
insItem.iImage=1;
insItem.pszText="Line 2";
m_cbeWnd.InsertItem(&insItem);
ͨ¹ýµ÷ÓÃint DeleteItem( int iIndex );À´É¾³ýÐУ¬²¢Ö¸Ã÷ÐеÄλÖá£
ͨ¹ýµ÷ÓÃBOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );À´µÃµ½/ÉèÖÃÐÐÊý¾Ý¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.7 Tree Ctrl

Ê÷ÐοؼþTreeCtrlºÍϽÚÒª½²µÄÁÐ±í¿Ø¼þ ListCtrlÔÚϵͳÖдóÁ¿±»Ê¹Óã¬ÀýÈçWindows×ÊÔ´¹ÜÀíÆ÷¾ÍÊÇÒ»¸öµäÐ͵ÄÀý×Ó¡£

Ê÷Ðοؼþ¿ÉÒÔÓÃÓÚÊ÷ÐεĽṹ£¬ÆäÖÐÓÐÒ»¸ö¸ù½Óµã(Root)È»ºóÏÂÃæÓÐÐí¶à×Ó½áµã£¬¶øÃ¿¸ö×Ó½áµãÉÏÓÐÔÊÐíÓÐÒ»¸ö»ò¶à¸ö»òûÓÐ×Ó½áµã¡£MFCÖÐʹÓÃCTreeCtrlÀàÀ´·â×°Ê÷ÐοؼþµÄ¸÷ÖÖ²Ù×÷¡£Í¨¹ýµ÷ÓÃ
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );´´½¨Ò»¸ö´°¿Ú£¬dwStyleÖпÉÒÔʹÓÃÒÔÏÂһЩÊ÷ÐοؼþµÄרÓ÷ç¸ñ£º

  • TVS_HASLINES ÔÚ¸¸/×Ó½áµãÖ®¼ä»æÖÆÁ¬Ïß
  • TVS_LINESATROOT ÔÚ¸ù/×Ó½áµãÖ®¼ä»æÖÆÁ¬Ïß
  • TVS_HASBUTTONS ÔÚÿһ¸ö½áµãǰÌí¼ÓÒ»¸ö°´Å¥£¬ÓÃÓÚ±íʾµ±Ç°½áµãÊÇ·ñÒѱ»Õ¹¿ª
  • TVS_EDITLABELS ½áµãµÄÏÔʾ×Ö·û¿ÉÒÔ±»±à¼­
  • TVS_SHOWSELALWAYS ÔÚʧȥ½¹µãʱҲÏÔʾµ±Ç°Ñ¡ÖеĽáµã
  • TVS_DISABLEDRAGDROP ²»ÔÊÐíDrag/Drop
  • TVS_NOTOOLTIPS ²»Ê¹ÓÃToolTipÏÔʾ½áµãµÄÏÔʾ×Ö·û
ÔÚÊ÷ÐοؼþÖÐÿһ¸ö½áµã¶¼ÓÐÒ»¸ö¾ä±ú£¨HTREEITEM£©£¬Í¬Ê±Ìí¼Ó½áµãʱ±ØÐëÌṩµÄ²ÎÊýÊǸýáµãµÄ¸¸½áµã¾ä±ú£¬£¨ÆäÖиùRoot½áµãÖ»ÓÐÒ»¸ö£¬¼È²»¿ÉÒÔÌí¼ÓÒ²²»¿ÉÒÔɾ³ý£©ÀûÓÃ
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );¿ÉÒÔÌí¼ÓÒ»¸ö½áµã£¬pszItemΪÏÔʾµÄ×Ö·û£¬hParent´ú±í¸¸½áµãµÄ¾ä±ú£¬µ±Ç°Ìí¼ÓµÄ½áµã»áÅÅÔÚhInsertAfter±íʾµÄ½áµãµÄºóÃæ£¬·µ»ØÖµÎªµ±Ç°´´½¨µÄ½áµãµÄ¾ä±ú¡£ÏÂÃæµÄ´úÂë»á½¨Á¢Ò»¸öÈçÏÂÐÎʽµÄÊ÷Ðνṹ£º
+--- Parent1
    +--- Child1_1
    +--- Child1_2
    +--- Child1_3
+--- Parent2
+--- Parent3

/*¼ÙÉèm_treeΪһ¸öCTreeCtrl¶ÔÏ󣬶øÇҸô°¿ÚÒѾ­´´½¨*/
HTREEITEM hItem,hSubItem;
hItem = m_tree.InsertItem("Parent1",TVI_ROOT);ÔÚ¸ù½áµãÉÏÌí¼ÓParent1
hSubItem = m_tree.InsertItem("Child1_1",hItem);//ÔÚParent1ÉÏÌí¼ÓÒ»¸ö×Ó½áµã
hSubItem = m_tree.InsertItem("Child1_2",hItem,hSubItem);//ÔÚParent1ÉÏÌí¼ÓÒ»¸ö×Ó½áµã£¬ÅÅÔÚChild1_1ºóÃæ
hSubItem = m_tree.InsertItem("Child1_3",hItem,hSubItem);

hItem = m_tree.InsertItem("Parent2",TVI_ROOT,hItem);    
hItem = m_tree.InsertItem("Parent3",TVI_ROOT,hItem);    
Èç¹ûÄãÏ£ÍûÔÚÿ¸ö½áµãǰÌí¼ÓÒ»¸öСͼ±ê£¬¾Í±ØÐèÏȵ÷ÓÃCImageList* SetImageList( CImageList * pImageList, int nImageListType );Ö¸Ã÷µ±Ç°ËùʹÓõÄImageList£¬nImageListTypeΪTVSIL_NORMAL¡£ÔÚµ÷ÓÃÍê³Éºó¿Ø¼þÖÐʹÓÃͼƬÒÔÉèÖõÄImageListÖÐͼƬΪ׼¡£È»ºóµ÷ÓÃ
HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);Ìí¼Ó½áµã£¬nImageΪ½áµãû±»Ñ¡ÖÐʱËùʹÓÃͼƬÐòºÅ£¬nSelectedImageΪ½áµã±»Ñ¡ÖÐʱËùʹÓÃͼƬÐòºÅ¡£ÏÂÃæµÄ´úÂëÑÝʾÁËImageListµÄÉèÖá£
/*m_list ΪCImageList¶ÔÏó
IDB_TREE Ϊ16*(16*4)µÄλͼ£¬Ã¿¸öͼƬΪ16*16¹²4¸öͼ±ê*/
m_list.Create(IDB_TREE,16,4,RGB(0,0,0));
m_tree.SetImageList(&m_list,TVSIL_NORMAL);
m_tree.InsertItem("Parent1",0,1);//Ìí¼Ó£¬Ñ¡ÖÐʱÏÔʾͼ±ê1£¬Î´Ñ¡ÖÐʱÏÔʾͼ±ê0

´ËÍâCTreeCtrl»¹ÌṩÁËһЩº¯ÊýÓÃÓڵõ½/Ð޸ĿؼþµÄ״̬¡£
HTREEITEM GetSelectedItem( );½«·µ»Øµ±Ç°Ñ¡ÖеĽáµãµÄ¾ä±ú¡£BOOL SelectItem( HTREEITEM hItem );½«Ñ¡ÖÐÖ¸Ã÷½áµã¡£
BOOL GetItemImage( HTREEITEM hItem, int& nImage, int& nSelectedImage ) / BOOL SetItemImage( HTREEITEM hItem, int nImage, int nSelectedImage )ÓÃÓڵõ½/ÐÞ¸Äij½áµãËùʹÓÃͼ±êË÷Òý¡£
CString GetItemText( HTREEITEM hItem ) /BOOL SetItemText( HTREEITEM hItem, LPCTSTR lpszItem );ÓÃÓڵõ½/ÐÞ¸Äijһ½áµãµÄÏÔʾ×Ö·û¡£
BOOL DeleteItem( HTREEITEM hItem );ÓÃÓÚɾ³ýijһ½áµã£¬BOOL DeleteAllItems( );½«É¾³ýËùÓнáµã¡£

´ËÍâÈç¹ûÏë±éÀúÊ÷¿ÉÒÔʹÓÃÏÂÃæµÄº¯Êý£º
HTREEITEM GetRootItem( );µÃµ½¸ù½áµã¡£
HTREEITEM GetChildItem( HTREEITEM hItem );µÃµ½×Ó½áµã¡£
HTREEITEM GetPrevSiblingItem/GetNextSiblingItem( HTREEITEM hItem );µÃµ½Ö¸Ã÷½áµãµÄÉÏ/ÏÂÒ»¸öÐֵܽáµã¡£
HTREEITEM GetParentItem( HTREEITEM hItem );µÃµ½¸¸½áµã¡£

Ê÷ÐοؼþµÄÏûÏ¢Ó³ÉäʹÓÃON_NOTIFYºê£¬ÐÎʽÈçͬ£ºON_NOTIFY( wNotifyCode, id, memberFxn )£¬wNotifyCodeΪ֪ͨ´úÂ룬idΪ²úÉú¸ÃÏûÏ¢µÄ´°¿ÚID£¬memberFxnΪ´¦Àíº¯Êý£¬º¯ÊýµÄÔ­ÐÍÈçͬvoid OnXXXTree(NMHDR* pNMHDR, LRESULT* pResult)£¬ÆäÖÐpNMHDRΪһÊý¾Ý½á¹¹£¬ÔÚ¾ßÌåʹÓÃʱÐèҪת»»³ÉÆäËûÀàÐ͵Ľṹ¡£¶ÔÓÚÊ÷Ðοؼþ¿ÉÄÜȡֵºÍ¶ÔÓ¦µÄÊý¾Ý½á¹¹Îª£º

  • TVN_SELCHANGED ÔÚËùÑ¡ÖеĽáµã·¢Éú¸Ä±äºó·¢ËÍ£¬ËùÓýṹ£ºNMTREEVIEW
  • TVN_ITEMEXPANDED ÔÚij½áµã±»Õ¹¿ªºó·¢ËÍ£¬ËùÓýṹ£ºNMTREEVIEW
  • TVN_BEGINLABELEDIT ÔÚ¿ªÊ¼±à¼­½áµã×Ö·ûʱ·¢ËÍ£¬ËùÓýṹ£ºNMTVDISPINFO
  • TVN_ENDLABELEDIT ÔÚ½áÊø±à¼­½áµã×Ö·ûʱ·¢ËÍ£¬ËùÓýṹ£ºNMTVDISPINFO
  • TVN_GETDISPINFO ÔÚÐèÒªµÃµ½Ä³½áµãÐÅϢʱ·¢ËÍ£¬£¨ÈçµÃµ½½áµãµÄÏÔʾ×Ö·û£©ËùÓýṹ£ºNMTVDISPINFO
¹ØÓÚON_NOTIFYÓкܶàÄÚÈÝ£¬½«ÔÚÒÔºóµÄÄÚÈÝÖнøÐÐÏêϸ½²½â¡£

¹ØÓÚ¶¯Ì¬Ìṩ½áµãËùÏÔʾµÄ×Ö·û£ºÊ×ÏÈÄãÔÚÌí¼Ó½áµãʱÐèÒªÖ¸Ã÷lpszItem²ÎÊýΪ£ºLPSTR_TEXTCALLBACK¡£ÔڿؼþÏÔʾ¸Ã½áµãʱ»áͨ¹ý·¢ËÍTVN_GETDISPINFOÀ´È¡µÃËùÐèÒªµÄ×Ö·û£¬ÔÚ´¦Àí¸ÃÏûϢʱÏȽ«²ÎÊýpNMHDRת»»ÎªLPNMTVDISPINFO£¬È»ºóÌî³äÆäÖÐitem.pszText¡£µ«ÊÇÎÒÃÇͨ¹ýʲôÀ´ÖªµÀ¸Ã½áµãËù¶ÔÓ¦µÄÐÅÏ¢ÄØ£¬ÎÒµÄ×ö·¨ÊÇÔÚÌí¼Ó½áµãºóÉèÖÃÆälParam²ÎÊý£¬È»ºóÔÚÌṩÐÅϢʱÀûÓøòÎÊýÀ´²éÕÒËù¶ÔÓ¦µÄÐÅÏ¢¡£ÏÂÃæµÄ´úÂë˵Ã÷ÁËÕâÖÖ·½·¨£º

char szOut[8][3]={"No.1","No.2","No.3"};

//Ìí¼Ó½áµã
HTREEITEM hItem = m_tree.InsertItem(LPSTR_TEXTCALLBACK,...)
m_tree.SetItemData(hItem, 0 );
hItem = m_tree.InsertItem(LPSTR_TEXTCALLBACK,...)
m_tree.SetItemData(hItem, 1 );
//´¦ÀíÏûÏ¢
void CParentWnd::OnGetDispInfoTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	TV_DISPINFO* pTVDI = (TV_DISPINFO*)pNMHDR;
	pTVDI->item.pszText=szOut[pTVDI->item.lParam];//ͨ¹ýlParamµÃµ½ÐèÒªÏÔʾµÄ×Ö·ûÔÚÊý×éÖеÄλÖÃ
	*pResult = 0;
}

¹ØÓڱ༭½áµãµÄÏÔʾ×Ö·û£ºÊ×ÏÈÐèÒªÉèÖÃÊ÷ÐοؼþµÄTVS_EDITLABELS·ç¸ñ£¬ÔÚ¿ªÊ¼±à¼­Ê±¸Ã¿Ø¼þ½«»á·¢ËÍTVN_BEGINLABELEDIT£¬Äã¿ÉÒÔͨ¹ýÔÚ´¦Àíº¯ÊýÖзµ»ØTRUEÀ´È¡Ïû½ÓÏÂÀ´µÄ±à¼­£¬Ôڱ༭Íê³Éºó»á·¢ËÍTVN_ENDLABELEDIT£¬ÔÚ´¦Àí¸ÃÏûϢʱÐèÒª½«²ÎÊýpNMHDRת»»ÎªLPNMTVDISPINFO£¬È»ºóͨ¹ýÆäÖеÄitem.pszTextµÃµ½±à¼­ºóµÄ×Ö·û£¬²¢ÖØÖÃÏÔʾ×Ö·û¡£Èç¹û±à¼­ÔÚÖÐ;ÖÐÈ¡Ïû¸Ã±äÁ¿ÎªNULL¡£ÏÂÃæµÄ´úÂë˵Ã÷ÈçºÎ´¦ÀíÕâЩÏûÏ¢£º

//´¦ÀíÏûÏ¢ TVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	TV_DISPINFO* pTVDI = (TV_DISPINFO*)pNMHDR;
	if(pTVDI->item.lParam==0);//ÅжÏÊÇ·ñÈ¡Ïû¸Ã²Ù×÷
		*pResult = 1;
	else
		*pResult = 0;
}
//´¦ÀíÏûÏ¢ TVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditTree(NMHDR* pNMHDR, LRESULT* pResult)
{
	TV_DISPINFO* pTVDI = (TV_DISPINFO*)pNMHDR;
	if(pTVDI->item.pszText==NULL);//ÅжÏÊÇ·ñÒѾ­È¡ÏûÈ¡Ïû±à¼­
		m_tree.SetItemText(pTVDI->item.hItem,pTVDI->pszText);//ÖØÖÃÏÔʾ×Ö·û
	*pResult = 0;
}
ÉÏÃæ½²ÊöµÄ·½·¨Ëù½øÐеÄÏûÏ¢Ó³É䱨ÐëÔÚ¸¸´°¿ÚÖнøÐУ¨Í¬ÑùWM_NOTIFYµÄËùÓÐÏûÏ¢¶¼ÐèÒªÔÚ¸¸´°¿ÚÖд¦Àí£©¡£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/


4.8 List Ctrl

ÁÐ±í¿Ø¼þ¿ÉÒÔ¿´×÷Êǹ¦ÄÜÔöÇ¿µÄListBox£¬ËüÌṩÁËËÄÖÖ·ç¸ñ£¬¶øÇÒ¿ÉÒÔͬʱÏÔʾһÁеĶàÖÐÊôÐÔÖµ¡£MFCÖÐʹÓÃCListCtrlÀàÀ´·â×°ÁÐ±í¿Ø¼þµÄ¸÷ÖÖ²Ù×÷¡£Í¨¹ýµ÷ÓÃ
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );´´½¨Ò»¸ö´°¿Ú£¬dwStyleÖпÉÒÔʹÓÃÒÔÏÂһЩÁÐ±í¿Ø¼þµÄרÓ÷ç¸ñ£º

  • LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT ÕâËÄÖÖ·ç¸ñ¾ö¶¨¿Ø¼þµÄÍâ¹Û£¬Í¬Ê±Ö»¿ÉÒÔÑ¡ÔñÆäÖÐÒ»ÖÖ£¬·Ö±ð¶ÔÓ¦£º´óͼ±êÏÔʾ£¬Ð¡Í¼±êÏÔʾ£¬ÁбíÏÔʾ£¬Ïêϸ±¨±íÏÔʾ
  • LVS_EDITLABELS ½áµãµÄÏÔʾ×Ö·û¿ÉÒÔ±»±à¼­£¬¶ÔÓÚ±¨±í·ç¸ñÀ´½²¿É±à¼­µÄֻΪµÚÒ»ÁС£
  • LVS_SHOWSELALWAYS ÔÚʧȥ½¹µãʱҲÏÔʾµ±Ç°Ñ¡ÖеĽáµã
  • LVS_SINGLESEL ͬʱֻÄÜÑ¡ÖÐÁбíÖÐÒ»Ïî
Ê×ÏÈÄãÐèÒªÉèÖÃÁÐ±í¿Ø¼þËùʹÓõÄImageList£¬Èç¹ûÄãʹÓôóͼ±êÏÔʾ·ç¸ñ£¬Äã¾ÍÐèÒªÒÔÈçÏÂÐÎʽµ÷Óãº
CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);
Èç¹ûʹÓÃÆäËüÈýÖÖ·ç¸ñÏÔʾ¶ø²»ÏëÏÔʾͼ±êÄã¿ÉÒÔ²»½øÐÐÈκÎÉèÖ㬷ñÔòÐèÒªÒÔÈçÏÂÐÎʽµ÷Óãº
CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);

ͨ¹ýµ÷ÓÃint InsertItem( int nItem, LPCTSTR lpszItem );¿ÉÒÔÔÚÁÐ±í¿Ø¼þÖÐnItemÖ¸Ã÷λÖòåÈëÒ»ÏlpszItemΪÏÔʾ×Ö·û¡£³ýLVS_REPORT·ç¸ñÍâÆäËûÈýÖÖ·ç¸ñ¶¼Ö»ÐèÒªÖ±½Óµ÷ÓÃInsertItem¾Í¿ÉÒÔÁË£¬µ«Èç¹ûʹÓñ¨±í·ç¸ñ¾Í±ØÐëÏÈÉèÖÃÁÐ±í¿Ø¼þÖеÄÁÐÐÅÏ¢¡£

ͨ¹ýµ÷ÓÃint InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);¿ÉÒÔ²åÈëÁС£iColΪÁеÄλÖ㬴ÓÁ㿪ʼ£¬lpszColumnHeadingΪÏÔʾµÄÁÐÃû£¬nFormatΪÏÔʾ¶ÔÆë·½Ê½£¬nWidthΪÏÔʾ¿í¶È£¬nSubItemΪ·ÖÅ䏸¸ÃÁеÄÁÐË÷Òý¡£

ÔÚÓжàÁеÄÁÐ±í¿Ø¼þÖоÍÐèҪΪÿһÏîÖ¸Ã÷ÆäÔÚÿһÁÐÖеÄÏÔʾ×Ö·û£¬Í¨¹ýµ÷ÓÃ
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );¿ÉÒÔÉèÖÃÿÁеÄÏÔʾ×Ö·û¡£nItemΪÉèÖõÄÏîµÄλÖã¬nSubItemΪÁÐλÖã¬lpszTextΪÏÔʾ×Ö·û¡£ÏÂÃæµÄ´úÂëÑÝʾÁËÈçºÎÉèÖöàÁв¢²åÈëÊý¾Ý£º

m_list.SetImageList(&m_listSmall,LVSIL_SMALL);//ÉèÖÃImageList
m_list.InsertColumn(0,"Col 1",LVCFMT_LEFT,300,0);//ÉèÖÃÁÐ
m_list.InsertColumn(1,"Col 2",LVCFMT_LEFT,300,1);
m_list.InsertColumn(2,"Col 3",LVCFMT_LEFT,300,2);

m_list.InsertItem(0,"Item 1_1");//²åÈëÐÐ
m_list.SetItemText(0,1,"Item 1_2");//ÉèÖøÃÐеIJ»Í¬ÁеÄÏÔʾ×Ö·û
m_list.SetItemText(0,2,"Item 1_3");

´ËÍâCListCtrl»¹ÌṩÁËһЩº¯ÊýÓÃÓڵõ½/Ð޸ĿؼþµÄ״̬¡£
COLORREF GetTextColor( )/BOOL SetTextColor( COLORREF cr );ÓÃÓڵõ½/ÉèÖÃÏÔʾµÄ×Ö·ûÑÕÉ«¡£
COLORREF GetTextBkColor( )/BOOL SetTextBkColor( COLORREF cr );ÓÃÓڵõ½/ÉèÖÃÏÔʾµÄ±³¾°ÑÕÉ«¡£
void SetItemCount( int iCount );ÓÃÓڵõ½Ìí¼Ó½øÁбíÖÐÏîµÄÊýÁ¿¡£
BOOL DeleteItem(int nItem);ÓÃÓÚɾ³ýijһÏBOOL DeleteAllItems( );½«É¾³ýËùÓÐÏî¡£
BOOL SetBkImage(HBITMAP hbm, BOOL fTile , int xOffsetPercent, int yOffsetPercent);ÓÃÓÚÉèÖñ³¾°Î»Í¼¡£
CString GetItemText( int nItem, int nSubItem );ÓÃÓڵõ½Ä³ÏîµÄÏÔʾ×Ö·û¡£

ÁÐ±í¿Ø¼þµÄÏûÏ¢Ó³ÉäͬÑùʹÓÃON_NOTIFYºê£¬ÐÎʽÈçͬ£ºON_NOTIFY( wNotifyCode, id, memberFxn )£¬wNotifyCodeΪ֪ͨ´úÂ룬idΪ²úÉú¸ÃÏûÏ¢µÄ´°¿ÚID£¬memberFxnΪ´¦Àíº¯Êý£¬º¯ÊýµÄÔ­ÐÍÈçͬvoid OnXXXList(NMHDR* pNMHDR, LRESULT* pResult)£¬ÆäÖÐpNMHDRΪһÊý¾Ý½á¹¹£¬ÔÚ¾ßÌåʹÓÃʱÐèҪת»»³ÉÆäËûÀàÐ͵Ľṹ¡£¶ÔÓÚÁÐ±í¿Ø¼þ¿ÉÄÜȡֵºÍ¶ÔÓ¦µÄÊý¾Ý½á¹¹Îª£º

  • LVN_BEGINLABELEDIT ÔÚ¿ªÊ¼Ä³Ïî±à¼­×Ö·ûʱ·¢ËÍ£¬ËùÓýṹ£ºNMLVDISPINFO
  • LVN_ENDLABELEDIT ÔÚ½áÊøÄ³Ïî±à¼­×Ö·ûʱ·¢ËÍ£¬ËùÓýṹ£ºNMLVDISPINFO
  • LVN_GETDISPINFO ÔÚÐèÒªµÃµ½Ä³ÏîÐÅϢʱ·¢ËÍ£¬£¨ÈçµÃµ½Ä³ÏîµÄÏÔʾ×Ö·û£©ËùÓýṹ£ºNMLVDISPINFO
¹ØÓÚON_NOTIFYÓкܶàÄÚÈÝ£¬½«ÔÚÒÔºóµÄÄÚÈÝÖнøÐÐÏêϸ½²½â¡£

¹ØÓÚ¶¯Ì¬Ìṩ½áµãËùÏÔʾµÄ×Ö·û£ºÊ×ÏÈÄãÔÚÏîʱÐèÒªÖ¸Ã÷lpszItem²ÎÊýΪ£ºLPSTR_TEXTCALLBACK¡£ÔڿؼþÏÔʾ¸Ã½áµãʱ»áͨ¹ý·¢ËÍTVN_GETDISPINFOÀ´È¡µÃËùÐèÒªµÄ×Ö·û£¬ÔÚ´¦Àí¸ÃÏûϢʱÏȽ«²ÎÊýpNMHDRת»»ÎªLPNMLVDISPINFO£¬È»ºóÌî³äÆäÖÐitem.pszText¡£Í¨¹ýitemÖеÄiItem,iSubItem¿ÉÒÔÖªµÀµ±Ç°ÏÔʾµÄΪÄÇÒ»Ïî¡£ÏÂÃæµÄ´úÂëÑÝʾÁËÕâÖÖ·½·¨£º

char szOut[8][3]={"No.1","No.2","No.3"};

//Ìí¼Ó½áµã
m_list.InsertItem(LPSTR_TEXTCALLBACK,...)
m_list.InsertItem(LPSTR_TEXTCALLBACK,...)
//´¦ÀíÏûÏ¢
void CParentWnd::OnGetDispInfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
	LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
	pLVDI->item.pszText=szOut[pTVDI->item.iItem];//ͨ¹ýiItemµÃµ½ÐèÒªÏÔʾµÄ×Ö·ûÔÚÊý×éÖеÄλÖÃ
	*pResult = 0;
}

¹ØÓڱ༭ijÏîµÄÏÔʾ×Ö·û£º£¨ÔÚ±¨±í·ç¸ñÖÐÖ»¶ÔµÚÒ»ÁÐÓÐЧ£©Ê×ÏÈÐèÒªÉèÖÃÁÐ±í¿Ø¼þµÄLVS_EDITLABELS·ç¸ñ£¬ÔÚ¿ªÊ¼±à¼­Ê±¸Ã¿Ø¼þ½«»á·¢ËÍLVN_BEGINLABELEDIT£¬Äã¿ÉÒÔͨ¹ýÔÚ´¦Àíº¯ÊýÖзµ»ØTRUEÀ´È¡Ïû½ÓÏÂÀ´µÄ±à¼­£¬Ôڱ༭Íê³Éºó»á·¢ËÍLVN_ENDLABELEDIT£¬ÔÚ´¦Àí¸ÃÏûϢʱÐèÒª½«²ÎÊýpNMHDRת»»ÎªLPNMLVDISPINFO£¬È»ºóͨ¹ýÆäÖеÄitem.pszTextµÃµ½±à¼­ºóµÄ×Ö·û£¬²¢ÖØÖÃÏÔʾ×Ö·û¡£Èç¹û±à¼­ÔÚÖÐ;ÖÐÈ¡Ïû¸Ã±äÁ¿ÎªNULL¡£ÏÂÃæµÄ´úÂë˵Ã÷ÈçºÎ´¦ÀíÕâЩÏûÏ¢£º

//´¦ÀíÏûÏ¢ LVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditList(NMHDR* pNMHDR, LRESULT* pResult)
{
	LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
	if(pLVDI->item.iItem==0);//ÅжÏÊÇ·ñÈ¡Ïû¸Ã²Ù×÷
		*pResult = 1;
	else
		*pResult = 0;
}
//´¦ÀíÏûÏ¢ LVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditList(NMHDR* pNMHDR, LRESULT* pResult)
{
	LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
	if(pLVDI->item.pszText==NULL);//ÅжÏÊÇ·ñÒѾ­È¡ÏûÈ¡Ïû±à¼­
		m_list.SetItemText(pLVDI->item.iItem,0,pLVDI->pszText);//ÖØÖÃÏÔʾ×Ö·û
	*pResult = 0;
}
ÉÏÃæ½²ÊöµÄ·½·¨Ëù½øÐеÄÏûÏ¢Ó³É䱨ÐëÔÚ¸¸´°¿ÚÖнøÐУ¨Í¬ÑùWM_NOTIFYµÄËùÓÐÏûÏ¢¶¼ÐèÒªÔÚ¸¸´°¿ÚÖд¦Àí£©¡£

ÈçºÎµÃµ½µ±Ç°Ñ¡ÖÐÏîλÖãºÔÚÁÐ±í¿Ø¼þÖÐûÓÐÒ»¸öÀàËÆÓÚListBoxÖÐGetCurSel()µÄº¯Êý£¬µ«ÊÇ¿ÉÒÔͨ¹ýµ÷ÓÃGetNextItem( -1, LVNI_ALL | LVNI_SELECTED);µÃµ½Ñ¡ÖÐÏîλÖá£

°æÈ¨ËùÓÐ ÎÅâùÑó http://www.vchelp.net/