|
I have one propertypage and it has the 10 radio button and two command button.
All buttons has the onclick event function.
My problem is two command button event is not called.
I checked the message map area. Its looking fine.
I can't simply add another control and compile it.
Because it's huge lib, I have to wait 10 hours to complete.
resource.h has the control Id.
Some other dialog also has the control with same ID, there the event is occured.
Anybody suggest me what could be the problem?
|
|
|
|
|
ganesh.dp wrote: I can't simply add another control and compile it.
Because it's huge lib, I have to wait 10 hours to complete.
There's something weird in that.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Assign unique value for duplicated id, simply.
You should assign all unique (different) id for different controls.
Only one handler will be called for one id value on MFC message mapping.
Because MFC's message mapping is very simple implement which using array of struct,
and decide handler by sequential searching.
When message map is as below;
BEGIN_MESSAGE_MAP(CSampleDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
END_MESSAGE_MAP()
Compiler recognize as below; (rewriting simply)
struct MessageEntry messageEntries[] = {
{ IDC_BUTTON1, OnButton1 },
{ IDC_BUTTON2, OnButton2 }
};
If IDC_BUTTON1 and IDC_BUTTON2 are equal, the sequential searching algorithm always find OnButton1 for IDC_BUTTON{1,2}.
|
|
|
|
|
This was a question in my mind from several days.
Suppose we have a MFC dialog I want to add one checkbox when user clicks on a button. Since user can click several times on a button then it should generate n number of buttons. How can we work with the click event on those buttons. How can we identify each buttons individually? Can we create ids of buttons at runtime ?
|
|
|
|
|
rahul.kulshreshtha wrote: Can we create ids of buttons at runtime ?
Ids are just unsigned integers, so as long as they are unique there's no problem. If you want to create checkboxes at runtime, you have to create an instance of CButton and call the Create method (and pass BS_CHECKBOX along with the other styles).
|
|
|
|
|
And how can we attach a member variable to that.
Can we write something like this?
DDX_Control(pDX, IDC_BTN_CONTROLS + index , mButtons[index]);
As the dialog height is limited so can we attach vertical scroll to dialog. I never worked with scrollbar. Can you suggest any example for vertical scrolling of dialog?
|
|
|
|
|
Yes ... that works.
About scrolling, that's nothing more that handling WM_VSCROLL and reposition the check-boxes (MoveWindow / SetWindowPos ) accordingly.
But consider that your design may be not as good as it seems: as the number of controls grows, the dispatch time for the messages also grow and so the repositioning (you must be very smart about the hiding / showing / moving).
Try thinking to a list-control (CListControl) mimicking the checkboxes by changing the item's state-icons.
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
It would be better to place the dynamic controls in a child dialog placed on the original dialog. That will make scrolling easy (and smooth) since you only have to scroll the child dialog, and not its controls.
Dispatch time is nothing you have to worry about when the user is involved.
|
|
|
|
|
Really interesting suggestions. Thanks to all. I will try these soon.
|
|
|
|
|
Niklas Lindquist wrote: Dispatch time is nothing you have to worry about when the user is involved.
Generally speaking yes, unless you are scrolling also by tracking, with pixel precision. Repositioning one-hundred children while the user is running the mouse or the wheel may be challenging, especially if asynchronous paints are also involved. Nothing dangerous, simply "dirty" visual effects may be perceived while moving.
(But your proposal may mask the problem very well, since it localize it in a small area)
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
If you had to move a lot of controls around, you would of course use LockWindowUpdate[^] to avoid the "dirty" visual effects.
But you're right, it was generally speaking.
|
|
|
|
|
An alternative to Cedrics reply could be to use a CCheckListBox[^] or similar.
|
|
|
|
|
Hi all,
I am working on a sdi application, i have divided my window in two parts using splitter Control. On left side of my window i have used CFormView class. On that dialog i have put a list control. My problem is i have a made a NM_Click event on that list control but when i click on that list that event is not called....
I don't know why this is happening, but can anybody help me in this....
|
|
|
|
|
Is there anyone who has faced similar problem and what is the solution?
Some anti-viruses block socket communication by default so socket based applications can not work properly.
Is there any way to make safe sockets which should not block by anti-viruses?
|
|
|
|
|
rahul.kulshreshtha wrote: Some anti-viruses block socket communication by default
I'm not sure what this has to do with C/C++, it seems more a System Admin question.
I would expect this to be an option on the AV software so you need to change its configuration settings.
It's time for a new signature.
|
|
|
|
|
rahul.kulshreshtha wrote: Is there anyone who has faced similar problem and what is the solution?
Yup the problem is known, certain anti-virus (or proxy) products cause lags and connection problems. There is no low-level programmable solution that I am aware of, probably make it a FAQ point in your end user documentation.
Alternatively contact the anti-virus manufacturer, they might be able to explain why their product is causing problems.
/M
|
|
|
|
|
Some anti-viruses are, IMHO, worst than viruses themselves. You have my sympathy.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi,
In my dialog,I have combobox which contains the status of Switch(On & OFF).
By checking the status of switch,i have to display On or Off in top.
Ex: if Switch1 status is OFF,then the combox shows OFF in top.THen user can change the postion or status of Switch1 by choosing in combobox dropdown.
I havae code like.
a)OnInitDialog()
for(int i=0;i<nState;i++)
{
CString ton = ((CTagSwitch *)oTagBase)->GetCaption(i);
m_cOP.InsertString(i,ton);
}
b)OnPaint()
if(oTagBase->GetSwStatus()==0)
m_cOP.SetCurSel(1);
else
m_cOP.SetCurSel(0);
c)OnCbnSelchangeStatecombo() //User change the positon of switch
int nIndex =m_cOP.GetCurSel();
switch(nIndex)
{
case 0 :
sConfirmMsg="COnfirm to change postion to OFF ?"
break;
case 1 :
sConfirmMsg="COnfirm to change postion to ON?";
break;
}
My problem is,
To change the postion of Switch1,when i dropdown the combobox and click ON,the selection(blue color) is on OFF only(because inOnPaint() im setting SetCurSel(1))
After selecting in OnCbnSelChange() it always show the index what i set in OnPaint() not retriving the index of what im selected.
Whats the mistake.Pls help me.
Anu
|
|
|
|
|
why do you call SetCurSel() of combo box on OnPaint()? can't you set the selection once when the status of switch get changed? this will solve your problem.
|
|
|
|
|
But where can i put that? because OnPaint is continously invoking.so if any change in switch status then it can easily update.
Anu
|
|
|
|
|
Is there any possibility (other than by changing the combo box selection) by which the status of switch get changed after you set it on OnCbnSelchangeStatecombo()?
If yes, isn't there any notification that gets called at that time or can't you implement one so that you can you can change the combo box selection there.
If no, just set the initial combo box selection on OnInitDialog() by calling oTagBase->GetSwStatus(), and no need to update it on OnPaint.
|
|
|
|
|
|
Get rid of the OnPaint() stuff. It's only clouding the issue.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
I finally managed to put my TreeView List together, only to find out I'm unable to retrieve the selection.
Does anyone know how to get the selection?
|
|
|
|
|