|
Hi
As far as I know there are two types of dialogs. Modeless and Modal.
Now according what it says here : [url]http://www.devarticles.com/c/a/Cplusplus/Using-MFC-in-Cplus-Dialog-Boxes/4/[/url] and also on Microsft's MSDN site that to create Modeless dialog I must call Create() function and DestroyWindow() function. Whereas for the modal dialog I only call DoModal.
Now I am confused as my dialog does not call any of those functions and I am still able to display it.
The dialog initialization is:
BOOL CProgressDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ShowWindow(SW_HIDE); // Show or hide a control, etc.
return TRUE;
}
and to display I call ShowWindow(SW_SHOW);
and Close() function to close dialog:
void CProgressDlg::Close()
{
EndDialog(IDOK);
}
It works.! So what kind of dialog is this? I guess this is a modeless dialog as it doesnt need to wait untill the user presses OK button. Is it correct what I am doing here or its wrong? Please let me know.
My second question: The dialog I created is used to display a progress bar while some text files are processed using a separate worker thread (thread used purely for files processing not for the dialog). The problem I have is when I start processing files the dialog with the progress bar appears but its behind the main window. How can I force it to display over the main window as the modal dialogs do? I guess WS_OVERLAPPED will do but where to use it?
|
|
|
|
|
How are you creating your dialog object?
Modal's are (usually) created on the stack (or heap):
CMyDialog myDlg;
myDlg.DoModal()
When it goes out of scope, everything is cleaned up automagically...(if created on the stack)
robert_s wrote:
Now I am confused as my dialog does not call any of those functions and I am still able to display it.
Now I am confused...how are you creating a dialog if your no calling Create or DoModal???
robert_s wrote:
My second question: The dialog I created is used to display a progress bar while some text files are processed using a separate worker thread (thread used purely for files processing not for the dialog). The problem I have is when I start processing files the dialog with the progress bar appears but its behind the main window. How can I force it to display over the main window as the modal dialogs do? I guess WS_OVERLAPPED will do but where to use it?
SetForegroundWindow() ???
How do I print my voice mail?
|
|
|
|
|
Hey,
I am using Visual C++, and I created a Combo Box and added the options into it. Now, when someone selects one of the options, I want a text describing the option to appear in an edit box. I have looked around and only found a few things, but nothing really helped.
Thanks for the help
|
|
|
|
|
The combox by default displays the text in the list control in the edit box as each item is selected.
I'm not sure, but you could maybe try capturing ON_CBN_EDITUPDATE or ON_CBN_SELCHANGE and then forcing the edit to change it's value.
This approach won't work if the drop down list and edit field are dual synchronized. What I mean by this is if you set the edit content it make force a new item to be selected inside the list box as well and visa-versa.
If this is the case you will have to subclass the CComboBox control and override this functionality.
Cheers
How do I print my voice mail?
|
|
|
|
|
I tried doing that, didn't work, here is my code.
<br />
void CDEPDlg::OnSelchangeCombo1() <br />
{<br />
UpdateData(true);<br />
<br />
if(m_type1=="Run #1")<br />
{<br />
m_purp1="Test";<br />
}<br />
<br />
UpdateData(false);<br />
<br />
}<br />
m_type1 is the combo box, and Run #1 is the option in the combo box.
m_purp1 is the edit box that i want it to display the description.
I know it is wrong, so criticize all you want, just need help with it.
Thanks
|
|
|
|
|
It's been a while since I subclassed comboboxes or dealt with them for that matter
How did you get m_purp1 and m_type1 to map to the 2 controls that make up an CComboBox ?
How do I print my voice mail?
|
|
|
|
|
I went to the class wizard and did it there.
m_type1 is a CString and m_purp1 is a CString also
|
|
|
|
|
If you're wanting to update an Edit Box that isn't the one at the top of the Combo Box (which is what it looks like) try this
void CDEPDlg::OnSelchangeCombo1()
{
CString text;
m_type1.GetWindowText (&text);
if(text == "Run #1")
m_purp1.SetWindowText("Test");
}
- Aaron
|
|
|
|
|
Thanks for the help.
I am getting this error,
C:\DEP\DEPDlg.cpp(182) : error C2664: 'void __thiscall CWnd::GetWindowTextA(class CString &) const' : cannot convert parameter 1 from 'class CString *' to 'class CString &'
A reference that is not to 'const' cannot be bound to a non-lvalue
|
|
|
|
|
I took out the & in the (&text) and it worked, and it works, but i have to select the Run #1 twice for the Test to show up in the edit box.
Thanks
|
|
|
|
|
but i have to select the Run #1 twice for the Test to show up in the edit box
Try chaging your message from CBN_SELCHANGE to CBN_SELENDOK. I think the reason you're having to select it twice is that CBN_SELCHANGE is sent before the selection changes, therefore the text, "Run #1" in your case, isn't actually in the edit portion when the message is processed. CBN_SELENDOK is sent after the selection is made. Just use class wizard to remove the selchange and add a selend
- Aaron
- Aaron
|
|
|
|
|
Thanks for your help.
I tried that and I still have to do it twice to get it to show up. Any more ideas?
|
|
|
|
|
Figured that would work, guess not though. Try this
int cur = m_type1.GetCurSel ();
CString text;
m_type1.GetLBText (cur, text);
if (text == "Run #1")
m_purp1.SetWindowText ("Test");
- Aaron
|
|
|
|
|
|
I need to make a Virtual MIDI Port. ( actually several ) I have worked with MIDI just enough to be dangerous. I can trigger physical ports, but I need a way to create dummy ports to re-direct midi from one application to another.
There isn't a whole lot of information available that I've seen out there, but any direction or insight would be greatly appreciated.
Thanks
|
|
|
|
|
Do you need to code one, or just to use one?
The only one I know of that works with current Windows OS's is MidiYoke.. http://www.midiox.com/ [^]
As far as coding goes... no, don't know how that would be done.
|
|
|
|
|
thanks. i knew about midi yoke, but yes, i want to code my own.
i appreciate the time!
|
|
|
|
|
Hi,
I have a multi-threaded c++ application. I was wondering how I can calculate the memory footprint of my application and CPU % per thread from the program itself.
Please advise.
|
|
|
|
|
Search the message boards
This subject has been addressed countless times...
I personally say...you can't (Win98 anyways) without a VxD, but on NT/XP systems I believe there are API functions you can call to retrieve this info...
I believe Win98 resource meter has a logging feature which might output what your looking for in a log file, you can then parse and display as required...
Cheers
How do I print my voice mail?
|
|
|
|
|
I want to get a record from MyTable which GroupID=3 AND account='abc' AND usename='tom'" but it alway ERROR "Too few parameters"
<br />
CMyRecordSet is;<br />
str.Format("GroupID=%d AND account=\'%s\' AND usename=\'%s\'"<br />
,iGroupID<br />
,theApp.m_strAccount<br />
,theApp.m_strUsername);<br />
<br />
is.m_strFilter=str;<br />
is.Open();
Too few parameters. Expected 1. <= ERROR
help me
I think I do not do anything wrong in this SQL
it similars with
is.Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT * FROM MyTable WHERE GroupID=3 AND account='abc' AND usename='tom'");
both ERROR
|
|
|
|
|
Hello. Is it somehow possible to disable the linking between VK_RETURN and CDialog::OnOK? Whenever I press ENTER in my dialog, it calls the OnOK, and I would like to avoid this.. Is it possible?
|
|
|
|
|
1) Give the OK button another ID besides IDOK.
2) In the OnOK() handler, don't call the base class CDialog::OnOK() .
http://www.codeproject.com/cpp/cppforumfaq.asp#mfc_dlgclosekeys
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
I tried to override OnOK, and yes, the dialog doesn't close, but if I then add an OnKeyDown-handler to my dialog, it never receives any VK_RETURN-notifications.. Is this beacuse MFC "grabs" the VK_RETURN, and sends it to OnOK, or just beacuse I'm doing something wrong?
|
|
|
|
|
Depending on which control has focus, the dialog may not even "see" the key presses. Tell us more of what you are trying to do.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
VK_RETURN actually invokes a default button in your dialog, which happens to be your OK button.
You could unchek "default button" property for it in the resource editor, or at a run time.
|
|
|
|