|
This ist what you want:
http://www.codeproject.com/dialog/skinsyse.asp
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I have a MFC dialog application that has an option to go to the system tray after clicking a button... I also call ShowWindow(false); to hide my application window when I add the icon to the systray.
Unfortunately, I want to hide my app immediately after starting it... I try in InitDialog, OnCreate, and it does not happen - the window does not seem to respond to ShowWindow(false).
Some help will be highly appreciated, for I am stuck with this problem.
"Needless redundancy is the hobgoblin of software engineering." - Peter Darnell
|
|
|
|
|
ShowWindow (SW_HIDE);
/ravi
"There is always one more bug..."
ravib@ravib.com
http://www.ravib.com
|
|
|
|
|
Where do I call this? Because at the end of InitDialog it does NOT work... the icon is put in the systray, but ShowWindow (SW_HIDE) does not hide my dialog...
Looking forward to suggestions.
"Needless redundancy is the hobgoblin of software engineering." - Peter Darnell
|
|
|
|
|
seen this problem many times, but never found a satisfactory solution.
a working solution however, is to create a timer in initdialog, and then hide your app in the timer function, remembering to kill the timer as well.
Sorry to dissapoint you all with my lack of a witty or poignant signature.
|
|
|
|
|
Can you POST (not send) yourself a (WM_USER + n) message to your dialog towards the end of OnInitDialog()?
However, based on what you are saying here, if your dialog does not need any user input, why create and show the dialog in the first place?
|
|
|
|
|
|
That's a brilliant solution Joaquín!
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
If you don't find me on CP, I'll be at Bob's HungOut
|
|
|
|
|
Well, not to take away from the "brilliant"ness of Joaquin's solution, but I thought mine's was better.
Regards,
Alvaro
|
|
|
|
|
Joaquin's solution was for modal dialogs!
You solution lies in making the dialog modeless and then entering the CWinApp message loop which is a nice trick too I must say.
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
If you don't find me on CP, I'll be at Bob's HungOut
|
|
|
|
|
How to tile / cascade the windows on the desktop programly ?
example will be great !Thanx!
|
|
|
|
|
|
I want to transfer files through the Internet via Visual C++. There's no problem with the transaction of the files but if i try to execute these files at the remote site an error occurs. What have i to do during the transaction or else where to get the files running ?
|
|
|
|
|
First:
How you are transfering the files? Do You are using Ftp classes?
Second:
How you are trying to execute the app, in the remote machine, or in your pc but with the file in the remote machine?
Regards!!!
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
I guess you will have some kinda small program stub running on the target machine and that you use that to receive the files over there. So all you need to do is add code to ShellExecute the transferred files within that stub.
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
If you don't find me on CP, I'll be at Bob's HungOut
|
|
|
|
|
Hello everyone,
I have a modaless CPropertySheet with its name "Control Panel"
I also use the command CWnd::FindWindow(NULL, "Control Panel") to locate the control panel.
Problem came when I just so happen to have the Window's _real_ Control Panel open while running my program. The FindWindow() found the CWnd ptr to the Window's Control Panel. I tried replacing the NULL in FindWindow() with my class name "CControlPanelSheet" which is a inhareted class of CPropertySheet, but FindWindow just returns NULL, and can't find any windows.
Does anyone know what may fix the problem? What is the proper way to retrieve the pointer to a modaless CPropertySheet?
Thank you for your help.
|
|
|
|
|
I tried replacing the NULL in FindWindow() with my class name "CControlPanelSheet"...
This parameter is not the name of the MFC but instead of something
called "Window class" which does not have much to do with your
classes --here it is "DIALOG", I think.
If you want to locate a pointer to the sheet inside the same application, then the best thing you can do is having a global variable that holds that pointer: the same CControlPanelSheet object can set/clear this global variable on construction/destruction, so you always know if the object is alive or not.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
> the same CControlPanelSheet object can set/clear this global variable on construction/destruction...
This is a good idea. Do you mean I can place something in OnSetActive and OnKillActive? I think what you mean is setting that the PropertySheet's own pointer to 0. How can I set its own pointer when I'm within its class? Do you mean sending a message from OnKillActive to the parent window that created the modaless PropertySheet, and have the parent set the pointer to 0 there?
|
|
|
|
|
Well, it is not in OnSetActive and OnKillActive (those would be useful for keeping track of the active property page), but rather on construction and destruction time. To polish things up, you can wrap it all in static methods of your class. Sort of like this: (Warning: I've not even compiled it, expect typos)
class
CControlPanelSheet{
...
static CControlPanelSheet* GetActiveSheet()
{
return theOne;
}
static BOOL CreateSheet(...){
if(theOne)return FALSE;
new CControlPanelSheet();
return TRUE;
}
...
private:
static CControlPanelSheet theOne;
CControlPanelSheet(...)
{
...
theOne=this;
}
~CControlPanelSheet()
{
theOne=NULL;
}
void afx_msg OnDestroy()
{
CPropertySheet::OnDestroy();
delete this;
}
};
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Ah, this is a really engenious way of doing things. Keeping a static variable to keep track of its own pointer. Very smart. Thank you Joaquín.
|
|
|
|
|
BTW, it's not "DIALOG". But good guess though.
I like your pointer idea. If you can get back to me explaining more of that, I'd appreciate it. Thanks Joaquín.
|
|
|
|
|
What is it then?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
I don't know... I don't think there is one.
I believe the class name exists in CDialog. CDialog has a create that takes
-- Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
Where I think the 1st argument is what FindWindow looks for. However, I fail to find a simular thing in CPropertySheet.
|
|
|
|
|
I'm afraid that class name has nothing to do with any template: indeed, the class name for dialogs is "DIALOG" (and for buttons is "BUTTON", for texts is "STATIC").
To find out, you just have to investigate any property sheet with a small program called Spy++ that comes as part of your Visual Studio. I happen not to have this program handy right now.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
I have functions that both "delete" two buffer allocated by "new." This has to be done because the functions can be used in different ways. I was just wondering is there a way to know if the memory has already been deleted and so don't do it again?
|
|
|
|