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

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


Changing 'Open' to 'OK' in a CFileDialog

beriksen@cda.com
Monday, October 21, 1996

     Environment: VC++ 4.1, Win 95 / Win NT 4.0
     
     Hello All!
     
     I'm trying to something that I feel should be quite simple:  I want to 
     use an instance of CFileDialog to specify a file name.  With this in 
     mind, the Open button should probably say OK, right?  Well, I've 
     provided a hook function.  I'm using OFN_EXPLORER, so in my hook 
     function I can catch CDN_INITDONE during a WM_NOTIFY.  What I want to 
     do is use the CommDlg_OpenSave_SetControlText macro to send a 
     CDM_SETCONTROLTEXT message, but this macro (and message) takes the ID 
     of the control for which you want to set the text.  Where do I find 
     that ID?  I've been looking all over, and have so far consulted the 
     faq, msdn, and my personal archive of this list.
     
     If you know this number (and in what file/article/sample you found 
     it), could you let me know?
     
     Thanks!
     
     Brian Eriksen
     CDA/Wiesenberger
     
     PS - I've got this working under Win3.1 (under win32s) and on NT 3.51, 
     because these platforms used the old style file open that was based on 
     a template that was published (i.e., I know the ID of the 
     Open/Save/Save As button).  It's this new 95/NT40 stuff that's got me 
     baffled.




Randy Taylor -- drt@ebt.com
Tuesday, October 22, 1996

[Mini-digest: 10 responses]

The ID's of the controls on the common dialogs can be found
in \msdev\include\dlgs.h
If you're not sure which is which, after looking
at dlgs.h, just use spyxx.exe to examine the control
you're interested in to determine it's id. Then,
cross-reference your findings witht he dlgs.h.

randy_taylor@ebt.com


>     Environment: VC++ 4.1, Win 95 / Win NT 4.0
>     
>     Hello All!
>     
>     I'm trying to something that I feel should be quite simple:  I want to 
>     use an instance of CFileDialog to specify a file name.  With this in 
>     mind, the Open button should probably say OK, right?  Well, I've 
>     provided a hook function.  I'm using OFN_EXPLORER, so in my hook 
>     function I can catch CDN_INITDONE during a WM_NOTIFY.  What I want to 
>     do is use the CommDlg_OpenSave_SetControlText macro to send a 
>     CDM_SETCONTROLTEXT message, but this macro (and message) takes the ID 
>     of the control for which you want to set the text.  Where do I find 
>     that ID?  I've been looking all over, and have so far consulted the 
>     faq, msdn, and my personal archive of this list.
>     
>     If you know this number (and in what file/article/sample you found 
>     it), could you let me know?
>     
>     Thanks!
>     
>     Brian Eriksen
>     CDA/Wiesenberger
>     
>     PS - I've got this working under Win3.1 (under win32s) and on NT 3.51, 
>     because these platforms used the old style file open that was based on 
>     a template that was published (i.e., I know the ID of the 
>     Open/Save/Save As button).  It's this new 95/NT40 stuff that's got me 
>     baffled.
>
>

-----From: "Robertson David" 


     Override and implement the following:
     
     void CYourFileDialog::OnInitDone() // Called for EXPLORER's only!!
     {
        // Make the OK button say "OK".
        SetControlText(IDOK, _T("OK"));
     }
-----From: Christine Hagberg 


Environment: VC++ 4.1, Win 95 / Win NT 4.0

Hi Brian,

I had to do the same thing.  I derived a class from CFileDialog and   
overrode the OnInitDialog
Below is the code for the OnInitDialog.

//we are doing this so we can change the prompt on the OK button of the   
dialog

 -Chris Hagberg
   

BOOL CPlayMpegDlg::OnInitDialog()
{
 CFileDialog::OnInitDialog();

 CString sButton;

 sButton.LoadString( IDS_PLAYMPEG_BUTTON );
 if (this->m_ofn.Flags & OFN_EXPLORER)
 {
  CWnd *pOKbutton = this->GetDlgItem( IDOK );
  if (pOKbutton != NULL)
   pOKbutton->SetWindowText( sButton );

  // send the message
  //to the dialogs parent
  GetParent()->SendMessage( CDM_SETCONTROLTEXT, IDOK, (LPARAM)
    (LPSTR)(LPCTSTR)sButton);
 }
 else
 {
  CWnd *pOKbutton = this->GetDlgItem( IDOK );
  if (pOKbutton != NULL)
   pOKbutton->SetWindowText( sButton );
 }
 return TRUE;
}
-----From: Mike Geldens 

G'day Brian,

September DDJ (Dr Dobbs Jnl) has a good article on customizing the explorer
open dialog. Pick up the mag or take a look at www.ddj.com...

regards

Mike

-----From: John Young 

Hi Brian,

It's IDOK.  Check the "Explorer - Style Control Identifiers" in the Win32 SDK
topic, it lists all the identifiers used on the common dialogs.

>     PS - I've got this working under Win3.1 (under win32s) and on NT 3.51, 
>     because these platforms used the old style file open that was based on 
>     a template that was published (i.e., I know the ID of the 
>     Open/Save/Save As button).  It's this new 95/NT40 stuff that's got me 
>     baffled.

Check out FILEOPEN.DLG in your MSDEV\INCLUDE sub-directory.

-John
John Young, Yaesu Musen Co., Ltd., Japan.
If only computers did what you wanted, not what you tell them.

-----From: Ian Pepper 

Hi Brian,

A brief poke around with the Spy++ tool reveals that the id of the Open
button is 1 and the Cancel button 2.  

Hope this helps,

Ian

ian@flexicom.ie

-----From: Mario Contestabile

>...CFileDialog to specify a file name....[snip]...takes the ID 
> of the control for which you want to set the text.  Where do I find 
> that ID? 

msdev\include\*.dlg

-----From: Serge Lalonde 

Hi there!

For changing the OK button use the IDOK id. You can find the description
for the dialog in c:\msdev\include\fileopen.dlg. In fact, all of the common
dialogs are described there. Just look at the .dlg files in the same
directory. The proper place to change it is in your OnInitDone() method
or when catching CDN_INITDONE during a WM_NOTIFY (as you are doing).

Good luck.
--
Have a tremendous day!
    _/_/_/_/ _/_/_/_/ _/_/_/    _/_/_/  _/_/_/_//  300 Leo Parizeau, Suite 2222
   _/       _/       _/    _/ _/       _/      /  Montreal, PQ, Canada H2W 2P4
  _/_/_/_/ _/_/_/   _/_/_/_/ _/  _/_/ _/_/_/  /  Voice: (514) 849-8752 x236
       _/ _/       _/  _/   _/    _/ _/      /__Fax: (514) 849-4239__
_/_/_/_/ _/_/_/_/ _/    _/   _/_/_/ _/_/_/_/ Lalonde, Infolytica Corp.
-----From: Igor Nedelko 

Hi Brian,

The default dialog box templates can be found in the \MSVC\INCLUDE with
.DLG file extension.Note that the default dialog box templates contain
constant identifiers such as cmb1, lst1, stc1, and so forth. These
constants are defined in the DLGS.H file, located in the \\MSVC\INCLUDE
directory. You must include this file in your application's .RC file as
well.

Regards,
Igor





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