Можем ли мы сопоставить флажок с логической переменной в MFC вместо BOOL?
Возьмите это сопоставление переменных в
CDialog
:
DDX_Check(pDX, IDC_CHECK_PREVIEW_CURRENT_WEEK, m_bPreviewCurrentWeek);
По дизайну в IDE он должен отображаться в
BOOL
переменная вместо переменной.
Я знаю, что при нормальных обстоятельствах вы можете просто использовать переменную везде, где
TRUE
или же
FALSE
используется. Но когда я пытаюсь изменить свою переменную-член на a, она не компилируется на
DDX_Check
рутина.
Можем ли мы использовать
bool
с флажком?
1 ответ
Комментарий @Jabberwocky напомнил мне, что я уже реализовал некоторые пользовательские процедуры DDX:
Поэтому я углубился в исходный код MFC и изменил копию в своем собственном файле cpp:
void AFXAPI DDX_CheckBool(CDataExchange* pDX, int nIDC, bool& value)
{
pDX->PrepareCtrl(nIDC);
HWND hWndCtrl;
pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (pDX->m_bSaveAndValidate)
{
value = static_cast<bool>(::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L));
//ASSERT(value >= 0 && value <= 2);
}
else
{
//if (value < 0 || value > 2)
//{
// TRACE(traceAppMsg, 0, "Warning: dialog data checkbox value (%d) out of range.\n",
// value);
// value = 0; // default to off
//}
::SendMessage(hWndCtrl, BM_SETCHECK, static_cast<WPARAM>(value), 0L);
}
}
Я закомментировал проверки проверки, так какbool
в любом случае имеет только одно из двух значений. Кричи, если считаешь, что это было ошибкой.
Итак, теперь я могу сделать это:
DDX_CheckBool(pDX, IDC_CHECK_SELECT_NAMES, m_bSelectStartingNames);
Это работает нормально.