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

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


SetFocus on CRichEditCtrl

Wen Lin -- wen.lin@autodesk.com
Monday, January 27, 1997

     Environment: NT 4.0, VC++ 4.2b


     I have created a rich text editor control on one of the property
     pages.  The way I created it is by adding a static control on the
     dialog box resource, then obtain the rectangular area from it to
     created CRichEditCtrl as below,
     
     BOOL CMyTextEditPage::OnInitDialog() 
     {
        CPropertyPage::OnInitDialog();
        
         // make the rich edit control
         CWnd *pTempWnd = (CWnd*)GetDlgItem(IDC_TEXTEDITOR);
         ASSERT(pTempWnd);
         CRect rect;
         pTempWnd->GetWindowRect(&rect);
         pTempWnd->DestroyWindow();
         ScreenToClient(&rect);
         BOOL success =  myTextEdit.Create(WS_CHILD | WS_VISIBLE |
                                 WS_TABSTOP | WS_BORDER | WS_VSCROLL | 
                                 WS_HSCROLL | ES_AUTOHSCROLL |
                                 S_AUTOVSCROLL | ES_MULTILINE |    
                                 ES_WANTRETURN,
                                    rect, this, IDC_TEXTEDITOR);
         
          .......
     
          myTextEdit.SetFocus();
     
          return FALSE;  
     }
     
     I want cursor to stay on myTextEdit control whenever this property
     page appears on top, so that user can key in characters right away.
     But I can't seems be able to set focus to myTextEdit control by
     SetFocus(), not even in CMyTextEditPage::OnShowWindow.
     
     Can someone point me if I miss any steps?
     
     
     - Wen
      




Kit Kauffmann -- kitk@mudshark.sunquest.com
Tuesday, January 28, 1997

when i have problems like this, i'll post myself a (user-defined) message in 
oninitdialog, and then do those actions in response to getting that message

>     Environment: NT 4.0, VC++ 4.2b
>
>
>     I have created a rich text editor control on one of the property
>     pages.  The way I created it is by adding a static control on the
>     dialog box resource, then obtain the rectangular area from it to
>     created CRichEditCtrl as below,
>     
>     BOOL CMyTextEditPage::OnInitDialog() 
>     {
>        CPropertyPage::OnInitDialog();
>        
>         // make the rich edit control
>         CWnd *pTempWnd = (CWnd*)GetDlgItem(IDC_TEXTEDITOR);
>         ASSERT(pTempWnd);
>         CRect rect;
>         pTempWnd->GetWindowRect(&rect);
>         pTempWnd->DestroyWindow();
>         ScreenToClient(&rect);
>         BOOL success =  myTextEdit.Create(WS_CHILD | WS_VISIBLE |
>                                 WS_TABSTOP | WS_BORDER | WS_VSCROLL | 
>                                 WS_HSCROLL | ES_AUTOHSCROLL |
>                                 S_AUTOVSCROLL | ES_MULTILINE |    
>                                 ES_WANTRETURN,
>                                    rect, this, IDC_TEXTEDITOR);
>         
>          .......
>     
>          myTextEdit.SetFocus();
>     
>          return FALSE;  
>     }
>     
>     I want cursor to stay on myTextEdit control whenever this property
>     page appears on top, so that user can key in characters right away.
>     But I can't seems be able to set focus to myTextEdit control by
>     SetFocus(), not even in CMyTextEditPage::OnShowWindow.
>     
>     Can someone point me if I miss any steps?
>     
>     
>     - Wen
>      
>
>
>
Originality is the art of concealing your sources.







P.J. Tezza -- pj@exemplarsoftware.com
Wednesday, January 29, 1997

Exemplar Setup Toolkit manipulates the focus in its license agreement property page (which happens to have a CRichEditCtrl on it):

/*
	The CPropertyPage focus hack is based on MSVC KB Article Q148388.
	The purpose of it is to keep the license agreement text from being 
	highlighted when it is first presented to the user.
*/

#define WM_SETPAGEFOCUS (WM_APP+2)

BOOL CLicenseAgreement::OnSetActive() 
{
	m_psetsht->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);

  	PostMessage(WM_SETPAGEFOCUS, 0, 0L);

	return CPropertyPage::OnSetActive();
}

BEGIN_MESSAGE_MAP(CLicenseAgreement, CPropertyPage)
	//{{AFX_MSG_MAP(CLicenseAgreement)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_SETPAGEFOCUS, OnSetPageFocus)
END_MESSAGE_MAP()

LRESULT CLicenseAgreement::OnSetPageFocus(WPARAM wParam, LPARAM lParam)
{
	CWnd* pwndParent = GetParent();
	ASSERT(pwndParent);
  	CWnd* pwndCancel = pwndParent->GetDlgItem(IDCANCEL);
	ASSERT(pwndCancel);
	pwndCancel->SetFocus();

  return 0;
}

PJ
pj@exemplarsoftware.com

----------
From: 	Wen Lin[SMTP:wen.lin@autodesk.com]
Sent: 	Monday, January 27, 1997 8:59 PM
To: 	mfc-l@netcom.com
Subject: 	SetFocus on CRichEditCtrl

     Environment: NT 4.0, VC++ 4.2b


     I have created a rich text editor control on one of the property
     pages.  The way I created it is by adding a static control on the
     dialog box resource, then obtain the rectangular area from it to
     created CRichEditCtrl as below,
     
     BOOL CMyTextEditPage::OnInitDialog() 
     {
        CPropertyPage::OnInitDialog();
        
         // make the rich edit control
         CWnd *pTempWnd = (CWnd*)GetDlgItem(IDC_TEXTEDITOR);
         ASSERT(pTempWnd);
         CRect rect;
         pTempWnd->GetWindowRect(&rect);
         pTempWnd->DestroyWindow();
         ScreenToClient(&rect);
         BOOL success =  myTextEdit.Create(WS_CHILD | WS_VISIBLE |
                                 WS_TABSTOP | WS_BORDER | WS_VSCROLL | 
                                 WS_HSCROLL | ES_AUTOHSCROLL |
                                 S_AUTOVSCROLL | ES_MULTILINE |    
                                 ES_WANTRETURN,
                                    rect, this, IDC_TEXTEDITOR);
         
          .......
     
          myTextEdit.SetFocus();
     
          return FALSE;  
     }
     
     I want cursor to stay on myTextEdit control whenever this property
     page appears on top, so that user can key in characters right away.
     But I can't seems be able to set focus to myTextEdit control by
     SetFocus(), not even in CMyTextEditPage::OnShowWindow.
     
     Can someone point me if I miss any steps?
     
     
     - Wen




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