°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
7¡£3¡£3¡¡¡¡Ê¹ÓÃÉ豸ÎÞ¹Øλͼ
É豸ÎÞ¹Øλͼ¼ò³ÆΪDIB£¬ÕâÔÚ5¡£3¡£1С½ÚÖÐÒѾÓÐËù½éÉÜ¡£DIBÒ»°ãÊÇ´æ·ÅÔÚ´ÅÅÌÉϵÄÒÔbmpΪÀ©Õ¹ÃûµÄλͼÎļþ£¬Ê¹ÓÃDIBµÄ¹Ø¼üÊÇÈçºÎ½«DIBÖеÄÊý¾Ýת»¯ÎªÒ»¸öÄÚ´æÖеÄλͼ²¢·µ»ØÒ»¸öλͼ¾ä±ú¡£
bmpÎļþµÄÎļþ½á¹¹ÊÇÕâÑù¶¨ÒåµÄ£ºÎļþµÄ¿ªÊ¼ÊÇÒ»¸öBITMAPFILEHEADER½á¹¹£¬Õâ¸ö½á¹¹¶¨ÒåÈçÏ£º
BITMAPFILEHEADER¡¡STRUCT
¡¡¡¡bfType¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Îļþ±êʶ£¬±ØÐëÊÇ¡°BM¡±
¡¡¡¡bfSize¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Îļþ³¤¶È
¡¡¡¡bfReserved1¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»0
¡¡¡¡bfReserved2¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»0
¡¡¡¡bfOffBits¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼ÏñËØÊý¾ÝÔÚÎļþÖеÄÆðʼλÖÃ
BITMAPFILEHEADER¡¡¡¡¡¡ENDS
BITMAPFILEHEADER½á¹¹µÄºóÃæҪôÊÇBITMAPCOREHEADER½á¹¹£¬ÒªÃ´ÊÇBITMAPINFOHEADER½á¹¹ºÍË÷ÒýÉ«±í£¬ÕâÁ½ÖֽṹµÄ¶¨ÒåÈçÏ£º
BITMAPCOREHEADER¡¡STRUCT
¡¡¡¡bcSize¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»±¾½á¹¹³¤¶È
¡¡¡¡bcWidth¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼¿í¶È
¡¡¡¡bcHeight¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼¸ß¶È
¡¡¡¡bcPlanes¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼µÄɫƽÃæÊý
¡¡¡¡bcBitCount¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼µÄÑÕÉ«Éî¶È
BITMAPCOREHEADER¡¡¡¡¡¡ENDS
¡¡
BITMAPINFOHEADER¡¡STRUCT
¡¡¡¡bcSize¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»±¾½á¹¹³¤¶È
¡¡¡¡bcWidth¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼¿í¶È
¡¡¡¡bcHeight¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼¸ß¶È
¡¡¡¡bcPlanes¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼µÄɫƽÃæÊý
¡¡¡¡bcBitCount¡¡¡¡¡¡¡¡¡¡¡¡¡¡WORD¡¡¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼µÄÑÕÉ«Éî¶È
¡¡¡¡bipression¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Î»Í¼µÄѹËõ·½Ê½
¡¡¡¡biSizeImage¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Í¼Ðγߴç
¡¡¡¡biXPelsPerMeter¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Í¼ÐÎx·½Ïò·Ö±æÂÊ£¬µ¥Î»ÊÇÏñËØ/Ã×
¡¡¡¡biYPelsPerMeter¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿¡¡¡¡¡¡¡¡£»Í¼ÐÎy·½Ïò·Ö±æÂÊ£¬µ¥Î»ÊÇÏñËØ/Ã×
¡¡¡¡biClrUsed¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿
¡¡¡¡biClrImportant¡¡¡¡¡¡DWORD¡¡¡¡¡¡¡¡¡¡£¿
BITMAPINFOHEADER¡¡¡¡¡¡ENDS
ÕâÁ½¸öÊý¾Ý½á¹¹Ö÷Òª°üº¬ÁËλͼµÄһЩ²ÎÊý£¬ÔÚÕâЩÊý¾Ý½á¹¹µÄºóÃ棬¾ÍÊÇλͼµÄÏñËØÊý¾ÝÁË£¬Õû¸öbmpÎļþ¾ÍÓÉÕâ3²¿·Ö×é³É¡£
ҪʹÓÃDIB£¬¿ÉÒÔÊ×ÏȽ«Õû¸öÎļþ¶Áµ½ÄÚ´æÖУ¬È»ºó´ÓÕâЩÊý¾Ý½á¹¹ÖеÃ֪λͼµÄ¸÷ÖÖ²ÎÊý£¬×îºóʹÓÃSetDIBitsToDeviceº¯Êý½«Î»Í¼Êý¾Ý¸´ÖƵ½Ò»¸öhDCÖУ¬Èç¹ûÕâ¸öhDC¶ÔÓ¦Ò»¸öδ³õʼ»¯µÄλͼ£¬ÄÇô¾ÍÏ൱Óڵõ½ÁË°üº¬´ÅÅÌbmpλͼÊý¾ÝµÄλͼ¾ä±ú£¬²¢ÇÒ¿ÉÒÔÔÚÈκεط½Ê¹ÓÃËü¡£µ±È»£¬ÔÚÕâÒÔºó¿ÉÒÔ½«¶ÁÈëÎļþÊý¾ÝµÄÄÚ´æÊͷŵô¡£
SetDIBitsToDeviceº¯ÊýµÄÓ÷¨ÊÇ£º
invoke¡¡¡¡SetDIBitsToDevice£»hDC£»xDest£»yDest£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡dwWidth£»dwHeight£»xSrc£»ySrc£»uStartScan£»cScanLines£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡lpvBits£»lpbmi£»fuColorUse
hDCÊÇÄ¿µÄDCµÄ¾ä±ú£¬xDestºÍyDestÖ¸¶¨ÁËλͼ¸´ÖƵ½hDCµÄ×óÉϽÇλÖã¬dwWidthºÍdwHeightÖ¸¶¨ÁËÒª¸´ÖƵĿí¶ÈºÍ¸ß¶È£¬xSrcºÍySrcÖ¸¶¨DIBÖÐÒª¸´ÖƵÄ×óÉϽÇλÖã¬uStartScanºÍcScanLinesÖ¸¶¨¿ªÊ¼¸´ÖƵÄɨÃèÏߺÍÒª¸´ÖƵÄɨÃèÏßÊý£¬×îºó£¬lpvBitsÖ¸ÏòDIBÖеÄÏñËØÊý¾Ý²¿·Ö£¬lpbmiÖ¸ÏòDIBÖеÄBITMAPINFO»òBITMAPCOREINFO½á¹¹£¬fuColorUseÖ¸¶¨ÁËDIBÖÐÊý¾ÝµÄÀàÐÍ£¬ÓÃDIB_RGB_COLORS±íʾÊý¾ÝÊÇRGBÀàÐ͵ġ£
×Ó³ÌÐò_CreateDIBitmap·ÖÎöÒ»¸öDIBÎļþµÄ²ÎÊý²¢·µ»Ø°üº¬Õû¸öDIBλͼÊý¾ÝµÄλͼ¾ä±ú£¬¶ÁÕß¿ÉÒÔÔÚÈκεط½Ê¹ÓÃÕâ¸öλͼ¾ä±ú¡£×Ó³ÌÐòµÄÊäÈë²ÎÊý_hWndÓÃÀ´»ñÈ¡²Î¿¼hDCµÄ´°¿Ú¾ä±ú£¬_lpFileDataÊǽ«DIBÎļþÕû¸ö¶ÁÈëÄÚ´æºóµÄÄÚ´æÖ¸Õë¡£´úÂëÈçÏ£º
_CreateDIBitmap¡¡¡¡¡¡¡¡¡¡¡¡proc¡¡¡¡¡¡_hWnd£»_lpFileData
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡¡¡¡¡¡¡@lpBitmapInfo£»@lpBitmapBits
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡¡¡¡¡¡¡@dwWidth£»@dwHeight
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡¡¡¡¡¡¡@hDc£»@hBitmap
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pushad
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@hBitmap£»0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡esi£»_lpFileData
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡eax£»BITMAPFILEHEADER¡£bfOffBits¡¡£§esi£§
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡add¡¡¡¡¡¡¡¡¡¡¡¡eax£»esi
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@lpBitmapBits£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡add¡¡¡¡¡¡¡¡¡¡¡¡esi£»sizeof¡¡BITMAPFILEHEADER
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@lpBitmapInfo£»esi
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£if¡¡¡¡¡¡¡¡¡¡¡¡BITMAPINFO¡£bmiHeader¡£biSize¡¡£§esi£§¡¡¡¡sizeof¡¡BITMAPCOREHEADER
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡movzx¡¡¡¡eax£»BITMAPCOREHEADER¡£bcWidth¡¡£§esi£§
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡movzx¡¡¡¡ebx£»BITMAPCOREHEADER¡£bcHeight¡¡£§esi£§
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡eax£»BITMAPINFOHEADER¡£biWidth¡¡£§esi£§
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡ebx£»BITMAPINFOHEADER¡£biHeight¡¡£§esi£§
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£endif
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@dwWidth£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@dwHeight£»ebx
£»********************************************************************
£»¡¡½¨Á¢¿ÕµÄ¡¡Bitmap¡¡Object
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡GetDC£»_hWnd
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡push¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡CreatepatibleDC£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@hDc£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pop¡¡¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡push¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡CreatepatibleBitmap£»eax£»@dwWidth£»@dwHeight
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@hBitmap£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡SelectObject£»@hDc£»@hBitmap
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pop¡¡¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡ReleaseDC£»hWinMain£»eax
£»********************************************************************
£»¡¡½«ÎļþÄÚÈÝÉèÖõ½½¨Á¢µÄ¡¡Bitmap¡¡ÖÐ
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡SetDIBitsToDevice£»@hDc£»0£»0£»@dwWidth£»@dwHeight£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡0£»0£»0£»@dwHeight£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡@lpBitmapBits£»@lpBitmapInfo£»DIB_RGB_COLORS
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£if¡¡¡¡¡¡¡¡¡¡¡¡eax¡¡¡¡0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡DeleteObject£»@hBitmap
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡@hBitmap£»0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£endif
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡DeleteDC£»@hDc
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡popad
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡eax£»@hBitmap
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ret
¡¡
_CreateDIBitmap¡¡¡¡¡¡¡¡¡¡¡¡endp
_CreateDIBitmap×Ó³ÌÐòÊ×ÏÈ·ÖÎöDIBÎļþµÄÊý¾Ý£¬È·¶¨BITMAPFILEHEADERºóÃæµÄÊý¾Ý½á¹¹ÊÇBITMAPINFO»¹ÊÇBITMAPCOREINFO£¬²¢´Ó½á¹¹ÖлñȡλͼµÄ¸ß¶ÈºÍ¿í¶È£¬È»ºó½¨Á¢Ò»¸öδ³õʼ»¯µÄλͼ£¬²¢ÓÃSetDIBitsToDeviceº¯Êý½«Î»Í¼Êý¾Ý¿½±´µ½Õâ¸öλͼÖУ¬×îºó½«Î»Í¼¾ä±ú·µ»ØÒÔ¹©ºóÃæʹÓá£
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ7Õ¡¡Í¼ÐβÙ×÷
7¡£4¡¡¿é´«ËͲÙ×÷£¨1£©
¡¡¡¡¡¡¡¡
³ýÁË7¡£2С½ÚÖеĻæͼº¯Êý£¬¿é´«Ëͺ¯ÊýÒ²ÊÇÖØÒªµÄͼÐβÙ×÷º¯Êý¡£¿é´«ËÍÖ¸°ÑԴλÖÃÖеÄÊý¾Ý¿é°´ÕÕÖ¸¶¨µÄ·½Ê½´«Ë͵½Ä¿µÄλÖÃÖС£°ÑÄÚ´æÖеÄλͼ¸´ÖƵ½´°¿Ú¿Í»§ÇøÒÔ¼°ÔÚ²»Í¬µÄDCÖи´ÖÆͼÐÎÊý¾Ý¶¼ÒªÓõ½¿é´«ËͲÙ×÷£¬¿é´«ËÍÍê³ÉµÄ¹¤×÷¾ÍÏ൱ÓÚͼÐÎÖ®¼äµÄ¿½±´¹¤×÷¡£¿é´«Ëͺ¯ÊýÓÐPatBlt£¬BitBlt£¬MaskBlt£¬PlgBlt£¬TransparentBltºÍStretchBltµÈ¡£
7¡£4¡£1¡¡¡¡¿é´«ËÍ·½Ê½
Óë7¡£2¡£4С½ÚÖнéÉܵĻæͼº¯ÊýµÄROP²Ù×÷ÀàËÆ£¬¿é´«Ëͺ¯ÊýÒ²ÊÇ¿ÉÒÔÓÃROPÂëÀ´¶¨ÒåµÄ´«ËÍ·½Ê½£¬µ«¿é´«Ëͺ¯ÊýµÄROPÂ붨Ò岻ͬÓÚ7¡£2¡£4С½ÚÖеÄROPÂ룬ÒòΪÕâÀïÉæ¼°µÄ²Ù×÷¶ÔÏó¸ü¶à¡£
¿é´«Ë͵ÄROPÂëÊÇÒ»¸ö32λµÄÕûÊý£¬¶ÔÓ¦µÄ²Ù×÷Éæ¼°3ÖÖÔʼÊý¾Ý£ºÔ´ÏñËØ¡¢Ä¿±êÏñËغͻˢ£¬¿é´«ËͲÙ×÷µÄ½á¹ûÊÇÄ¿±êÏñËصÄÊý¾Ý±»3ÖÖÔʼÊý¾ÝµÄ¼ÆËã½á¹ûÌæ»»µô¡£
²¢²»ÊÇÿһÖÖROPÂ붼ҪÓõ½È«²¿3ÖÖÔʼÊý¾Ý£¬ÓеÄÉõÖÁÁ¬1ÖÖÒ²Óò»µ½£¬ÀýÈçÈ«ºÚ»òÕßÈ«°×µÄROPÂë¡£¿é´«Ëͺ¯ÊýʹÓõÄROPÂë×ܹ²ÓÐ256ÖÖ£¬ËüÃÇÊÇ3ÖÖÔʼÊý¾Ý½øÐв»Í¬Î»²Ù×÷£¨È¡·´¡¢Óë¡¢»òºÍÒì»ò£©µÄ×éºÏ£¬µ«ÓÐЩROPÂë¶ÔÓ¦µÄ²Ù×÷½á¹ûʵÔÚÊÇÌ«ÄÑÏëÏñÁË£¬±ÈÈçROPÂë0e20746¶ÔÓ¦µÄ²Ù×÷ÊÇ£¨£¨Ä¿±êÏñËØ¡¡xor¡¡»Ë¢£©¡¡and¡¡Ô´ÏñËØ£©¡¡xor¡¡Ä¿±êÏñËØ£©£¬Æ¾Õâ¸öËãʽµÄÈ·±È½ÏÄÑÒÔÏëÏñ×îºóµÃµ½µÄλͼÊÇʲôÑù×ӵģ¡ÔÚʵ¼ÊʹÓÃÖкܶàËã·¨×éºÏÒ²²¢²»ÊÇÄÇôÓÐÓã¬ËùÒÔWindowsÖ»¶Ô15ÖÖ×î³£ÓõÄROPÂ붨ÒåÁËÔ¤¶¨ÒåµÄÖú¼Ç´úÂ룬¡¡
Èç±í7¡£6Ëùʾ£¬¶ÔÓÚÕâЩROPÂ룬ÔÚ³ÌÐòÖпÉÒÔÖ±½ÓʹÓÃÖú¼ÇÂ룬¶ÔÓÚ±íÖÐûÓÐÁгöµÄROPÂ룬¿ÉÒÔÖ±½ÓʹÓÃ16½øÖÆÊýÖµ¡£
±í7¡£6¡¡¡¡¿é´«Ëͺ¯ÊýÖÐʹÓõÄROPÂë
ROPÂë
¡¡16½øÖÆÊýÖµ
¡¡ÐÂÏñËصãËã·¨
¡¡
BLACKNESS
¡¡00000042h
¡¡È«²¿Îª0
¡¡
DSTINVERT
¡¡00550009h
¡¡not¡¡Ä¿±êÏñËØ
¡¡
MERGECOPY
¡¡00c000cah
¡¡»Ë¢¡¡and¡¡Ô´ÏñËØ
¡¡
MERGEPAINT
¡¡00bb0226h
¡¡£¨not¡¡Ô´ÏñËØ£©or¡¡Ä¿±êÏñËØ
¡¡
NOTSRCCOPY
¡¡00330008h
¡¡not¡¡Ô´ÏñËØ
¡¡
NOTSRCERASE
¡¡001100a6h
¡¡not£¨Ô´ÏñËØ¡¡or¡¡Ä¿±êÏñËØ£©
¡¡
PATCOPY
¡¡00f00021h
¡¡»Ë¢
¡¡
PATINVERT
¡¡005a0049h
¡¡»Ë¢¡¡xor¡¡Ä¿±êÏñËØ
¡¡
PATPAINT
¡¡00fb0a09h
¡¡»Ë¢¡¡or¡¡£¨not¡¡Ô´ÏñËØ£©or¡¡Ä¿±êÏñËØ
¡¡
SRCAND
¡¡008800c6h
¡¡Ô´ÏñËØ¡¡and¡¡Ä¿±êÏñËØ
¡¡
SRCCOPY
¡¡00cc0020h
¡¡Ô´ÏñËØ
¡¡
SRCERASE
¡¡00440328h
¡¡Ô´ÏñËØ¡¡and£¨not¡¡Ä¿±êÏñËØ£©
¡¡
SRCINVERT
¡¡00660046h
¡¡Ô´ÏñËØ¡¡xor¡¡Ä¿±êÏñËØ
¡¡
SRCPAINT
¡¡00ee0086h
¡¡Ô´ÏñËØ¡¡or¡¡Ä¿±êÏñËØ
¡¡
WHITENESS
¡¡00ff0062h
¡¡È«²¿Îª1
¡¡
7¡£4¡£2¡¡¡¡¿é´«Ëͺ¯Êý
1¡£¡¡PatBltº¯Êý
PatBltº¯ÊýÍê³ÉµÄÊÇ¡°Í¼°¸¿é´«ËÍ¡±µÄ¹¦ÄÜ£¬¼´¡°Pattern¡¡Block¡¡Transfer¡±¡£Ê¹Óõķ½·¨ÊÇ£º
invoke¡¡¡¡PatBlt£¬hDC£¬xDest£¬yDest£¬dwWidth£¬dwHeight£¬dwROP
Õâ¸öº¯Êý½«µ±Ç°»Ë¢µÄͼ°¸¿½±´µ½hDCÖÐÒÔ£¨xDest£¬yDest£©Îª×óÉϽÇ×ø±ê£¬dwWidthΪ¿í¶È£¬dwHeigthΪ¸ß¶ÈµÄÇøÓòÖУ¬´«Ë͵ķ½Ê½ÓÉdwROPÖеÄROPÂëÖ¸¶¨¡£PatBltº¯ÊýµÄ¹¦Äܺ;ØÐÎÌî³äº¯ÊýFillRectÓëInvertRectµÈÊǺÜÏñµÄ£¬µ«Ëü°üº¬ÁËËüÃǵÄÈ«²¿¹¦ÄÜ£¬ÈçROPÂëÖ¸¶¨DSTINVERT£¬ÄÇôPatBltµÄ¹¦ÄܾÍÏ൱ÓÚInvertRectº¯Êý£»ROPÂëÖ¸¶¨ÎªPATCOPYµÄʱºò£¬PatBltµÄ¹¦ÄÜÏ൱ÓÚFillRectº¯Êý¡£
ÔÚBmpClock¡£asmµÄ_CreateBackGround×Ó³ÌÐòÖУ¬µ±½¨Á¢±³¾°Í¼Æ¬µÄʱºò£¬¾ÍÊÇÓÃPATCOPY·½Ê½µÄPatBltº¯ÊýÓÃ×ÊÔ´Öеı³¾°Í¼Æ¬Ìî³äÕû¸öʱÖÓ±³¾°µÄ¡£
ÔÚËùÓеÄROPÂëÖУ¬¿ÉÒÔÓÃÔÚPatBltº¯ÊýÖеÄÖ»ÓÐÒ»²¿·Ö£¬ËùÓÐËã·¨Öаüº¬Ô´ÏñËصÄROPÂëÔÚPatBltº¯ÊýÖж¼²»ÄÜʹÓã¬ÒòΪPatBltº¯ÊýÖ»Éæ¼°µ±Ç°»Ë¢ºÍÄ¿±êÏñËØ£¬²¢Ã»ÓÐÒ»¸ö¡°Ô´ÏñËØ¡±£¬ËùÒÔ¶ÔÓÚÕâ¸öº¯ÊýÀ´Ëµ£¬±í7¡£6ÖеÄROPÂëÖÐÖ»ÓÐBLACKNESS£¬WHITENESS£¬DSTINVERT£¬PATINVERTºÍPATCOPYÊÇ¿ÉÓõġ£
2¡£¡¡BitBltº¯Êý
PatBltº¯ÊýÄÜÍê³ÉµÄ¹¤×÷BitBltº¯Êý¶¼ÄÜÍê³É£¬BitBltÊÇ¡°Êý¾Ý¿é´«ËÍ¡±µÄÒâ˼£¬¼´¡°Bit¡¡Block¡¡Transfer¡±¡£BitBltº¯ÊýµÄÓ÷¨ÊÇ£º
invoke¡¡¡¡¡¡¡¡BitBlt£¬hDcDest£¬xDest£¬yDest£¬dwWidth£¬dwHeigt£¬
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡hDcSrc£¬xSrc£¬ySrc£¬dwROP
Õâ¸öº¯Êý½«Ô´hDcSrcÖÐÒÔ£¨xSrc£¬ySrc£©Îª×óÉϽǵÄÒ»¸ö¾ØÐÎÇøÓò´«Ë͵½Ä¿±êhDcDestÖÐÒÔ£¨xDest£¬yDest£©Îª×óÉϽǵĵط½È¥£¬¾ØÐεĿí¶ÈΪdwWidth£¬¸ß¶ÈΪdwHeight£¬µ±È»Ä¿±êDCÖеÄ×îºó½á¹ûÊÇÓÉdwROPÖеÄROPÂ붨ÒåµÄÔ´¡¢Ä¿±êºÍ»Ë¢ÈýÕßÊý¾ÝµÄ×éºÏ¡£
Áé»îʹÓÃROPÂë¿ÉÒÔʵÏֺܶàµÄ¹¦ÄÜ£¬±ÈÈçÔÚÒ»¸ö±³¾°Í¼Æ¬Éϵþ¼ÓÒ»¸ö·Ç¾ØÐεÄλͼ£¬ÓÎÏ·³ÌÐòÖÐÈËÎïÔÚ±³¾°ÉÏÃæµÄÒƶ¯¾ÍÊÇÕâÑùµÄÒ»¸öÀý×Ó¡£BmpClock³ÌÐòÖÐҲʵÏÖÁËÀàËƵŦÄÜ¡ª¡ª¶ÁÕß¿ÉÒÔ×¢Òâµ½£¬³ÌÐò¿ÉÒÔ×ÔÓɸü»»±³¾°ºÍ±ß¿ò£¬µ«ÊDZ߿òÊÇÖпյģ¬ËüÏ൱ÓÚÒÔÒ»¸ö²»¹æÔòµÄͼÐεþ¼ÓÔÚ±³¾°ÉÏÃ棬ͼ7¡£10ʾ·¶ÁËʵÏֵķ½·¨¡£
·ÖÎöÒ»ÏÂBmpClock¡£asmÖеÄ_CreateBackGround×Ó³ÌÐò¾Í¿ÉÒÔ·¢ÏÖ£¬³ÌÐòÓõ½ÁË×ÊÔ´ÖеÄBack1¡£bmp£¬Mask1¡£bmpºÍCircle1¡£bmpÕâ3¸öͼƬ£¨ÔÚͼ7¡£10ÖÐÒÔA£¬B£¬CÀ´±íʾ£©£¬×Ó³ÌÐò½«3¸öͼƬװÈëÄÚ´æºó£¬´´½¨ÁË3¸öDCÀ´´æÈ¡ËüÃÇ£¬¶ÔÓ¦µÄDC¾ä±ú·Ö±ð·ÅÔÚ@hBmpBack£¬@hBmpMaskºÍ@hBmpCircleÖС£
ºÃÁË£¡ÏÖÔÚµÄÈÎÎñÊǽ«Í¼Æ¬CÖÐÐèÒªµÄ²¿·Ö£¨·ÇºÚÉ«²¿·Ö£©Í¸Ã÷µþ·ÅÔÚÒÔͼƬAÐγɵı³¾°ÉÏ£¬µÃµ½Ê±ÖÓ±³¾°Í¼Æ¬D¡£¼ÌÐø×ö×¼±¸¹¤×÷£ºÎªÍ¼Æ¬D½¨Á¢Ò»¸öδ³õʼ»¯Î»Í¼ºÍÄÚ´æDC£¬DC¾ä±ú´æ·ÅÔÚhDcBackÖС£
ͼ7¡£10¡¡¡¡ÔÚ±³¾°Éϵþ¼Ó²»¹æÔòͼÐεķ½·¨
Èçͼ7¡£10ÖеIJ½Öè1Ëùʾ£¬Ê×ÏÈ£¬³ÌÐòÓÃCreatePatternBrush½¨Á¢ÒÔͼƬAΪͼ°¸µÄ»Ë¢£¬ÓÃPatBltº¯ÊýÒÔÕâ¸ö»Ë¢Ìî³äÕû¸öͼƬ£º
¡¡¡¡¡¡¡¡invoke¡¡¡¡CreatePatternBrush£»@hBmpBack
¡¡¡¡¡¡¡¡push¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡invoke¡¡¡¡SelectObject£»hDcBack£»eax
¡¡¡¡¡¡¡¡invoke¡¡¡¡PatBlt£»hDcBack£»0£»0£»CLOCK_SIZE£»CLOCK_SIZE£»PATCOPY
¡¡¡¡¡¡¡¡pop¡¡¡¡¡¡¡¡¡¡eax
¡¡¡¡¡¡¡¡invoke¡¡¡¡DeleteObject£»eax
ÏÖÔÚÈç¹ûÖ±½Ó½«Í¼Æ¬C¿½±´ÉÏÈ¥£¬ËäÈ»ÐèÒªµÄ²¿·ÖÊÇ¿½±´ÉÏÈ¥ÁË£¬µ«ÊÇͼƬCÖеĺÚÉ«²¿·ÖÒ²»á¸²¸ÇÈ«²¿µÄ±³¾°ÏñËØ£¬ÎªÁËÈúÚÉ«²¿·ÖµÄ±³¾°ÏñËر£³Ö²»±ä£¬Ó¦¸ÃʹÓÃor²Ù×÷£¬ÒòΪºÚÉ«µÄÑÕɫֵΪ0£¬ÈκÎÊý¾ÝºÍ0½øÐÐor²Ù×÷½«±£³Ö²»±ä£¬²é¿´ROPÂë¿ÉÒÔ·¢ÏÖ£¬SRCPAINTʹÓõÄÊÇor²Ù×÷£¬ËùÒÔ¿ÉÒÔʹÓÃSRCPAINT²Ù×÷Âë½øÐÐBitBlt²Ù×÷¡£
µ«»¹ÓиöÎÊÌ⣺ͼƬCÖеķǺÚÉ«²¿·ÖÈç¹ûÒ²ÓÃor²Ù×÷»æ»µ½±³¾°ÉÏ£¬ÄÇô¾¹ýºÍ±³¾°ÏñËصÄor²Ù×÷ºó¾Í²»ÊÇÔÀ´µÄÑÕÉ«ÖµÁË£¬ÎªÁËÈÃÕⲿ·Ö²»±ä£¬½â¾öµÄ°ì·¨ÊÇÔ¤ÏȽ«±³¾°ÖжÔÓ¦µÄ²¿·ÖÏÈ»æÖƳɺÚÉ«£¬ÕâÑù¶ÔӦͼƬCÖеĺÚÉ«²¿·Ö½«±£³Ö±³¾°ÑÕÉ«£¬¶ø·ÇºÚÉ«²¿·Ö½«Ê¹ÓÃͼƬCÖеÄÏñËØ¡£ÕÚÑÚͼƬB¾ÍÊÇÕâÑùÓõģ¬ËüÊÇÒ»¸öºÚ°×Á½É«µÄͼƬ£¬ºÚÉ«²¿·ÖÊÇͼƬCÖÐÒªÔÚ±³¾°ÉÏ¡°ïοա±µÄ²¿·Ö£¬ÔÚ²½Öè2ÖУ¬³ÌÐòʹÓÃÏÂÁÐÓï¾ä½«Í¼Æ¬BÓÃSRCAND²Ù×÷Âë»æÖƵ½±³¾°ÉÏ£º
invoke¡¡¡¡BitBlt£»hDcBack£»0£»0£»CLOCK_SIZE£»CLOCK_SIZE£»@hDcMask£»0£»0£»SRCAND
²é±í7¡£6¿ÉÒÔ·¢ÏÖ£¬SRCAND½øÐÐÔ´ÏñËغÍÄ¿±êÏñËصÄand²Ù×÷£¬ÈκÎÊýºÍ1½øÐÐand½«±£³Ö²»±ä£¬ºÍ0½øÐÐand½«±ä³É0£¬ÕâÑù±³¾°ÖжÔӦͼƬBÖеİ×É«²¿·Ö½«±£³Ö²»±ä£¬¶ÔӦͼƬBÖеĺÚÉ«²¿·Ö½«±»¡°ïοա±¡£
½ÓÏÂÀ´¾ÍÊÇ×îºóµÄ²½Öè3ÁË£º
invoke¡¡¡¡BitBlt£»hDcBack£»0£»0£»CLOCK_SIZE£»CLOCK_SIZE£»@hDcCircle£»0£»0£»SRCPAINT
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ7Õ¡¡Í¼ÐβÙ×÷
7¡£4¡¡¿é´«ËͲÙ×÷£¨2£©
¡¡¡¡¡¡¡¡
³ÌÐòÓÃSRCPAINT²Ù×÷Â뽫ͼƬCºÍÒѾïοյı³¾°½øÐÐor²Ù×÷£¬µÃµ½µÄ½á¹û¾ÍÊǽ«ÓÉÕÚÑÚͼƬBÖ¸¶¨µÄͼƬCÖеIJ»¹æÔòÇøÓò»µ½Á˱³¾°ÉÏÃæ¡£
ΪÁ˼ò»¯Æð¼û£¬BmpClock³ÌÐòÖеÄÕÚÑÚͼƬÊÇÔ¤ÏÈÉè¼ÆºÃµÄ£¬Êµ¼ÊʹÓÃÖÐÒ²¿ÉÒÔͨ¹ýɨÃèԴλͼÖеÄÏñËØ룬ÕÒ³ö±³¾°ÑÕÉ«²¢¶¯Ì¬Éú³ÉÒ»¸öÕÚÑÚλͼ£¬ËäÈ»ÕâÑù¿ÉÄܶÔËÙ¶ÈÓÐһЩӰÏ죬µ«Áé»îÐÔÒª¸ßµÃ¶à¡£
ÔÚÓÎÏ·³ÌÐòÖУ¬½«Ò»¸ö²»¹æÔòµÄͼÐÎÈçÈË»òÎïÌåµÈͼÐεþ¼Óµ½±³¾°ÉÏÃæʹÓõľÍÊÇÕâÑùµÄ¼¼Êõ¡£
3¡£¡¡MaskBltº¯Êý
MaskBltº¯ÊýÔÊÐíÔÚÒ»¸öͼƬÖжԲ»Í¬µÄ²¿·ÖÒÔ²»Í¬µÄROPÂë½øÐвÙ×÷£¬ËüµÄÓï·¨ÊÇ£º
¡¡¡¡¡¡¡¡invoke¡¡¡¡MaskBlt£¬hDcDest£¬xDest£¬yDest£¬dwWidth£¬dwHeigt£¬
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡hDcSrc£¬xSrc£¬ySrc£¬hMaskBmp£¬xMask£¬yMask£¬dwROP
ËüºÍBitBltµÄ²»Í¬Ö®´¦ÊǶàÁËÒ»¸öÕÚÑÚͼƬ¾ä±úhMaskBmp£¨×¢Ò⣺ÊÇλͼ¾ä±ú¶ø²»ÊÇDC¾ä±ú£©ÒÔ¼°hMaskBmpµÄ¿ªÊ¼×ø±ê¡£
MaskBltº¯ÊýͬÑùÊǽ«hDcSrcÒÔ£¨xSrc£¬ySrc£©Îª×óÉϽǵľØÐÎÇøÓòÒÔÖ¸¶¨ROPÂë²Ù×÷·½Ê½´«Ë͵½hDcDestÖÐÒÔ£¨xDest£¬yDest£©Îª×óÉϽǵľØÐÎÇøÓòÖУ¬¾ØÐεĿí¶ÈºÍ¸ß¶ÈÓÉdwWidthºÍdwHeightÖ¸¶¨£¬º¯ÊýµÄÌØÊâÖ®´¦ÊÇ¿ÉÒÔÖ¸¶¨Á½¸öROPÂ룬´«ËÍʱʹÓÃÄĸöROPÂëÒª²Î¿¼ÕÚÑÚͼƬ£¬²Î¿¼µÄλÖôÓÕÚÑÚͼƬµÄ£¨xMask£¬yMask£©×ø±ê¿ªÊ¼¡£
hMaskBmpÖ¸¶¨ÁËÒ»·ùºÚ°×λͼ£¬Èç¹ûλͼÖжÔÓ¦Î