|
MFC OnInitDialog lengthy process halts screen painting
I have a problem, this is similar to another post, where a process in OnInitDialog takes too long and slows the screen from painting on dialog startup.
OnInitDialog<br />
{<br />
if()<br />
else<br />
DoSomethingVerryLengthy();<br />
}
The previously posted solution used a Create instead of a DoModal. This allows us to seperate the initialization of the dialog from the lengthy process. The posted solution looks like this:
pOtherDlg = new COtherDlg(...);<br />
pOtherDlg->Create(...);<br />
pOtherDlg->ShowWindow(SW_SHOW);<br />
pOtherDlg->UpdateWindow();<br />
pOtherDlg->DoSomethingVerryLengthy();
My question is, since this code replaces pOtherDlg->DoModal(), and DoModal waits for the dialog to close before continuing execution. How do I make this new chunk of code wait until the user closes pOtherDlg?
Thanks in advance for the help...
|
|
|
|
|
littleGreenDude wrote: How do I make this new chunk of code wait until the user closes pOtherDlg?
try calling pOtherDlg->RunModalLoop(); after pOtherDlg->DoSomethingVerryLengthy();
|
|
|
|
|
Have you considered using a modal dialog that spawns a secdonary thread to do the lengthy processing? This will result in the modal dialog's primary thread being able to respond to painting and user messages.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
For my WinSock how can i show green and red signal for connected/not connected respectively? Do we have any thing in Controls in Resource editor that could be used(eg: Picture control)?
|
|
|
|
|
A picture control is one way. You could use two icons - one red, one green -
and set the control's icon appropriately.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
could you please elaborate on it? i m not famaliar with using icons on front-end....
|
|
|
|
|
yashveer wrote: could you please elaborate on it?
Sure. Are you using MFC or straight Win32?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
Here's some of the operations involved:
Add 2 icons to your app's resources - here I'll assume they are custom size
10x10 icons, with IDs IDI_INDICATORRED and IDI_INDICATORGREEN.
Draw the icons the way you want them to look.
Then...
CStatic m_IndicatorStatic;
...
if (m_IndicatorStatic.Create(NULL, WS_CHILD | SS_ICON, CRect(0,0,10,10), this, ID_INDICATORSTATIC))
{
m_IndicatorStatic.SetIcon((HICON)::LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_INDICATORRED), IMAGE_ICON, 10, 10, LR_SHARED));
}
...
m_IndicatorStatic.SetIcon((HICON)::LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_INDICATORGREEN), IMAGE_ICON, 10, 10, LR_SHARED));
Hope that helps a bit!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
// Add as member of window or dialog class
CStatic m_IndicatorStatic;
where do i add this IDI_ICON1 as CStatic m_IndicatorStatic?
I tried in class wizard but didnt find this ID....
|
|
|
|
|
In the properties for resources, you should be able to change the ID to whatever you want.
IDI_ICON1 sounds like the default ID - you can use that as well. It's just not as meaningful in the
code as an ID that's more descriptive.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
changing the ID is fine but that's not my point.....my point is:
once i change the ID name to whatever ...IDI_ICON1 or IDI_ICONREDBUTTON, after that how do i associate it with the variable
CStatic m_IndicatorStatic , as i didnt find any Icon in class wizard
|
|
|
|
|
I showed an example of setting a picture control's (which is a static control) icon
at runtime. "m_IndicatorStatic.SetIcon(..."
The icon is the picture. The static control is what draws the picture.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
My view class is derived from CRecordView(). And I have a socket event, OnConnect() where i would like to display Red icon. Similarly on OnClose() it would display Green Icon in place of the Red one. Also my project is SDI application.
How can this be done??
|
|
|
|
|
I showed code to set the control's icon. You can do that wherever you want.
Just set the control's icon to the appropriate one.
Depending on where you get the socket event notification, you may need to post a message
to the appropriate window containing the control.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Maybe that[^] would help ? I know that there are some other controls so if you search through the articles, you'll probably find some more.
|
|
|
|
|
#include <iostream>
using namespace std;
int oo(int m);
int sum=0;
void main()
{
int m;
cin>>m;
oo(m);
abc:
cout<
|
|
|
|
|
|
Russell
|
|
|
|
|
they are the same maybe...
|
|
|
|
|
Little tips for coding:
1) use longer names for varaibles and functions (this helps to understand what the code do)
2) do not use goto ... find other ways when possible: in your case you can return -1; or something similar
Russell
|
|
|
|
|
having been brought up from coding raw hex on an 8080 SDK through Assembler and on into C and C++ I have no qualms about using goto. goto is after all just a JMP return -1 is also a JMP. break is also a JMP.
why are you threatened by goto?
|
|
|
|
|
Because you don't goto the middle of another function.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
obviously you have never disassembled BIOS. JMPing into the middle of functions is common practice in every BIOS I have ever disassembled.
|
|
|
|
|
are that BIOSs work?
Russell
|
|
|
|