Microsoft KB Archive/148388

= HOWTO: How to Change Default Control Focus on CPropertyPage =

Article ID: 148388

Article Last Modified on 11/21/2006

-

APPLIES TO


 * Microsoft Foundation Class Library 4.2, when used with:
 * Microsoft Visual C++ 4.0 Standard Edition

-



This article was previously published under Q148388



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 BEGIN_MESSAGE_MAP(CMyPage, CPropertyPage) ON_MESSAGE(WM_SETPAGEFOCUS, OnSetPageFocus) END_MESSAGE_MAP
 * 1) define WM_SETPAGEFOCUS WM_APP+2

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; }

Additional query words: kbinf 4.00 CPropertySheet

Keywords: kbcode kbctrl kbhowto kbnoupdate kbuidesign KB148388

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.