|
add a tool tip to a button?
pliz post some code...
thanks
|
|
|
|
|
I would like to know if someone could explain me wht is the cause of this debug error:"abnormal program termination ".
thanks in advance
gerald
|
|
|
|
|
SYMPTOMS
When creating a temporary object and then re-throwing an exception, as demonstrated in the sample code in the More Information section of this article, the application terminates abnormally.
RESOLUTION
See the More Information section for the sample code and the workaround.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.
MORE INFORMATION
Sample Code:
class aClass
{
public:
aClass(const char*){} ;
~aClass(){} ;
} ;
void push(const aClass& val)
{
}
void main()
{
int a = 5 ;
try
{
try
{
throw a ;
}
catch(int)
{
//Workaround: uncomment the following 2 lines
//aClass aObj("ABC") ;
//push(aObj) ;
//Comment the line below
push("ABC") ;
throw ;
}
catch(...)
{
}
}
catch(...)
{
}
}
Read the MSDN!
|
|
|
|
|
This seems a depressingly typical problem with learning MFC. All the examples of changing view, of course, assume you're doing it in the frame window, in response to a message. I'm trying to do it from the CDocument (switching to an errors list if the incoming document fails to validate). How the devil do I find my way to the frame window object from there? I suppose, if I get really desperate, I can store a pointer to my frame window in a global inside it's constructor but please tell me there's a better way than that.
This seems to be part of a pattern with MFC. Object instances are created inside MFC methods and hidden away from the programmer in undocumented and unsupported members. Persnally I think that the whole thing would be much better if the CRuntimeClass stuff had never been dreamed up.
|
|
|
|
|
You could get a pointer to the first view, and then call myView->GetParentFrame(). There may be a more acceptable way, but this is the one I thought of first.
|
|
|
|
|
Hi all,
I added an ActiveX to my resource ...
Now, i want to remove that ... how can i do that ?
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
select it and press 'delete'.
|
|
|
|
|
Hi all,
Q1. I want to connect to database in server, for do that i must use Database path (\\ServerName\ShareName\Test.MDB) or i must use of Connection string (DSN = ldap; User ID = sa; Prodiver = and ....) ???
Q2. What is CDaoWorkspace performance ?
Q3. What is different between Data Link (UDL) and DSN ???
Thanks for helps,
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
I know how to do this normally, but I don't seem to be catching any WM_CTLCOLOR messages in my controls using WTL. Can anyone tell me how to go about this ?
Christian
#include "std_disclaimer.h"
The careful application of terror is also a form of communication.
Eagles may soar, but weasels don't get sucked into jet engines.
|
|
|
|
|
Christian,
I've got an WTL app now that catches WM_CTLCOLORSTATIC messages for my static controls with no problems. Are you working with a standard form view app or something else?
|
|
|
|
|
I'm working in a dialog box that is WTL, the main project is a plain Win32 window. I am trying to catch WM_CTLCOLOREDIT for my edit box and it is never called.
Christian
#include "std_disclaimer.h"
The careful application of terror is also a form of communication.
Eagles may soar, but weasels don't get sucked into jet engines.
|
|
|
|
|
I put up a dialog box in WTL and found that I caught WM_CTLCOLOREDIT like so:
BEGIN_MSG_MAP(CMyDlg)
MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)
END_MSG_MAP()
LRESULT OnCtlColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
ATLTRACE("OnCtlColorEdit\n");
return 0;
}
|
|
|
|
|
Ah.. I was trying to capture it in the alternate message map for the edit control. How do I then change two edit controls to have different colours on the same dialog - by checking the wParam against the HWND ?
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
My typical handler looks something like:
LRESULT OnCtlColorEdit(...)
{
// This next line assumes that you've wrapped your edit controls with
// one of WTL's control wrappers in atlctrls.h.
// i.e. CEdit m_Edit1; m_Edit1.Attach(GetDlgItem(IDC_MY_EDIT_CONTROL));
if ((HWND)lParam == m_Edit1.m_hWnd)
{
::SetTextColor((HDC)wParam, RGB(0,0,255)); // blue
return ::GetSysColor(COLOR_WINDOW);
}
else if ((HWND)lParam == m_Edit2.m_hWnd)
{ ... etc.
}
return 0;
}
|
|
|
|
|
Sup.
I have an existing text\HTML file, made by an ofstream obj, and
I want to find a char' stream in the file and set the 'eof()' right there.
e.g.:
ofstream of("moo.txt");
of << "La la la \n And la la la some more, "
"A cow does moo, and some other stuff";
// The file after "match & cut" of the string
// "A cow does moo, and some other stuff"
// will look like:
// "La la la \n And la la la some more, "
Take your best shot
10x.
|
|
|
|
|
I think you have to use the fd function to get a handle to the file descriptor. Then use read() to search for your character and then seek() with -1 and write() once you've found it.
|
|
|
|
|
I have a CDialogImpl-based class, implementing a modeless dialog. My application can have a number of such dialogs, so I'm using this code to create one:
CMyDialog *pDlg = new CMyDialog;
pDlg->Create(NULL);
pDlg->ShowWindow(SW_SHOW); When user will press the close-button in the upper right corner of my dialog - I must destroy the object and the window, so I'm using DestroyWindow(); in WM_CLOSE handler and delete this; in OnFinalMessage().
The problem is that the program falls with ASSERT(pThis->m_pCurrentMsg == &msg) in atlwin.h, line 2281. Btw, if I close the main application - these dialogs are destroying without any ASSERTs...
How can I delete the class after the window have been destroyed?
With the best regards, Vitaly.
|
|
|
|
|
Surely if you've called DestroyWindow then that is all you need to do. Have you traced back to see what was called to cause the ASSERT? I'm betting on delete this.
Christian
#include "std_disclaimer.h"
The careful application of terror is also a form of communication.
Eagles may soar, but weasels don't get sucked into jet engines.
|
|
|
|
|
I don't think that DestroyWindow() is enough. Cause my destructor is not called in such case.
With the best regards, Vitaly.
|
|
|
|
|
The problem is this code near the bottom of that function in atlwin.h
pThis->OnFinalMessage(hWnd);
You can't call delete this from a function that's being called by this. I hope that makes sense.
The way I would solve this is to create a WM_USER function which does the delete from the main app such as:
#define WM_USER_DELETE_DIALOG WM_USER+1
CMyDialog::DeleteMe()
{
PostMessage(parent, WM_USER_DELETE_DIALOG , 0, 0);
}
CApp::OnDeleteDialog()
{
delete pDlg;
}
|
|
|
|
|
That's odd, though. The docs on CDialogImpl::OnFinalMessage() say:Called after receiving the last message (typically WM_NCDESTROY ). Note that if you want to automatically delete your object upon the window destruction, you can call delete this; here.
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|
|
I've read the same in MFC documentation. And I've thought that atl works the same way but it doesn't
I don't like idea with WM_USER-based message but it seems to be the only way to solve this problem.
With the best regards, Vitaly.
|
|
|
|
|
Yes, I've though about this way. The problem is that I will have many windows like this. Different windows, different classes... So I must implement some kind of window manager for them.
But I still hope that delete this; will work somewhere
With the best regards, Vitaly.
|
|
|
|
|
From the WTL newsgroup (sign up! -- http://groups.yahoo.com/group/wtl)
From: "Tim Smith" <tim.smith@o...>
Date: Thu Jan 18, 2001 11:41 am
Subject: Re: DestroyWindow and OnFinalMessage ?
Here is a basic roadmap of what you need to do. First, inside your
dialog box class, you need make a new version of DialogProc. I just
copied the DialogProc from ATL.
Next, add a flag to your class called m_fDeferDelete. Initialize it
to false.
Inside your new DialogProc, in the WM_NCDESTROY clause after the call
to OnFinalMessage, add the following lines:
if (pThis ->m_pCurrentMsg == NULL)
delete pThis;
else
pThis ->m_fDeferDelete = true
Then in your new DialogProc, after the call to ProcessWindowMessage,
add the code:
if (pThis ->m_fDeferDelete && pOldMsg == NULL)
{
delete pThis;
return FALSE;
}
There might be a better way to do it, but this will work.
In my real code, I created a new base class that included an auto
delete flag. All my dialogs are based on this class. If the auto
delete flag is not set, then the dialog works normally. If it is
set, then the class self deletes as expected.
|
|
|
|
|
In a multi user environment / LAN it is sometime required to figure out who
/ which user on the LAN is "Holding" a file open (maybe that user crashed
and is not even aware of that) and I need to replace the file...
So I need a window with a user list and for each user - list of files they
have a hold on, or alternatively - a list of files and which users are
currently holding these files.
Any help will be appreciated
Thanks,
Alex
|
|
|
|