|
Called from yet another function belonging to the same class. I only have one class because everything have been in one dialog box until now.
|
|
|
|
|
acerunner316 wrote: Called from yet another function belonging to the same class.
OK, my point is, as long as you're not creating it in the class' WM_CREATE handler or OnInitDialog()
override it should show.
Are you creating the dialog, doing the processing, and destroying the dialog all in one function?
If so, then you could try this:
...
pLoadingDlg->Create(IDD_LOADING,this);
Invalidate(FALSE);
UpdateWindow();
....do processing
...destroy dialog as usual
|
|
|
|
|
Yes i am creating, processing and destroying all in one function. But on different calls of the function. Therefore, the pointer to CLoading has to be static.
I've tried your new node, it works! But the dialog box is created in the upper left corner of the main dialog box. How can I position it so that it pops up in the center like with the popup and overlap styles?
|
|
|
|
|
acerunner316 wrote: How can I position it so that it pops up in the center like with the popup and overlap styles?
Center of the main dialog?
You could set the Center style to TRUE or move the dialog yourself:
pLoadingDlg->Create(IDD_LOADING,this);
CRect MainDialogRect, LoadDialogRect;
GetClientRect(&MainDialogRect);
pLoadingDlg->GetWindowRect(&LoadDialogRect);
pLoadingDlg->MoveWindow((MainDialogRect.Width() - LoadDialogRect.Width()) / 2,
(MainDialogRect.Height() - LoadDialogRect.Height()) / 2,
LoadDialogRect.Width(), LoadDialogRect.Height());
*EDIT* Fixed the MoveWindow call heh :laugh:
-- modified at 21:55 Monday 27th November, 2006
|
|
|
|
|
The center style seems to center the child dialog relative to the screen and not to the main window.
The code you provided positioned the child dialog where I wanted, except for one problem. The controls in the main dialog appear to overlap the "loading" dialog. I know that controls are considered child windows as well. So how to I make the "loading" dialog on top of the other child dialogs?
|
|
|
|
|
Instead of MoveWindow...
pLoadingDlg->SetWindowPos(wndTop, (MainDialogRect.Width() - LoadDialogRect.Width()) / 2, (MainDialogRect.Height() - LoadDialogRect.Height()) / 2, LoadDialogRect.Width(), LoadDialogRect.Height(), SWP_NOSIZE | SWP_SHOWWINDOW);
Maybe?
|
|
|
|
|
Setting the style to "Child" does not work because, when you disable a window, Windows will automatically disable its child windows as well.
When you used SetFocus, did you do it as follows:
HWND hwndSaveFocus = GetFocus() ;
... (display dialog and delete when done) ...
SetFocus(hwndsaveFocus) ;
Scott
|
|
|
|
|
hwndSaveFocus = GetFocus();
that gives me the error:
error C2440: '=' : cannot convert from 'class CWnd *' to 'struct HWND__ *
|
|
|
|
|
OK, hang on, let me check the API documentaiton....be right back
|
|
|
|
|
OK, my bad...you're evidently using MFC, which provides its own "flavor" of 'GetFocus()'. Try the following:
CWnd* pwndSaveFocus = GetFocus() ;
...
SetFocus(pwndSaveFocus) ;
The difference is that 'GetFocus()' and 'SetFocus()' from the MFC classes operate on an instance of the 'CWnd' class. The code I originally gave you is bare-bones Windows API, and operates on window handles (HWND). The 'CWnd' class in MFC actually encapsulates HWNDs.
Alternatively, you could force the use of the Windows API functions by using the scoping operator to go "outside" the MFC scope to the global scope, as follows:
HWND hwndSaveFocus = ::GetFocus() ;
...
::SetFocus(hwndSaveFocus) ;
The '::' at the beginning of each of the above statements forces the compiler to bypass the MFC functions and map directly to the Windows API.
Hope this gets you a little closer.
Scott
|
|
|
|
|
The MFC SetFocus apparently takes 0 parameters.
Then I tried the global scope with the :: compiled, but still loses focus after destroying the "loading" dialog.
Looks like Marks method is getting me closer. I just need to figure out how to center the child dialog.
Thanks for your help.
|
|
|
|
|
ok, i tried the MFC SetFocus() without any parameters. It works if it comes after destroying the child window. I was using it before destroying the child window before. Only thing is, the window loses focus for a split second after destroying the child window and then regains focus. So it sorta blinks. That's good enough for me right now. So I'll keep it.
|
|
|
|
|
Good!
I'm sorry, I should have been more clear that I thought the LAST thing you would do is reset the focus, making sure it was done after the child window was destroyed. Windows will attempt to set the focus using its own internal (and often misundertood) logic when it shuts down a window. And, or course, God only knows what MFC is doing.
Scott
|
|
|
|
|
Just remembered...
Just in case you didn't know, you should probably override OnCancel() in your modeless dialog
class and do nothing in your implementation (don't call the base class OnCancel()) so the
user can't mess things up with the ESC key
|
|
|
|
|
There is one more way to do it. Make a dialog box with desired message. Create a thread, call DoModal() in this thread to display that dialog box. When u need to kill dialog, kill the thread. How's that??
We Believe in Excellence
www.aqueelmirza.cjb.net
|
|
|
|
|
what do this two programs do if anyone can write the commens next to them tnx again
CODE #1
#include <iostream>
using namespace std;
void branje(double *polje, int velikost);
void zamenjava(double *polje, int velikost);
void pomikvdesno(double *polje, int velikost);
void sort(double *polje, int velikost);
void izpisi(double *polje, int velikost);
int main()
{
int velikost = 10;
double polje[velikost];
branje(&polje[0],velikost);
izpisi(&polje[0],velikost);
sort(&polje[0],velikost);
izpisi(&polje[0],velikost);
zamenjava(&polje[0],velikost);
izpisi(&polje[0],velikost);
pomikvdesno(&polje[0],velikost);
izpisi(&polje[0],velikost);
return 0;
}
void izpisi(double *polje, int velikost)
{
static int a=1;
cout<<"Klic st:"<< a <<endl;
for(int="" i="0;" i<velikost;="" i++)
="" {
="" cout<<"stevilo="" je:="" "<<polje[i]<<endl;
="" }
="" a++;
}
void="" branje(double="" *polje,="" int="" velikost)
{
="" cout<<"vpisi="" stevila."<<endl;
="" stevilo:="" ";
="" cin="">>polje[i];
}
}
void zamenjava(double *polje, int velikost)
{
for(int i=0; i<velikost; i++)
="" {
="" if(i="" %="" 2="=" 0)
="" !="velikost-1)
" double="" z;
=""
="" z="polje[i];
" polje[i]="polje[i+1];
" polje[i+1]="z;
" }
="" }
}
void="" zamenjaj(double="" &a,="" &b)
{
="" a="b;
" b="z;
}
void" pomikvdesno(double="" *polje,="" int="" velikost)
{
="" for(int="" i="velikost-2;" i--)
="" polje[0]="z;
}
void" sort(double="" j="0;" j<velikost="" -1;="" j++)
="" i<velikost-1;="" if(polje[i]="" <="" polje[i+1])
="" zamenjaj(polje[i],polje[i+1]);
="" }
}
code="" #2
#include="" <iostream="">
#include <stdio.h>
using namespace std;
struct NIZ
{
char niz[100];
int length;
};
void branje(NIZ *nizi);
void uredi(NIZ *nizi);
void izpis(NIZ *nizi);
int main()
{
NIZ nizi[6];
branje(nizi);
uredi(nizi);
izpis(nizi);
return 0;
}
void branje(NIZ nizi[])
{
for(int i=0; i<6 ; i++)
{
cout<<"Vpisi besedo: ";
cin>>nizi[i].niz;
nizi[i].length=strlen(nizi[i].niz);
}
}
void izpis(NIZ nizi[])
{
for(int i=0; i<6; i++)
{
cout<<nizi[i].niz<<endl;
}
}
void="" zamenjaj(niz="" &niz1,="" niz="" &niz2)
{
="" niz3;
=""
="" niz3="niz1;
" niz1="niz2;
" niz2="niz3;
}
void" uredi(niz="" nizi[])
{
="" for(int="" j="0" ;="" <="" 5="" j++)
="" {
="" i="0;" i<5;="" i++)
="" if(nizi[i].length="" nizi[i+1].length)
="" zamenjaj(nizi[i],nizi[i+1]);
="" }
="" }
}
=""
<div="" class="ForumSig">I'm The Stig
|
|
|
|
|
do the function and variable names have any real meaning in a language other than english ?
except for sort I have absolutly no clue.
|
|
|
|
|
yea i can try to write it in english
CODE #1
#include <iostream>
#include <stdio.h>
using namespace std;
struct NIZ
{
char niz[100];
int length;
};
void read(NIZ *nizi);
void u(NIZ *nizi);
void write(NIZ *nizi);
int main()
{
NIZ nizi[6];
read(nizi);
u(nizi);
write(nizi);
return 0;
}
void read(NIZ nizi[])
{
for(int i=0; i<6 ; i++)
{
cout<<"Write a word: ";
cin>>nizi[i].niz;
nizi[i].length=strlen(nizi[i].niz);
}
}
void write(NIZ nizi[])
{
for(int i=0; i<6; i++)
{
cout<<nizi[i].niz<<endl;
}
}
void="" switc_h(niz="" &niz1,="" niz="" &niz2)
{
="" niz3;
=""
="" niz3="niz1;
" niz1="niz2;
" niz2="niz3;
}
void" u(niz="" nizi[])
{
="" for(int="" j="0" ;="" <="" 5="" j++)
="" {
="" i="0;" i<5;="" i++)
="" if(nizi[i].length="" nizi[i+1].length)
="" switc_h(nizi[i],nizi[i+1]);
="" }
="" }
}
code="" #2
#include="" <iostream="">
using namespace std;
void r(double *po, int v);
void z(double *po, int v);
void p(double *po, int v);
void s(double *po, int v);
void iz(double *po, int v);
int main()
{
int v = 10;
double po[v];
r(&polje[0],v);
iz(&polje[0],v);
s(&polje[0],v);
iz(&polje[0],v);
z(&polje[0],v);
iz(&polje[0],v);
p(&polje[0],v);
iz(&polje[0],v);
return 0;
}
void i(double *po, int v)
{
static int a=1;
cout<<"Call st:"<< a <<endl;
for(int="" i="0;" i<v;="" i++)
="" {
="" cout<<"number="" is:="" "<<po[i]<<endl;
="" }
="" a++;
}
void="" r(double="" *po,="" int="" v)
{
="" cout<<"write="" numbers."<<endl;
="" numbers:="" ";
="" cin="">>po[i];
}
}
void z(double *po, int v)
{
for(int i=0; i<v; i++)
="" {
="" if(i="" %="" 2="=" 0)
="" !="v-1)
" double="" x;
=""
="" x="po[i];
" po[i]="po[i+1];
" po[i+1]="x;
" }
="" }
}
void="" z(double="" &a,="" &b)
{
="" a="b;
" b="x;
}
void" p(double="" *po,="" int="" v)
{
="" for(int="" i="v-2;" i--)
="" po[0]="x;
}
void" sort(double="" j="0;" j<v="" -1;="" j++)
="" i<v-1;="" if(po[i]="" <="" po[i+1])
="" z(po[i],po[i+1]);
="" }
}
=""
<div="" class="ForumSig">I'm The Stig
|
|
|
|
|
Hi all ,
Please help me out to programmaticaly find whether we have
Rights to "CREATE & MODIFY IN a specified folder" in vc++.
INPUT :
NAME OF THE Folder
OUTPUT : Whether it is possible for logged user to create a file in folder
for thendral
|
|
|
|
|
The easiest way is just to try and create a (temporary) file. If it fails with a specific error, you know that current permissions are inadequate.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
|
My application uses CFileDialog to select a file to work with.
It seems to work well (the file is selected and returned) but when I execute other part of the application, an exception occurs (always in the same instruction: a query execution)
No problems arise if CFileDialog DoModal is not called or even if it is called but no file is selected (cancel button)
First I've tried to understand the problem, compiling with the SDK and using even "#define _WIN32_WINNT 0x500" and using CFileDialog either on stack and heap, but with no results.
At the end I've used the GetOpenFileName() API but it doesn't solve.
const char *szFilter = "JPG images (*.jpg)|*.jpg||";
CFileDialog dlg( TRUE, "jpg", NULL, OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST, szFilter, this );
if( dlg.DoModal() != IDOK )
{
return;
}
I use VC++ 6.0 SP6 with PDSK Feb 2003 on XP Professional SP2
Some tips ?
|
|
|
|
|
Hmm....
Are you check the return values for any possible error messages?
How is the file passed to the part of the application that is throwing the exception? What state is the file in and what is the open type (i.e. binary, input, output, etc...)?
Just some thoughts,
BP
|
|
|
|
|
I store the file path returned by CFileDialog into a database table and neither opened or modified.
The exception, however, is thrown when a query is executed in another table and in another CDialog, with no relations with the CDialog where CFileDialog has been executed.
I've even tried to compile with #define _WIN32_WINNT 0x500 and CFileDialog allocated on heap and when "delete dlg" is called, an exception is thrown immediatly.
It seems CFileDialog/GetOpenFileName has some weird behaviours. Searching around the web no solution i've applied has worked.
|
|
|
|
|
make the definition like that:
#define _WIN32_WINNT 0x0400
In CommDlg.h you can view this:
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
CFileDialog doesnt expect an OPENFILENAME this big.
|
|
|
|