MessageBox实现机制
这是一个简单的windos程序,MessageBox在进行 MB_YESNO|MB_ICONQUESTION 运算后怎么判断含有YESNO按钮和ICONQUESTION图标呢?
按钮的宏定义:
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
图标的宏定义:
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
==================================================
#define MB_YESNO 0x00000004L转换为2进制就是:0000 0100
#define MB_ICONQUESTION 0x00000020L准换为2进制就是:0010 0000
进行或运算得到 0010 0100,高字节保存了图标信息,低字节保存了按钮信息
======================================================
MessageBox怎么判断 0010 0100里包含了什么按钮和什么图标呢?
总结:
对一个2进制想然它某几位为0可以让这几位和0进行与(&)运算,某几位保持不变可以和1进行与运算
如:1010 0010想让他高字节为0,低字节保持不变可以这样: 1010 0010 & 0000 1111 = 0000 0010