Setting the default push-button using BS_DEFPUSHBUTTON
Andi Giri -- agiri@ctiis.com
Monday, September 23, 1996
Environment: Win95, VC++ 4.2
In a dialog box, I am trying to set the default pushbutton with
SetButtonStyle(), instead of specifying DEFPUSHBUTTON in the Resource
(.RC) file.
Basically, I am reusing a dialog for various scenarios, and would like
to
have either IDOK or IDC_ADD (a button defined in teh .RC file) act as
the default pushbutton. Both are defined as just PUSHBUTTONs in the RC
file.
Code follows:
BOOL CFaxEntryDlg::OnInitDialog()
{
if (condition_met)
{
CButton *cAdd;
cAdd = (CButton *) GetDlgItem(IDC_ADD);
cAdd->SetButtonStyle(cAdd->GetButtonStyle() | BS_DEFPUSHBUTTON);
}
}
I have tried this code in OnInitDialog(), OnShowWindow(), OnCtlColor().
I used Spy to look at the IDC_ADD button's style right from when it
received WM_CREATE; I started with BS_PUSHBUTTON, then got set to
BS_DEFPUSHBUTTON all the time when I called SetButtonStyle(), but when
the dialog drew itself, the style would change back to BS_PUSHBUTTON.
Where is the problem? Is there any other later message than
WM_SHOWWINDOW where I can shove this code?
Andi
Brad Wilson/Crucial Software -- crucial@pobox.com
Tuesday, September 24, 1996
[Mini-digest: 11 responses]
> In a dialog box, I am trying to set the default pushbutton with
> SetButtonStyle(), instead of specifying DEFPUSHBUTTON in the Resource
> (.RC) file.
Have you tried calling SetDefID() instead?
--
Brad Wilson | crucial@pobox.com http://www.thebrads.com/bradw
Objectivist Philosopher |
Software Engineer | "How can you say you like my noise
Web Page Designer | when I haven't made a sound?"
System Administrator | - Harry Connick Jr.
-----From: "Cunningham Graham, IK 23"
well somewhere there is a technical note on this cause I doubt I would
have found it myself :-) but anyway here is the code to change the
default pushbutton to another button on the same dialog
//make the search button the default
m_OKButton.SetButtonStyle( (m_OKButton.GetButtonStyle() &
SetDefID(IDC_SELT_SEARCH);
m_SearchButton.SetButtonStyle( (m_SearchButton.GetButtonStyle() &
BS_DEFPUSHBUTTON) );
Graham Cunningham
00 41 31 338 0633
-----From: David.Lowndes@bj.co.uk
Andi,
Hae a look at Knowledge Base article Q67655 "Changing/Setting the Default
Push Button in a Dialog Box". That says you need to do 3 actions to change
the default push button:
"To change the default push button, perform the following three steps:
1. Send the BM_SETSTYLE message to the current default push button to
change its border to that of a regular push button.
2. Send a DM_SETDEFID message to the dialog box to change the ID of the
default push button.
3. Send the BM_SETSTYLE message to the new default push button to
change its border to that of a default push button.
"
Dave Lowndes
-----From: Phil Reeves
I think there's a CDialog::SetDefID function
Philip Reeves
Knowledge Engineer
*************************************
Royal Brompton Hospital
Sydney Street
London
SW3 6NP
UK
Tel: +44 (0)171 351 8702
Fax: +44 (0)171 351 8743
e-mail: p.reeves@rbh.nthames.nhs.uk
web: http://www.rbh.nthames.nhs.uk
*************************************
-----From: Davidovich Dmitry
Try SetDefID(IDC_ADD) instead.
+++++++++++++++++++++++++++++++++++++++++
Dmitry Davidovich
CS Tel Aviv University
dmitry@enigma.co.il
ddmitry@libra.math.tau.ac.il
+++++++++++++++++++++++++++++++++++++++++
-----From: groftde@ebs.ac.com (Derek F. Groft - UTL)
Have you tried
pDlg->SetDefID( IDC_ADD );
or
pDlg->SendMessage( DM_SETDEFID, IDC_ADD );
You should be able to do either of these from any callback.
-----From: kitk@mudshark.sunquest.com (Kit Kauffmann)
Use SetDefID (DM_SETDEFID) instead
-----From: "Oefelein, Martin"
Use SetDefID (IDC_ADD).
ciao,
Martin
-----From: chris.downs@slug.org (Chris Downs)
Call CDialog::OnInitDialog() as the first thing in the above proc.
Then in CFaxEntryDlg::OnInitDialog(), return FALSE when done.
Your IDC_ADD button will then display as a default push button.
---
* Blue Wave/QWK v2.12 *
-----From: David Watt
You need to use a different message to make this work. Check out
DM_SETDEFID in the help -- it works. Setting the button style alone doesn't.
- Dave
----
David Watt Finnigan Corp.
watt@finnigan.com (408) 433-4828 ext. 2664
Defn: Millihelen -- the amount of beauty required to launch one ship.
-----From: dima@ssm6000.samsung.ru (Dulepov Dmitry)
[Mailer: "Groupware E-Mail". Version 1.0]
I had that problem too. Try this code (it works in my applications)=
:
void CMyDlg::SetDefButton(int nID)
{
CWnd* pButton;
DWORD dwDefInfo =3D SendMessage(DM_GETDEFID, 0, 0L);
if (HIWORD(dwDefInfo) & DC_HASDEFID && (int)LOWORD(dwDefInfo) !=
=3D nID)
{
// Reset 'DefButton' style
pButton =3D GetDlgItem((int)LOWORD(dwDefInfo));
if (pButton)
pButton->SendMessage(BM_SETSTYLE, LOWORD(BS_PUSHBUTTON)=
| LOWORD((pButton->GetStyle() & ~BS_DEFPUSHBUTTON)), MAKELPARAM(TR=
UE, 0));
}
=
SendMessage(DM_SETDEFID, (WPARAM)nID, 0L);
pButton =3D GetDlgItem(nID);
if (pButton)
{
pButton->SendMessage(BM_SETSTYLE, LOWORD(BS_DEFPUSHBUTTON) =
| LOWORD((pButton->GetStyle() & ~BS_PUSHBUTTON)), MAKELPARAM(TRUE, =
0));
pButton->SetFocus(hButton); // Optional!
}
}
You can call this function from OnInitDialog() in your class.
Good luck!
Dmitry A. Dulepov
Groupware Group
Samsung Electronics Co., Ltd., Russian Research Center
Tel.: +7(095)213-9207
Fax.: +7(095)213-9196
E-Mail (Internet): dima@ssm6000.samsung.ru
| Вернуться в корень Архива
|