|
I suppose it would be possible. However, I am trying to keep things simple and user friendly.
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
Following what I think you are trying to do, you are using the wrong control. ComboBoxes are designed to select an option and display it until the selection is changed. Clearing it goes against what it was designed for. You should either use a ListBox or a List Control for what I think you are trying to do.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Thanks for responding.
I wish that a list box would meet my needs!
There is not much real estate on my dialog so the drop down window is very attractive.
In addition, the list of record data is only visible when you want to see it, making the dialog look better (less "busy" and confusing).
If the Combobox was not designed to have the edit box cleared, how come it has the member Clear()?
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: If the Combobox was not designed to have the edit box cleared, how come it has the member Clear()?
To clear any "selected" text from the control. Are you selecting the text prior to calling the Clear() method?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Yes.
I select the text with:
pCombo->SetEditSel(0,-1);
Interestingly, I have found that
pCombo->SetEditSel(0,-1);<br />
pCombo->Clear();
does not work as well as
pCombo->SetEditSel(0,-1);<br />
pCombo->Paste();<br />
pCombo->SetEditSel(0,-1);<br />
pCombo->Clear();
while this is effective - it not cosmetically pleasing.
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: In drop list mode my OnSelchangeCombo function...
What does this method look like?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
What does my OnSelChangeCombo function look like?
It is rather simple:
1. Pointer to the Combobox with assert if NULL,
2. code to return index of selected item in listbox from control directed alpha listing (thank you Chris Losinger!),
3. dirtyflag check of record and associated commit if true,
4. call of the GotoRecord function.
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
Ok, what I have here may help, or it may not since it is not entirely like what you have. I have a CRecordset -derived class that reads from the Employees table of the Northwind database. I have a dialog with a combobox (having the CBS_DROPDOWNLIST style) and listbox. Selecting an item from the combobox will add it to the listbox. The selection in the combobox is then cleared.
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDatabase db;
CSet rs(&db);
rs.Open();
while (! rs.IsEOF())
{
m_combo.AddString(rs.m_LastName);
rs.MoveNext();
}
rs.Close();
m_combo.InsertString(0, "");
return TRUE;
}
void CMyDlg::OnSelchangeCombo1()
{
int nIndex = m_combo.GetCurSel();
CString strItem;
m_combo.GetLBText(nIndex, strItem);
m_list.AddString(strItem);
m_combo.SetCurSel(0);
} Is this close?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Well I got things running like you show here - the Class Wizard info was key - but it still does not clear the edit box in either dropdown or drop list mode - any other suggestions?
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
If you can narrow this project down to just the relevant lines, you can e-mail it to me and I'll take a look.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Thank you.
I spent some time with it this weekend and got it working.
Thank You!
Your assistance was of great service to me!
Thank you again!
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
Overall, what did you do to finally get it going?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
I am beginning to wonder if my use of the dereference operator rather than the dot operator might be part of my problem.
Being a complete beginner, this is the first time I have tried to instantiate a class and my local resource (an embedded systems programmer) cannot provide much assistance.
The class (CCombobox) and member (InsertString) I am using are overridden.
When I instantiate an instance like this
OverRiddenCombobox w_wndOverBox;
locally in the function where I want to use it (along with
w_wndOverBox InsertString(0,"",0)
, my program compiles and runs fine until I try to open the dialog.
Then I get and exception error, and the debuger shows me a line in afxwin.inl apparently defining the not overridden base class member InsertSting with two arguments (my InsertString has three arguments).
Suggestions?
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: I am beginning to wonder if my use of the dereference operator rather than the dot operator might be part of my problem.
Use -> with pointers, and a . (dot) otherwise. The compiler should warn you of incorrect usage.
lctrncs wrote: w_wndOverBox InsertString(0,"",0)
What's holding w_wndOverBox and InsertString() apart?
lctrncs wrote: Then I get and exception error, and the debuger shows me a line in afxwin.inl...
An exception or an assertion?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
DavidCrow wrote: What's holding w_wndOverBox and InsertString() apart?
A dot operator (sorry about the incorrect post).
DavidCrow wrote: An exception or an assertion?
An assertion:
Debug Assertion Failed...
_AFXWIN_INLINE int CCombobox::InsertString(int nIndex, LPCTSTR lpszString)<br />
{ ASSERT(::IsWindow(m_hWnd)); return (int)::Sendmessage(m_hWnd, CB_INSERTSTRING, nIndex, (LPARAM)lpszString); }
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: An assertion:
Debug Assertion Failed...
_AFXWIN_INLINE int CCombobox::InsertString(int nIndex, LPCTSTR lpszString)
{ ASSERT(::IsWindow(m_hWnd)); return (int)::Sendmessage(m_hWnd, CB_INSERTSTRING, nIndex, (LPARAM)lpszString); }
Which indicates you have a non-existent window. At what point are you trying to populate the combobox?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
I populate the combobox in OnInitDialog - which is only called upon dialog start and after a change to the database such as adding or deleting a record.
I am trying to clear the dropdown style edit box (drop list style would be preferred due to the static edit box) from my DisplayRecord function (called at the end of OnInitDialog), and this is where I have instantiated m_wndComboBox, and from where I call m_wndComboBox.InsertString(0,"",0).
The control exists on a modeless dialog, which is trying to open at the time of the assert.
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: ...this is where I have instantiated m_wndComboBox...
m_wndComboBox should be a member variable, not local to some function.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
As I said, I have never tried to instantiate a class instance so that I can use the dot operator.
I tried to instantiate it in a number of locations (mainframe.cpp main.c etc.) without success.
So where should I instantiate my m_wndCombobox so that I can use the dot operator as you suggest
m_combo.InsertStinrg(0,"")
?
Why should the dot operator work when a pointer does not?
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: So where should I instantiate my m_wndCombobox so that I can use the dot operator as you suggest
It should belong to the class that owns it (hence the m_ prefix). In my example, m_combo and m_list are both members of CMyDialog .
lctrncs wrote:
Why should the dot operator work when a pointer does not?
Pointer variables use ->, while non-pointer variables use a dot. In reality,
pointer->member is equivalent to:
(*pointer).member See here for more on the member-selection operator.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
So I should right click on CDialog, choose Add Member Function and enter Ccombobox and m_combo to instantiate m_combo as a member CDialog?
"For a successful technology, reality must take precedence over public relations, for nature cannot be fooled." Richard Feynman, Minority Report to the Official Report on the Space Shuttle Challenger Crash
|
|
|
|
|
lctrncs wrote: So I should right click on CDialog, choose Add Member Function and enter Ccombobox and m_combo to instantiate m_combo as a member CDialog?
No. Use ClassWizard (Ctrl+W) to associate a member variable with a control.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
hi there!
im trying to write a graphing app using the win32 api with MFC...
im trying to figure out how i can represent a decimal number position in a grid of pixels:
i.e.
given y = sqrt(x)
if i calculate with x = 5.7 then y becomes 32.49 which is a bit of a problem because no pixel exists at 32.49, so the line gets drawn at y = 32, so the graph curve is messed up because the curves arent matching up because of the round-off error...
im trying to draw the line using the MoveTo and LineTo functions, and if i can figure out a way to draw the correct pixel corresponding to the equation then i can use a very low incremental value such as 0.1 to make the curve look smooth, though its not really smooth...
but if theres a better way of drawing a graph app (without using bezier curves or whatever) please could u let me know!
hope u can help me out! thx!
|
|
|
|
|
If yu are going to use LineTo to draw your lines, then you are going to have to draw them using very small increments, and the round-ff errors are not going to be that noticeable. If you are trying to draw the curve for squares or square-root values, for example, you need to keep your increments as small as possible to produce a "smooth" effect. Otherwise you are going to have to use some othe mathematical functions expressly written to display curves in a very smooth format. You can get more help on the internet about those than I can explain here. Good luck
John P.
|
|
|
|
|
Hey all,
I've run into a small problem. When Windows generates an HDC on its own (for a paint message) it uses the clip region to determine the update area. If you call GetClipBox() the coordinates start at 0,0. If that region is a portion of a larger window I would need to know where that area is in relation to the entire window.
Is there a function that can translate the HDC coordinate space into one that maps onto the window rect (or some other global space?)
Thanks!
ant
|
|
|
|