|
You must define the extern declaration on the top of the .cpp file... otherwise your cpp doesnot know about the the structure you defined globally
do it now..!
Trace The Bugs...
|
|
|
|
|
yes i did that, but i found my problem.
very stupid
in my new class i forgot to add
#include <afxtempl.h>
|
|
|
|
|
If your application is called MyDialog
Add the following structure right after the line:
#include "resource.h"
in the file MyDialog.h (Not MyDialogDlg.h):
///////////////////////////
typedef struct
{
CString a;
CString b;
CString c;
} MYCARRAYSTRUCT;
//////////////////////////
Right after the declaration of MyDialogApp() a little further down in the .h file, Add the line:
///////////////////////////
MYCARRAYSTRUCT mm_Global;
///////////////////////////
Now in your dialog's (it is now global).
Add the following line into any subroutine
///////////////////////////////////////////////////////////////////////////
MYCARRAYSTRUCT *m_GData = &( ( MyDialogApp * ) AfxGetApp() ) -> mm_Global;
///////////////////////////////////////////////////////////////////////////
The above line sets up a pointer to the global mm_Global. Now you can refer to the variables as pointer extensions ('->'). Best of all, VS's autocompletion will give you a list of variables in the structure, and if you put a comment ('//') after each declaration, it will show them in the autocompletion as well.
Be careful if you have a timer event, that you are not clobbering work. I've chased this problem from time to time.
Woo Hoo!
That's it
I hope this helps
Doug
Doug Joseph (Engineering Guy)
|
|
|
|
|
I have a dialog window with a few drop down list. When I select one it updates a var that the other drop downs use. The problem is that when I use the other drop downs after this var gets set it doesn't show the latest
ex. if it increments a var the other boxes are one behind.
How do I get the boxes to jive?
|
|
|
|
|
you might need a manual UpdateData(TRUE).
|
|
|
|
|
Had the update in already, tried two! Didn't help.
Thanks
|
|
|
|
|
Hi, I've got the following bit of code...
CString cs;
cs.Format(_T("mailto:?subject=VectorWriter files&file=\"%s\""), ftis->szSrc);
ShellExecute(lp->m_hWnd, NULL, cs, NULL, NULL, SW_SHOWNORMAL);
I want to send a file via email, "file" generates and error, does anybody know the correct switch to use?
I can't find any documentation for at all!
Many thanks,
Alan Dugdall
|
|
|
|
|
First of all you havent specified the email address. Then secondly, you can't send attachments this way.
Nish
Regards,
Nish
Native CPian.
Born and brought up on CP.
With the CP blood in him.
|
|
|
|
|
mailto protocol
It appears that mailto: does not support file attachments.
Like it or not, I'm right.
|
|
|
|
|
|
There's a MAPI wrapper here at CP that i'm particularly fond of; it does attachments nicely.
CMapi v1.01 - A MAPI Implementation
---Shog9---
From now on we can call C# and MC++ "The square wheel languages" -- Jack Handy, The Lounge
|
|
|
|
|
I create a MFC dialog-based application supporting automation,
add new ATL object as an interface (ITestInterface),
attempt to execute this:
CComPtr<itestinterface> pMan;
if (pMan.CoCreateInstance(__uuidof(TestInterface))!=S_OK) // fails here!
{
AfxMessageBox("Error");
return;
}
and get a failure.
Do you know what's wrong?
rechi
|
|
|
|
|
you should save the return code from CoCreateInstance, and use the Error Lookup utility to find out what the code means.
-c
The ants are my friends. They're blowing in the wind.
|
|
|
|
|
Right! The class was not registered.
But now i get a new instance of the application every time i use a new ptr to the interface. It acts like server and i don't see why it doesn't use itself as the server.
rechi
|
|
|
|
|
Not quite sure what you mean, but if you mean what I think you mean try
DECLARE_CLASSFACTORY_SINGLETON(CYourClass)
Like it or not, I'm right.
|
|
|
|
|
I did. Has no effect. Thanx anyway!
rechi
|
|
|
|
|
It sounds like it IS a server. If you want to only have one copy of the .exe running with multiple connections you have to specify it in the registration.
hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
/*REGCLS_MULTIPLEUSE*/REGCLS_MULTI_SEPARATE | REGCLS_SUSPENDED);
I thought REGCLS_MULTILEUSE (which is the wizards default) caused the app to be resused for each instance of its components. In fact, the correct option is REGCLS_MULTI_SEPARATE.
Good luck,
Bill
|
|
|
|
|
Yes, it is the server.
And no, it's not the correct option, because it keeps creating a new instance.
I think i'm gonna put the interfaces in some separated dll.
For your effort, thanx!
rechi
|
|
|
|
|
Probably a good idea, I don't know what else you might be doing wrong. that parameter changed fixed the problem for me. Sounds like in process components is a better architecture for what you want to do anyway.
Good Luck,
Bill
|
|
|
|
|
I have a situation with an edit box when the user types in an existing code, data is displayed in subsequent fields. If they type in a new number, I clear the data in the subsequent fields. The populating/clearing of the subsequent fields is triggered in the KillFocus callback of the edit box. The problem is, there are pushbuttons, like Save, Close, which now will clear the data, since moving focus out of the edit box by pressing the Close button invokes the KillFocus callback.
Is there a way in the KillFocus callback to know that a press of one of the pushbuttons is in the message queue so I can process this case differently?
Thanks in advance,
Bob
|
|
|
|
|
OnKillFocus provides also the CWnd to be given the focus. You can check whether this corresponds to one of your special buttons.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
I tried to do this, but I don't understand what is happening. When tabbing off of the Edit box, CWnd is a value of 12b89c, CWnd hWnd is 180bd4. If I press one of the 3 pushbuttons, the values are 12b748 and 180bd4 respectively. None of these values match the CWnd value I get returned when calling GetDlgItem(PushButtonId) for each of the pushbuttons. So how do I match the CWnd value I get in the callback with the pushbuttons?
Thanks,
Bob
|
|
|
|
|
Oh well, I've tried in a small test app, and the CWnd passed to OnKillFocus seems to be that of the parent dialog. So I'm afraid this approach does not work. Sorry.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
OK, that explains what I was seeing. Is there anyway to get the ID of the control that is about to receive focus when in the OnKillFocus?
Thanks,
Bob
|
|
|
|
|
Have you tried seeing what GetFocus(...) and GetNextDlgTabItem(...) return?
Also, remember that if you call any functions that return a CWnd object, like GetFocus(...) , you will be getting a temporary CWnd (actually a CTempWnd ) object unless you have already "bound" a class to the control in question. What that means that when in doubt, compare the value of the m_hWnd member to see if you have a certain control.
Peace!
-=- James.
"Fat people are hard to kidnap."
(Try Check Favorites Sometime!)
|
|
|
|