Эффект разрушения окон ОК, ОТМЕНА и ПОМОЩЬ на экране.

Я хотел использовать приложение на основе 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 ();"
Кто-нибудь может пролить свет на то, почему это происходит?

2 ответа

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

  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.

Другие вопросы по тегам