Article ID: 148388 - Last Review: November 21, 2006 - Revision: 2.1

HOWTO: How to Change Default Control Focus on CPropertyPage

This article was previously published under Q148388

On This Page

Expand all | Collapse all

SUMMARY

When a CPropertyPage is activated, the first control in the page's tab order will get the focus by default. To change the default to a different control, derive a class from CPropertyPage, override OnSetActive(), and post a user message to a member function that will actually set the focus to the desired control.

MORE INFORMATION

CPropertySheet's member function OnSetActive() is called when a PSN_SETACTIVE message is sent to that page. Attempting to set the focus to a control while in this handler won't produce the expected results because after this notification is handled, the tab control will get the focus.

Therefore, you need to post a message to the property sheet's message queue with a user message in order to set the focus to the desired control once the page is active.

Sample Code

// this is the user-defined message
#define WM_SETPAGEFOCUS WM_APP+2
BEGIN_MESSAGE_MAP(CMyPage, CPropertyPage)
  ON_MESSAGE(WM_SETPAGEFOCUS, OnSetPageFocus)
END_MESSAGE_MAP()

BOOL CMyPage::OnSetActive()
{
  BOOL fRet = CPropertyPage::OnSetActive();

  PostMessage(WM_SETPAGEFOCUS, 0, 0L);

  return fRet;
}

LONG CMyPage::OnSetPageFocus(UINT wParam, LONG lParam)
{
  // IDC_BUTTON2 is the button on this property page
  // that you want to give the default focus.

  CButton* pBtn = (CButton*)GetDlgItem(IDC_BUTTON2);
  ASSERT(pBtn);
  pBtn->SetFocus();
  return 0;
}
				

APPLIES TO
  • Microsoft Foundation Class Library 4.2, when used with:
    • Microsoft Visual C++ 4.0 Standard Edition
Keywords: 
kbcode kbctrl kbhowto kbnoupdate kbuidesign KB148388
Retired KB ArticleRetired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
 

Article Translations