Эффект разрушения окон ОК, ОТМЕНА и ПОМОЩЬ на листе бумаги

Я хотел использовать приложение на основе CPropertySheet для проекта и не хотел использовать кнопки по умолчанию OK, Отмена, Справка и Применить, которые поставляются с классом CPropertySheet. Поэтому я уничтожил эти окна на OnInitDialog. Вот код для справки:

BOOLCProductUI::OnInitDialog()
{
CPropertySheet::OnInitDialog();

CRect rect;
CButton *pTempBtn;
CButton SaveChanges;

pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(IDHELP));
if (NULL != pTempBtn)
{
pTempBtn->GetWindowRect(&rect);
pTempBtn->DestroyWindow();
}

pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(IDOK));
if (NULL != pTempBtn)
{
pTempBtn->DestroyWindow();
}

pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(IDCANCEL));
if (NULL != pTempBtn)
{
pTempBtn->DestroyWindow();
}

pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(ID_APPLY_NOW));
if (NULL != pTempBtn)
{
ScreenToClient(&rect);
pTempBtn->MoveWindow(rect);
pTempBtn->SetWindowText(_T("Save Changes"));
}

UpdateData(FALSE);
return TRUE;
}

CProductUI является классом CPropertySheet.
Однако, когда я компилирую программу с использованием VC ++ 2008 в режиме отладки, я получаю сообщение об ошибке Debug Assertion Failed в строке
«CPropertySheet :: OnInitDialog ();«
Кто-нибудь может пролить свет на то, почему это происходит?

1

Решение

в Как скрыть кнопку «Применить» в CPropertySheet. Уничтожение окна не является правильным решением, чтобы скрыть кнопки по умолчанию на панели свойств. Я бы предложил вам использовать «Витрина()». Но, как вы уже упоминали, ваш showwindow () также создает проблему, которая невозможна, если ваши вызовы верны. Пусть это будет, если ваш ShowWindow () не работает в функции «OnInitDialog ()», тогда лучше переместить эту функцию в «OnCreate ()». А также, если он не работает, пожалуйста, поделитесь всем своим .H и .CPP файлом.

-1

Другие решения

  1. Вам следует позвонить ShowWindow (SW_HIDE); вместо DestroyWindow();
  2. Также нет необходимости кастовать CWnd* вернулся GetDlgItem() в CButton*,
  3. Пожалуйста, также закомментируйте ваш CButton SaveChanges; декларация. Вы
    мне это не нужно

Вы также можете использовать встроенные флаги для этого:

CMyPropertyPage myPage;
myPage.m_psp.dwFlags &= ~PSP_HASHELP;
myPropertySheet.AddPage(&myPage);

myPropertySheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
myPropertySheet.m_psh.dwFlags &= ~PSH_HASHELP;

ВАЖНЫЙ: В общем, пожалуйста, запустите ваше приложение в режиме отладки, чтобы увидеть, где оно ASSERT.

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector