Эффект разрушения окон ОК, ОТМЕНА и ПОМОЩЬ на экране.
Я хотел использовать приложение на основе 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 файлом.
- Вам следует позвонить
ShowWindow (SW_HIDE);
вместоDestroyWindow();
- Также нет необходимости кастовать
CWnd*
вернулсяGetDlgItem()
вCButton*
, - Пожалуйста, также закомментируйте ваш
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.