Re: Setfocus / killfocus on cbutton
On 6 Dez., 16:53, mfc <mfcp...@googlemail.com> wrote:
On 5 Dez., 20:29, Joseph M. Newcomer <newco...@flounder.com> wrote:
See below...
****
What I would do is invent a code, such as CITB_CHANGED, and use an ON_C=
ONTROL handler to
handle this notification in the parent. The child button would do
GetParent()->SendMessage(WM_COMMAND, MAKEWPARAM(GetDlgC=
trlId(), CITB_CHANGED),
(LPARAM)m_hWnd);
then I would have, in the parent's message map,
ON_CONTROL(CIBT_CHANGED, IDC_WHATEVER_BUTTON, OnWhateve=
rChanged)
void CMyDialog::OnWhateverChanged()
{
updateaControls();
}
****
In the child button class you specifiy the id (GetDlgCtrlId = which
child button is affected by this change) but in the parent class
(dialog class) this information is not further used? Or did I miss
something?
Is there a better solution than this:
1) including all depending button controls to this call in the
OnInitDialog() (sometimes up to six other controls affected by the
spcific button)
m_Button1.SetParams(&m_StatCtrl, CImageTextButton::INCREASE, minvalue,
maxvalue, &m_Button2, &m_Button3);
How can I add these controls to one member-variable of the button
class? - using a clist (m_list.Add(m_Button2) and so on.... ?
****
Key here is how you encode it. I don't think there is a better way t=
han having the
SetParams method (or some variant) for each button, but I might conside=
r, if I have a lot
of buttons, having something of the form:
static const struct {
CImageTextButton * ctl,
CStatic * target,
CImageTextButton::Direction dir,
int minvalue,
int maxvalue} Buttons[] = {
{&mIncreaseSomeValue, &m_SomeControl, CImageTextButton::INCREASE=
, 0, 1 },
{&m_OtherControl, CImageTextButton::DECREASE, 0, 1 },
{NULL, 0, 0, 0} // EOT
};
Could you tell me how you will declare / define this static struct in
the dialog class (so that this struct will be known in some other
methods in this dialog too)? I like the approach using a table / array
(Button[]) without knowing the size of the array at startup. So that
I can add as many buttons as I like.
Is it better to install this struct within the dialog class or should
I use another headerfile which will be included in all dialog-classes
using this struct? And how can I use your initialization in these
classes?
Buttons[] = {
{&mIncreaseSomeValue, &m_SomeControl, CImageTextButton::INCREASE,
0, 1 },
{&m_OtherControl, CImageTextButton::DECREASE, 0, 1 },
{NULL, 0, 0, 0} // EOT
};
void CMyDialog::AddButtons()
{
for(int i = 0; Buttons[i].ctl != NULL; i++)
{
Buttons[i].ctl->SetParameters(Buttons[i].target,
=
Buttons[i].dir,
Buttons[i].minvalue,
Buttons[i].maxvalue);
}
}
and just call "AddButtons" in OnInitDialog. Note that it doesn't cha=
nge the fact that you
have to specify all the buttons, but it handles it in a different way.
I`ve now two small structs to get all required values for updating all
buttons
struct Btn
{
CImageTextButton =
*ctlLeft; /* << */
CImageTextButton =
*ctlRight; /* >> */
CImageStatic =
*target; /* csta=
tic field */
CImageTextButton::Direction =
dir;
int =
=
minvalue;
int =
maxvalue;
};
struct BtnCtrl
{
Btn =
ctrl;
Btn =
subctrl;
CDWordArray =
dis_subctrl; //situations where the
subctrl is complete disabled
};
The struct BtnCtrl will include an additional subcontrol as well as a
wordarray which defines the situations where the subcontrol will be
disabled according to the value of the ctrl-staticfield. I`ve some
cstatic fields which can disable/enable another cstatic field and
their two buttons (<< and >>).
best regards
Hans- Zitierten Text ausblenden -
- Zitierten Text anzeigen -