|
Is it possible to change the startup location of a CFileDialog? I am working on a legacy application that makes use of multiple monitors, and I need to be able to position the location of the file load/save dialogs. I derived my own class based on CFileDialog and added what I thought was the appropriate SetWindowsPos call in the OnInitDialog method, but the things just will not move. If I change the windows size instead of the position, it correctly truncates the dialog, so I'm fairly sure I have the right window, yet no matter what values I pass in for the position, the location remains the same. Below is the important code from a test program.
BOOL CMyFileDialog::OnInitDialog()
{
CFileDialog::OnInitDialog();
CWnd *pW = GetParent();
RECT Rect;
pW->GetWindowRect(&Rect);
pW->SetWindowPos( NULL, 10, 10, Rect.right - Rect.left, Rect.bottom - Rect.top, 0);
return TRUE;
}
If it makes any difference this is using VS2005.
|
|
|
|
|
You can..
use CWnd::SetWindowPos[^] with the instance created for CMyFileDialog.
--
"Programming is an art that fights back!"
|
|
|
|
|
Your code is setting the postion of your parent window, not your dialog! In reality it is doing nothing since the origin and size remain the same just moving the parent window to point 10, 10 of the screen.
[edit]Missed the new origin[/edit]
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
The documentation I've seen seems to indicate that you have to actually get the parent of the CFileDialog. Since I can manipulate the size of the dialog this way, it would seem that I have the right window.
Further experimenting with my test program shows that I can in fact move the location of the dialog a limited amount. It appear, however, that something prevents you from moving the dialog so that any of it is off of the screen. Unfortunately, I need to move it to a second monitor which seems to be a problem.
|
|
|
|
|
rentzk wrote: The documentation I've seen seems to indicate that you have to actually get the parent of the CFileDialog.
Here[^] is the documentation for SetWindowPos() . The problem with your code is that you are calling this function on the parent window rather than the dialog, and thus your dialog does not move. If you make the correct call then you should be able to move your dialog anywhere within your monitors.
GetWindowRect(&Rect);
SetWindowPos(pW, 10, 10, Rect.right - Rect.left, Rect.bottom - Rect.top, 0);
I have a feeling that you need to use some special values of x to move it from the main monitor, but cannot recall the exact formula; try searching MSDN or Google.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
I don't think it's the documentation for SetWindowPos that is relevant here, but instead the various articles describing how to modify CFileDialog. These articles mention the need to get the parent in order to access the various buttons on the dialog and change it's size. It would appear that this dialog is the child of some other window, but I haven't pulled out win spy yet to see what it is.
When I try to get the window rect directly, the returned value indicates a box of zero size, while the parent call returns legitimate values. Likewise, CallingSetWindowPos with on the parent actually moves the window (not off of the screen, unfortunately), but also adjusts it's size.
|
|
|
|
|
rentzk wrote: These articles mention the need to get the parent in order to access the various buttons on the dialog and change it's size.
That does not sound correct, all dialog controls are children of the dialog window not its parent. Perhaps you would be better to create your own dialog which is derived from CFileDialog ; see here[^] for further information.
rentzk wrote: When I try to get the window rect directly, the returned value indicates a box of zero size, while the parent call returns legitimate values.
Unfortunately I cannot reproduce this eactly as I do not have MFC on my system. However when I tried a similar test via a Win32 application I was able to get the size and position of my dialog, and move it to a different point on the screen independent of its parent. That would suggest to me that the same is possible with an MFC class dialog.
rentzk wrote: Likewise, CallingSetWindowPos with on the parent actually moves the window (not off of the screen, unfortunately), but also adjusts it's size.
And so it should, SetWindowPos should work for any window.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
It would appear that CFileDialog contains a function called OnInitdone. The base class for this function contains nothing more than a CenterWindow call, which has been taking all of my work and throwing it away. Overriding this function and not centering the dialog has everything working correctly, with the dialog being placed on whatever monitor I wish.
|
|
|
|
|
First time poster and newbie.
I have 2 computer systems sitting in 2 different locations. I want to retrieve files from one system to another. Sometime, the traffic is the other way round. Secure access is a concern of mine.
Ideally, to access the target location, I need to provide the IP address and port number. Are these the typical identifications for a remote site?
Also, if security is not compromise, I would like the connection between these 2 locations up for at least 6~12 hours at a time.
Is this a typical Client/Server project? Or this is a sFTP project? or something else altogether?
Can anyone kindly suggest relevant sample project in CodeProject so that I can learn by example from scratch?
I only know how to program in C/C++ in Windows environment.
Thanks in advance.
|
|
|
|
|
|
Thanks. Been to Wiki and there are 4~5 sample apps in CodeProject as well.
Is Peer-to-Peer file transfer method safe? Or it is as safe (or as vulnerable) as the socket layer underneath it?
The files that need to be transfer between the 2 system requires secure connection by law (medical).
From Wiki, Peer-to-Peer operates differently from client-server model. What is the difference between Peer-to-Peer and cloud computing?
Regards,
S
|
|
|
|
|
seifwen wrote: Is Peer-to-Peer file transfer method safe? Or it is as safe (or as vulnerable) as the socket layer underneath it?
The P2P networking model is only as safe as the underlying transport being used... e.g. use a standard TLS library for secure TCP connections. If properly integrated into your application (automatic certification handling or manual validation, etc), this should be able to fulfil requirements for a medical project.
seifwen wrote: Peer-to-Peer operates differently from client-server model.
Yes, they are pretty much the opposite. In a P2P network every node can be client or server (in theory), information/services can be distributed and provided from multiple sources, no centralised architecture.
seifwen wrote: What is the difference between Peer-to-Peer and cloud computing?
Cloud computing is a buzzword to describe an application/business model with a tendency towards client-server model, as far as I understand. On the other hand, P2P is a technical term to describe a networking model (P2P can be part of a cloud's networking architecture, however not typically used).
Hope those answers helped.
|
|
|
|
|
Thank you very much for your explanations. 
|
|
|
|
|
I am enabling my LAN connection using the code:
try
{
bool result = false;
typedef void (__stdcall * LPNcFreeNetconProperties)(NETCON_PROPERTIES* pProps);
HMODULE hmod = LoadLibrary(L"netshell.dll");
if (!hmod)
return false;
LPNcFreeNetconProperties NcFreeNetconProperties = (LPNcFreeNetconProperties)GetProcAddress(hmod, "NcFreeNetconProperties");
if (!NcFreeNetconProperties )
return false;
INetConnectionManager * pMan = 0;
HRESULT hres = CoCreateInstance(CLSID_ConnectionManager,
0,
CLSCTX_ALL,
__uuidof(INetConnectionManager),
(void**)&pMan);
if (SUCCEEDED(hres))
{
IEnumNetConnection * pEnum = 0;
hres = pMan->EnumConnections(NCME_DEFAULT, &pEnum);
if (SUCCEEDED(hres))
{
INetConnection * pCon = 0;
ULONG count;
bool done = false;
while (pEnum->Next(1, &pCon, &count) == S_OK && !done)
{
NETCON_PROPERTIES * pProps = 0;
hres = pCon->GetProperties(&pProps);
if (SUCCEEDED(hres))
{
if (wcscmp(pProps->pszwName,wszName) == 0)
{
if (bEnable)
result = (pCon->Connect() == S_OK);
else
result = (pCon->Disconnect() == S_OK);
done = true;
result=true;
}
NcFreeNetconProperties(pProps);
}
pCon->Release();
}
pEnum->Release();
}
pMan->Release();
}
FreeLibrary(hmod);
return result;
}
The code works fine for winXP but this is not having any effect when I run the same code in win7.
The function returns successfully but there is no effect on my LAN, it remains disabled.
I am not able to figure out where I am committing any mistake.
Thanks and regards,
Manoj
|
|
|
|
|
I've never heard of an Ian connection... Ian, what is this? lol
As to seriously answering the question, sorry, I can't.
|
|
|
|
|
Oops..must be a typing mistake.
|
|
|
|
|
Most likely Windows 7 requires administrator privilege to enable/disable the lan. Try to right-click on your executable and select "Run As Administrator" and see if that helps.
Good luck.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
Sorry for my late reply..was out on the weekend.
I am running the code in my administrator account only but no changes to my LAN connection occur after it. It remains disabled.
Thanks,
Manoj
|
|
|
|
|
Just because you logged on with administrator password does not mean the program has administrator pivilege. You need to try by right-clicking on your software as I said before and choose "Run as administrator".
In Windows 7, all users (even Administrators) only run programs with non-admin privilege.
Hope that helps.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
krmed makes a valid suggestion above.
However I also noticed in the code block:
if (wcscmp(pProps->pszwName,wszName) == 0)
{
if (bEnable)
result = (pCon->Connect() == S_OK);
else
result = (pCon->Disconnect() == S_OK);
done = true;
result=true;
}
you are always setting result = true , which is not correct if your Connect() call has failed.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
Hi Richard
I must have forgotten to comment the
"result=true;"
statement. Thanks for pointing it out.
Well, the problem is the statement:
result = (pCon->Connect() == S_OK);
assigns true to the variable "result" in WinXP account with the privileges to enable/disable the LAN connection
but in case of WIN7 administrator account the value assigned to the variable "result" is false.
There must be some issue with pCon->Connect() function. But I'm not able to figure out why it is not working even in Administrator account in Win7
Thanks and regards,
Manoj
|
|
|
|
|
You should change your code to trap the return value of your Connect() call and then check for the value S_OK . If the reponse is any other value then you should have some indication of why it is failing. Try not to ignore unsuccessful Win32 responses, as you have no idea what is going wrong if you do.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
Hi Richard
I captured the return value of connect() in a local variable and it shows the following message in debug mode:
0x800702e4 the required operation requires elevation.
Can you tell me how to run a function, such as connect() here, in elevated mode ?
I know that an application or any type of file can be run as elevated using ShellExecuteEx(), but how to for a function ?
Thanks and regards,
Manoj
|
|
|
|
|
I don't know of any way to do it for a function; I suggest you just run your application with administrator privileges.
Just say 'NO' to evaluated arguments for diadic functions! Ash
|
|
|
|
|
Hi Richard,
Ok.
By the way, I am already running the application with administrator account so should it make any difference if I run the same application in the same administrator account with "Run as administrator" after right clicking on the application icon ?
Meanwhile, I will try googling for any possible solutions.
Thanks and regards,
Manoj.
|
|
|
|