小弟不明白在if条件中,为什么要用 & 而不用 ==

以下是一个记事本程序中的一段代码:
......
......
LPFINDREPLACE    pfr ;
static UINT      messageFindReplace ;
......
messageFindReplace = RegisterWindowMessage (FINDMSGSTRING) ;
......
......
if (message == messageFindReplace)
          {
               pfr = (LPFINDREPLACE) lParam ;
               
               if (pfr->Flags & FR_DIALOGTERM) //判断查找或替换对话框正在关闭
                    hDlgModeless = NULL ;//将非模态对话框句柄设成NULL
               
               if (pfr->Flags & FR_FINDNEXT)
               //判断“查找”对话框中选中的项是否“查找”/“查找下一个”
                    if (!PopFindFindText (hwndEdit, &iOffset, pfr))//进行查找
                         OkMessage (hwnd, TEXT ("Text not found!"),
                                          TEXT ("\0")) ;
                    
               if (pfr->Flags & FR_REPLACE || pfr->Flags & FR_REPLACEALL)
               //判断“替换”对话框中选中的项是否“替换”/“替换全部”
                    if (!PopFindReplaceText (hwndEdit, &iOffset, pfr))//进行替换
                         OkMessage (hwnd, TEXT ("Text not found!"),
                                          TEXT ("\0")) ;
                         
               if (pfr->Flags & FR_REPLACEALL)
               //判断“替换”对话框中选中的项是否“替换全部”
                    while (PopFindReplaceText (hwndEdit, &iOffset, pfr)) ;//进行替换
                              
               return 0 ;
          }
小弟不明白if条件中,进行判断的为何用& , 而不用== ?
而如果我把全部的&改成==,编译出来的程序根本不能进行查找和替换。
请高人指教,小弟洗耳恭听。