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

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


How to Add 'No Selection' property page on a modeless proper

Roger Onslow -- Roger_Onslow@compsys.com.au
Wednesday, June 12, 1996

Environment: MFC 4.0  Win32 (NT/95)

MSVC/Developer Studio uses property sheets (or inspectors) to
display properties of selected objects.  When no object is displayed
the tabs disappear and a "No Selection" message appears.

We mortals can also create modeless property sheets, but how
does one display the "No Selection" message when all the tabs
are removed?

Here's how...

(1) Create a modeless property sheet (using component gallery)

(2) add a CStatic member to the sheet class
 CStatic m_static;

(3) Write a member function to show or hide the m_static as appropriate

void CMyPropertySheet::ShowMessageIfNoPages() {
 if (m_static.GetSafeHwnd()) {
  m_static.ShowWindow(0==m_pages.GetSize());
  // NB: cannot use GetPageCount because
  // tab control may not exist yet
 }
}

(4) Use class wizard to handle WM_CREATE (OnCreate)
 which creates the "No Selection" m_static (in centre)

int CMyPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct) {
 if (CPropertySheet::OnCreate(lpCreateStruct) == -1) return -1;
 m_static.Create("No Selection",WS_CHILD|SS_CENTER,CRect(0,0,120,20),this); 
 m_static.CenterWindow();
 ShowMessageIfNoPages();
 return 0;
}

(5) Provide you own AddPage and RemovePage functions which call
 the base class and update the m_static appropriately
 (Don't forget to declare them in the .h)

void CMyPropertySheet::AddPage(CPropertyPage* pPage) {
 ShowMessageIfNoPages();
 CPropertySheet::AddPage(pPage);
}
void CMyPropertySheet::RemovePage(CPropertyPage* pPage) {
 CPropertySheet::RemovePage(pPage);
 ShowMessageIfNoPages();
}
void CMyPropertySheet::RemovePage(int nPage) {
 CPropertySheet::RemovePage(nPage);
 ShowMessageIfNoPages();
}


Now, if you remove all the pages from a dialog, the message
"No Selection" appears -- just like MSVC/Developer Studio !!
Sneaky, hey???

Tada.wav!!

Roger Onslow
Senior Software Engineer
Computer Systems Australia
Ph: +61 49 577155
Fax: +61 49 675554
eMail: RogerO@compsys.com.au





Roger Onslow -- Roger_Onslow@compsys.com.au
Wednesday, June 12, 1996

Environment: MFC 4.0  Win32 (NT/95)

MSVC/Developer Studio uses property sheets (or inspectors) to
display properties of selected objects.  When no object is displayed
the tabs disappear and a "No Selection" message appears.

We mortals can also create modeless property sheets, but how
does one display the "No Selection" message when all the tabs
are removed?

Here's how...

(1) Create a modeless property sheet (using component gallery)

(2) add a CStatic member to the sheet class
 CStatic m_static;

(3) Write a member function to show or hide the m_static as appropriate

void CMyPropertySheet::ShowMessageIfNoPages() {
 if (m_static.GetSafeHwnd()) {
  m_static.ShowWindow(0==m_pages.GetSize());
  // NB: cannot use GetPageCount because
  // tab control may not exist yet
 }
}

(4) Use class wizard to handle WM_CREATE (OnCreate)
 which creates the "No Selection" m_static (in centre)

int CMyPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct) {
 if (CPropertySheet::OnCreate(lpCreateStruct) == -1) return -1;
 m_static.Create("No Selection",WS_CHILD|SS_CENTER,CRect(0,0,120,20),this); 
 m_static.CenterWindow();
 ShowMessageIfNoPages();
 return 0;
}

(5) Provide you own AddPage and RemovePage functions which call
 the base class and update the m_static appropriately
 (Don't forget to declare them in the .h)

void CMyPropertySheet::AddPage(CPropertyPage* pPage) {
 ShowMessageIfNoPages();
 CPropertySheet::AddPage(pPage);
}
void CMyPropertySheet::RemovePage(CPropertyPage* pPage) {
 CPropertySheet::RemovePage(pPage);
 ShowMessageIfNoPages();
}
void CMyPropertySheet::RemovePage(int nPage) {
 CPropertySheet::RemovePage(nPage);
 ShowMessageIfNoPages();
}


Now, if you remove all the pages from a dialog, the message
"No Selection" appears -- just like MSVC/Developer Studio !!
Sneaky, hey???

Tada.wav!!

Roger Onslow
Senior Software Engineer
Computer Systems Australia
Ph: +61 49 577155
Fax: +61 49 675554
eMail: RogerO@compsys.com.au






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