2010-12-14 6 views
0

この警告を表示しています "警告:C4800: 'int':値をbool 'true'コードの次の行に「false」(パフォーマンス警告)が表示されます。警告C4800: 'int':値をboolに 'true'または 'false'(パフォーマンスの警告)をMFC(VC++)で入力する

if (g_objConfigurationDetails.bAutoScan != m_objScanNASBtn.GetCheck()) 
     { 
      g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck(); 
} 

両方の行で同じ警告が表示されます。 bAutoScan = BOOL m_objScanNASBtn = CButton

答えて

0

理由は、MFCのGetCheckはブール値を返さないことである :

BS_AUTOCHECKBOX、BS_AUTORADIOBUTTON、BS_AUTO3STATE、BS_CHECKBOXで作成したボタンコントロールからの戻り値、 BS_RADIOBUTTON、またはBS_3STATEスタイルは、次のいずれかの値です。
- BST_UNCHECKED - ボタンの状態がチェックされていません。
- BST_CHECKED - ボタンの状態がチェックされています。
- BST_INDETERMINATE - ボタンの状態は不確定です(ボタンにBS_3STATEまたはBS_AUTO3STATEスタイルがある場合のみ適用されます)。

だから、あなたはおそらく次

if (g_objConfigurationDetails.bAutoScan 
     != (m_objScanNASBtn.GetCheck() == BST_CHECKED)) 

または

bool bNASBtnChecked = (m_objScanNASBtn.GetCheck() == BST_CHECKED); 
if (g_objConfigurationDetails.bAutoScan != bNASBtnChecked) 
{ 
    g_objConfigurationDetails.bAutoScan = bNASBtnChecked; 
} 
0

をしたい:

g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck(); 

g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck() == BST_CHECKED; 
する必要があります

GetCheck()の問題はboolを返さないので、少なくとも!= 0の形式で比較を書かなければなりません。

0

GetCheckは整数を返し、それをブール値と比較しています。ブール値に応じてGetCheckBST_UNCHECKEDまたはBST_CHECKEDに比較してみるか、2つの値が真と偽の数値に一致するためブール値にキャストしてください。