15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


CPropertyPage::OnSetActive() changed between 4.1 & 4.2

Mario Contestabile -- Mario_Contestabile.UOS__MTL@UOSMTL2.universal.com
Tuesday, November 26, 1996

Environment: MSVC 4.2b, Windows NT 3.51 Service Pack 5

\msdev\mfc\src\dlgprop.cpp
CPropertyPage::OnSetActive() has changed between MSVC 4.1 & 4.2.

In MFC 4.1, the function looked like this:
BOOL CPropertyPage::OnSetActive()
{
 ASSERT_VALID(this);
 UpdateData(FALSE);
 return TRUE;
}

In MFC 4.2, it was changed to the following:

BOOL CPropertyPage::OnSetActive()
{
 ASSERT_VALID(this);
 if (m_bFirstSetActive)
  m_bFirstSetActive = FALSE;
 else
  UpdateData(FALSE);
 return TRUE;
}

Why was this change made?
Why wasn't the documentation updated to reflect this? 
This will cause the obvious problem of displaying an empty page in instances
where users of CPropertyPage expected the default implementation to call 
UpdateData(FALSE).
After rebuilding my app under 4.2b I had the unpleaseant surprise of seeing a 
few empty
propertypages...

mcontest@universal.com




David Lowndes -- David.Lowndes@bj.co.uk
Thursday, November 28, 1996

> CPropertyPage::OnSetActive() has changed between MSVC 4.1 & 4.2.
Why was this change made?
<

I can't say why it was changed, but it resulted in your getting the 
DDX twice on initialisation.

> Why wasn't the documentation updated to reflect this?
<
Why isn't so much of the new documentation considerably better than it 
currently is! I agree though, there should have been some note 
somewhere (there probably is if only you can find it) to notify this 
change.

I had one problem arise from this change too, but luckily I realised 
it was because I had (wrongly) relied on this undocumented behaviour. 
A simple rearrangement of my code fixed the problem.




Alexander Grigoriev -- alegr@aha.ru
Saturday, November 30, 1996

There is an obvious reason: UpdateData is already called in OnInitDialog().

I myself have overridden OnSetActive to remove UpdataData call,
thus allowing to preserve the data entered, if an user switches property
pages or wizard pages. 


----------
> From: Mario Contestabile 
> To: mfc-l 
> Subject: CPropertyPage::OnSetActive() changed between 4.1 & 4.2
> Date: 27 ОПСВТС 1996 З. 0:46
> 
> Environment: MSVC 4.2b, Windows NT 3.51 Service Pack 5
> 
> \msdev\mfc\src\dlgprop.cpp
> CPropertyPage::OnSetActive() has changed between MSVC 4.1 & 4.2.
> 
> In MFC 4.1, the function looked like this:
> BOOL CPropertyPage::OnSetActive()
> {
>  ASSERT_VALID(this);
>  UpdateData(FALSE);
>  return TRUE;
> }
> 
> In MFC 4.2, it was changed to the following:
> 
> BOOL CPropertyPage::OnSetActive()
> {
>  ASSERT_VALID(this);
>  if (m_bFirstSetActive)
>   m_bFirstSetActive = FALSE;
>  else
>   UpdateData(FALSE);
>  return TRUE;
> }
> 
> Why was this change made?
> Why wasn't the documentation updated to reflect this? 
> This will cause the obvious problem of displaying an empty page in
instances
> where users of CPropertyPage expected the default implementation to call 
> UpdateData(FALSE).
> After rebuilding my app under 4.2b I had the unpleaseant surprise of
seeing a 
> few empty
> propertypages...
> 
> mcontest@universal.com
> 




| Вернуться в корень Архива |